Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5e50b562 authored by Johannes Gallmann's avatar Johannes Gallmann
Browse files

Make BackAnimationSpec respect DisplayMetrics changes

Bug: 329832380
Flag: ACONFIG com.android.systemui.predictive_back_animate_dialogs TEAMFOOD
Test: atest BackAnimationSpecTest
Test: atest OnBackAnimationCallbackExtensionTest
Test: Manual, i.e. verifying that predictive dialog back animation respects screen bounds after folding/unfolding device
Change-Id: I799f989b8ae4a5f72c00f2f91335aad116c1652b
parent 69a62d57
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -711,7 +711,6 @@ private class AnimatedDialog(
        dialog.setDismissOverride(this::onDialogDismissed)

        if (featureFlags.isPredictiveBackQsDialogAnim) {
            // TODO(b/265923095) Improve animations for QS dialogs on configuration change
            dialog.registerAnimationOnBackInvoked(targetView = dialogContentWithBackground)
        }

+12 −11
Original line number Diff line number Diff line
@@ -37,7 +37,7 @@ fun interface BackAnimationSpec {

/** Create a [BackAnimationSpec] from [displayMetrics] and design specs. */
fun BackAnimationSpec.Companion.createFloatingSurfaceAnimationSpec(
    displayMetrics: DisplayMetrics,
    displayMetricsProvider: () -> DisplayMetrics,
    maxMarginXdp: Float,
    maxMarginYdp: Float,
    minScale: Float,
@@ -45,6 +45,8 @@ fun BackAnimationSpec.Companion.createFloatingSurfaceAnimationSpec(
    translateYEasing: Interpolator = Interpolators.LINEAR,
    scaleEasing: Interpolator = Interpolators.STANDARD_DECELERATE,
): BackAnimationSpec {
    return BackAnimationSpec { backEvent, progressY, result ->
        val displayMetrics = displayMetricsProvider()
        val screenWidthPx = displayMetrics.widthPixels
        val screenHeightPx = displayMetrics.heightPixels

@@ -56,7 +58,6 @@ fun BackAnimationSpec.Companion.createFloatingSurfaceAnimationSpec(
        val maxTranslationY = maxTranslationYByScale - maxMarginYPx
        val minScaleReversed = 1f - minScale

    return BackAnimationSpec { backEvent, progressY, result ->
        val direction = if (backEvent.swipeEdge == BackEvent.EDGE_LEFT) 1 else -1
        val progressX = backEvent.progress

+8 −8
Original line number Diff line number Diff line
@@ -23,10 +23,10 @@ import android.util.DisplayMetrics
 * https://carbon.googleplex.com/predictive-back-for-apps/pages/st-1-dismiss-app
 */
fun BackAnimationSpec.Companion.dismissAppForSysUi(
    displayMetrics: DisplayMetrics,
    displayMetricsProvider: () -> DisplayMetrics,
): BackAnimationSpec =
    BackAnimationSpec.createFloatingSurfaceAnimationSpec(
        displayMetrics = displayMetrics,
        displayMetricsProvider = displayMetricsProvider,
        maxMarginXdp = 8f,
        maxMarginYdp = 8f,
        minScale = 0.8f,
@@ -37,10 +37,10 @@ fun BackAnimationSpec.Companion.dismissAppForSysUi(
 * https://carbon.googleplex.com/predictive-back-for-apps/pages/st-2-cross-task
 */
fun BackAnimationSpec.Companion.crossTaskForSysUi(
    displayMetrics: DisplayMetrics,
    displayMetricsProvider: () -> DisplayMetrics,
): BackAnimationSpec =
    BackAnimationSpec.createFloatingSurfaceAnimationSpec(
        displayMetrics = displayMetrics,
        displayMetricsProvider = displayMetricsProvider,
        maxMarginXdp = 8f,
        maxMarginYdp = 8f,
        minScale = 0.8f,
@@ -51,10 +51,10 @@ fun BackAnimationSpec.Companion.crossTaskForSysUi(
 * https://carbon.googleplex.com/predictive-back-for-apps/pages/st-3-inner-area-dismiss
 */
fun BackAnimationSpec.Companion.innerAreaDismissForSysUi(
    displayMetrics: DisplayMetrics,
    displayMetricsProvider: () -> DisplayMetrics,
): BackAnimationSpec =
    BackAnimationSpec.createFloatingSurfaceAnimationSpec(
        displayMetrics = displayMetrics,
        displayMetricsProvider = displayMetricsProvider,
        maxMarginXdp = 0f,
        maxMarginYdp = 0f,
        minScale = 0.9f,
@@ -65,10 +65,10 @@ fun BackAnimationSpec.Companion.innerAreaDismissForSysUi(
 * https://carbon.googleplex.com/predictive-back-for-apps/pages/st-4-floating-system-surfaces
 */
fun BackAnimationSpec.Companion.floatingSystemSurfacesForSysUi(
    displayMetrics: DisplayMetrics,
    displayMetricsProvider: () -> DisplayMetrics,
): BackAnimationSpec =
    BackAnimationSpec.createFloatingSurfaceAnimationSpec(
        displayMetrics = displayMetrics,
        displayMetricsProvider = displayMetricsProvider,
        maxMarginXdp = 8f,
        maxMarginYdp = 8f,
        minScale = 0.8f,
+1 −1
Original line number Diff line number Diff line
@@ -39,7 +39,7 @@ fun Dialog.registerAnimationOnBackInvoked(
    targetView: View,
    backAnimationSpec: BackAnimationSpec =
        BackAnimationSpec.floatingSystemSurfacesForSysUi(
            displayMetrics = targetView.resources.displayMetrics,
            displayMetricsProvider = { targetView.resources.displayMetrics },
        ),
) {
    targetView.registerOnBackInvokedCallbackOnViewAttached(
+1 −1
Original line number Diff line number Diff line
@@ -27,7 +27,7 @@ class BackAnimationSpecTest : SysuiTestCase() {
        val maxY = 4.0f
        val minScale = 0.8f

        val backAnimationSpec = BackAnimationSpec.floatingSystemSurfacesForSysUi(displayMetrics)
        val backAnimationSpec = BackAnimationSpec.floatingSystemSurfacesForSysUi { displayMetrics }

        assertBackTransformation(
            backAnimationSpec = backAnimationSpec,
Loading