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

Commit 1ed88151 authored by Coco Duan's avatar Coco Duan
Browse files

Animate depth push scale for hub to AOD transition

Bug: 404535174
Test: verify hub->AOD and AOD->Hub with auto-show enabled
Test: atest KeyguardRootViewModelTest
Flag: com.android.systemui.gesture_between_hub_and_lockscreen_motion
Change-Id: I10248389d6705b7db1347566450e08ad22cdd8df
parent be1e1c94
Loading
Loading
Loading
Loading
+127 −0
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@ import com.android.systemui.scene.data.repository.setSceneTransition
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.shade.shadeTestUtil
import com.android.systemui.shared.Flags
import com.android.systemui.statusbar.notification.data.model.activeNotificationModel
import com.android.systemui.statusbar.notification.data.repository.ActiveNotificationsStore
import com.android.systemui.statusbar.notification.data.repository.activeNotificationListRepository
@@ -69,6 +70,7 @@ import com.android.systemui.util.mockito.whenever
import com.android.systemui.util.ui.isAnimating
import com.android.systemui.util.ui.stopAnimating
import com.android.systemui.util.ui.value
import com.google.common.collect.Range
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.emptyFlow
@@ -688,6 +690,131 @@ class KeyguardRootViewModelTest(flags: FlagsParameterization) : SysuiTestCase()
            assertThat(scaleToApply).isEqualTo(1f)
        }

    @Test
    @DisableSceneContainer
    @EnableFlags(FLAG_GESTURE_BETWEEN_HUB_AND_LOCKSCREEN_MOTION)
    fun scaleFromGlanceableHub_reset_whenTransitionedFromHubToAod() =
        testScope.runTest {
            val scaleToApply by collectLastValue(underTest.scaleFromZoomOut)

            // Start on communal scene.
            val transitionState: MutableStateFlow<ObservableTransitionState> =
                MutableStateFlow(ObservableTransitionState.Idle(CommunalScenes.Communal))
            communalRepository.setTransitionState(transitionState)

            keyguardTransitionRepository.sendTransitionSteps(
                from = KeyguardState.LOCKSCREEN,
                to = KeyguardState.GLANCEABLE_HUB,
                testScope,
            )

            assertThat(scaleToApply).isEqualTo(1 - PUSHBACK_SCALE_FOR_LOCKSCREEN)

            // Start transition to AOD
            transitionState.value =
                ObservableTransitionState.Transition(
                    fromScene = CommunalScenes.Communal,
                    toScene = CommunalScenes.Blank,
                    currentScene = flowOf(CommunalScenes.Communal),
                    progress = flowOf(0f),
                    isInitiatedByUserInput = true,
                    isUserInputOngoing = flowOf(false),
                )
            keyguardTransitionRepository.sendTransitionSteps(
                listOf(
                    TransitionStep(
                        transitionState = TransitionState.STARTED,
                        from = KeyguardState.GLANCEABLE_HUB,
                        to = KeyguardState.AOD,
                    ),
                    TransitionStep(
                        transitionState = TransitionState.RUNNING,
                        from = KeyguardState.GLANCEABLE_HUB,
                        to = KeyguardState.AOD,
                        value = 0.6f,
                    ),
                ),
                testScope,
            )
            runCurrent()

            assertThat(scaleToApply).isIn(Range.open(1 - PUSHBACK_SCALE_FOR_LOCKSCREEN, 1f))

            keyguardTransitionRepository.sendTransitionStep(
                TransitionStep(
                    transitionState = TransitionState.FINISHED,
                    from = KeyguardState.GLANCEABLE_HUB,
                    to = KeyguardState.AOD,
                )
            )
            runCurrent()
            transitionState.value = ObservableTransitionState.Idle(CommunalScenes.Blank)

            assertThat(scaleToApply).isEqualTo(1f)
        }

    @Test
    @DisableSceneContainer
    @EnableFlags(Flags.FLAG_AMBIENT_AOD, FLAG_GESTURE_BETWEEN_HUB_AND_LOCKSCREEN_MOTION)
    fun scaleFromGlanceableHub_whenTransitionedFromAodToHub() =
        testScope.runTest {
            val scaleToApply by collectLastValue(underTest.scaleFromZoomOut)

            // Start on blank scene.
            val transitionState: MutableStateFlow<ObservableTransitionState> =
                MutableStateFlow(ObservableTransitionState.Idle(CommunalScenes.Blank))
            communalRepository.setTransitionState(transitionState)

            keyguardTransitionRepository.sendTransitionSteps(
                from = KeyguardState.GLANCEABLE_HUB,
                to = KeyguardState.AOD,
                testScope,
            )

            assertThat(scaleToApply).isEqualTo(1f)

            // Start transition to hub.
            transitionState.value =
                ObservableTransitionState.Transition(
                    fromScene = CommunalScenes.Blank,
                    toScene = CommunalScenes.Communal,
                    currentScene = flowOf(CommunalScenes.Blank),
                    progress = flowOf(0f),
                    isInitiatedByUserInput = true,
                    isUserInputOngoing = flowOf(false),
                )
            keyguardTransitionRepository.sendTransitionSteps(
                listOf(
                    TransitionStep(
                        transitionState = TransitionState.STARTED,
                        from = KeyguardState.AOD,
                        to = KeyguardState.GLANCEABLE_HUB,
                    ),
                    TransitionStep(
                        transitionState = TransitionState.RUNNING,
                        from = KeyguardState.AOD,
                        to = KeyguardState.GLANCEABLE_HUB,
                        value = 0.2f,
                    ),
                ),
                testScope,
            )

            assertThat(scaleToApply).isIn(Range.open(1 - PUSHBACK_SCALE_FOR_LOCKSCREEN, 1f))

            keyguardTransitionRepository.sendTransitionStep(
                TransitionStep(
                    transitionState = TransitionState.FINISHED,
                    from = KeyguardState.AOD,
                    to = KeyguardState.GLANCEABLE_HUB,
                )
            )
            runCurrent()
            transitionState.value = ObservableTransitionState.Idle(CommunalScenes.Communal)

            assertThat(scaleToApply).isEqualTo(1f - PUSHBACK_SCALE_FOR_LOCKSCREEN)
        }

    @Test
    fun alpha_emitsOnShadeExpansion() =
        testScope.runTest {
+8 −0
Original line number Diff line number Diff line
@@ -74,6 +74,14 @@ constructor(
        )
    }

    val zoomOut: Flow<Float> =
        transitionAnimation.sharedFlow(
            onStep = { it },
            onFinish = { 1f },
            onCancel = { 0f },
            name = "AOD->GLANCEABLE_HUB: zoomOut",
        )

    override val windowBlurRadius: Flow<Float> =
        blurFactory.create(transitionAnimation).getBlurProvider().enterBlurRadius
}
+9 −0
Original line number Diff line number Diff line
@@ -62,6 +62,15 @@ constructor(
            onFinish = { 1f },
        )

    val zoomOut: Flow<Float> =
        transitionAnimation.sharedFlow(
            onStep = { 1f - it },
            // reset zoom out on wallpaper and keyguard view
            onFinish = { 0f },
            onCancel = { 1f },
            name = "GLANCEABLE_HUB->AOD: zoomOut",
        )

    override val deviceEntryParentViewAlpha: Flow<Float> =
        deviceEntryUdfpsInteractor.isUdfpsEnrolledAndEnabled.flatMapLatest { udfpsEnrolledAndEnabled
            ->
+2 −0
Original line number Diff line number Diff line
@@ -240,6 +240,8 @@ constructor(
                    merge(
                        lockscreenToGlanceableHubTransitionViewModel.zoomOut,
                        glanceableHubToLockscreenTransitionViewModel.zoomOut,
                        aodToGlanceableHubTransitionViewModel.zoomOut,
                        glanceableHubToAodTransitionViewModel.zoomOut,
                    ),
                ) { isCommunalVisible, zoomOut ->
                    if (!isCommunalVisible) {