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

Commit 280009c1 authored by Shawn Lee's avatar Shawn Lee Committed by Android (Google) Code Review
Browse files

Merge "[Flexiglass] Introduce Topmost Content for STL x KTF" into main

parents 5faf193a 6df490c2
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -85,6 +85,7 @@ import com.android.systemui.power.domain.interactor.powerInteractor
import com.android.systemui.scene.data.repository.Idle
import com.android.systemui.scene.data.repository.Transition
import com.android.systemui.scene.data.repository.setTransition
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.settings.fakeUserTracker
@@ -602,6 +603,7 @@ class CommunalViewModelTest(flags: FlagsParameterization) : SysuiTestCase() {
                flowOf(ObservableTransitionState.Idle(CommunalScenes.Communal))
            )
            // Transitioned to Glanceable hub.
            kosmos.sceneInteractor.changeScene(Scenes.Communal, "")
            kosmos.setTransition(
                sceneTransition = Idle(Scenes.Communal),
                stateTransition =
@@ -656,6 +658,7 @@ class CommunalViewModelTest(flags: FlagsParameterization) : SysuiTestCase() {
            keyguardRepository.setKeyguardOccluded(true)

            // And on hub
            kosmos.sceneInteractor.changeScene(Scenes.Communal, "")
            kosmos.setTransition(
                sceneTransition = Idle(Scenes.Communal),
                stateTransition =
@@ -673,6 +676,7 @@ class CommunalViewModelTest(flags: FlagsParameterization) : SysuiTestCase() {
            assertThat(isCommunalContentFlowFrozen).isEqualTo(true)

            // 3. When transitioned to OCCLUDED and activity shows
            kosmos.sceneInteractor.changeScene(Scenes.Lockscreen, "")
            kosmos.setTransition(
                sceneTransition = Idle(Scenes.Lockscreen),
                stateTransition =
@@ -759,6 +763,7 @@ class CommunalViewModelTest(flags: FlagsParameterization) : SysuiTestCase() {
            keyguardRepository.setKeyguardOccluded(true)

            // And transitioned to hub
            kosmos.sceneInteractor.changeScene(Scenes.Communal, "")
            kosmos.setTransition(
                sceneTransition = Idle(Scenes.Communal),
                stateTransition =
+11 −1
Original line number Diff line number Diff line
@@ -8,16 +8,19 @@ import com.android.systemui.SysuiTestCase
import com.android.systemui.flags.DisableSceneContainer
import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.flags.fakeFeatureFlagsClassic
import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFingerprintAuthRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
import com.android.systemui.keyguard.domain.interactor.keyguardTransitionInteractor
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticationStatus
import com.android.systemui.kosmos.testDispatcher
import com.android.systemui.kosmos.testScope
import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.setAsleepForTest
import com.android.systemui.power.domain.interactor.powerInteractor
import com.android.systemui.scene.data.repository.Idle
import com.android.systemui.scene.data.repository.setSceneTransition
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.testKosmos
import com.android.systemui.utils.GlobalWindowManager
@@ -130,7 +133,7 @@ class ResourceTrimmerTest : SysuiTestCase() {
            keyguardTransitionRepository.sendTransitionSteps(
                from = KeyguardState.LOCKSCREEN,
                to = KeyguardState.GONE,
                testScope
                testScope,
            )
            verify(globalWindowManager, times(1))
                .trimMemory(ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN)
@@ -141,6 +144,13 @@ class ResourceTrimmerTest : SysuiTestCase() {
    @EnableSceneContainer
    fun keyguardTransitionsToGone_trimsFontCache_scene_container() =
        testScope.runTest {
            kosmos.sceneInteractor.snapToScene(Scenes.Lockscreen, "reason")
            kosmos.fakeDeviceEntryFingerprintAuthRepository.setAuthenticationStatus(
                SuccessFingerprintAuthenticationStatus(0, true)
            )
            runCurrent()

            kosmos.sceneInteractor.changeScene(Scenes.Gone, "")
            kosmos.setSceneTransition(Idle(Scenes.Gone))

            verify(globalWindowManager, times(1))
+31 −13
Original line number Diff line number Diff line
@@ -24,9 +24,11 @@ import com.android.systemui.coroutines.collectValues
import com.android.systemui.flags.DisableSceneContainer
import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository
import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFingerprintAuthRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.KeyguardSurfaceBehindModel
import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticationStatus
import com.android.systemui.keyguard.shared.model.TransitionState
import com.android.systemui.keyguard.shared.model.TransitionStep
import com.android.systemui.keyguard.util.mockTopActivityClassName
@@ -34,6 +36,7 @@ import com.android.systemui.kosmos.testScope
import com.android.systemui.scene.data.repository.Idle
import com.android.systemui.scene.data.repository.Transition
import com.android.systemui.scene.data.repository.setSceneTransition
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.shared.system.ActivityManagerWrapper
import com.android.systemui.shared.system.activityManagerWrapper
@@ -84,7 +87,7 @@ class KeyguardSurfaceBehindInteractorTest : SysuiTestCase() {
            assertThat(values)
                .containsExactly(
                    // We're initialized in LOCKSCREEN.
                    KeyguardSurfaceBehindModel(alpha = 0f),
                    KeyguardSurfaceBehindModel(alpha = 0f)
                )

            transitionRepository.sendTransitionStep(
@@ -105,7 +108,7 @@ class KeyguardSurfaceBehindInteractorTest : SysuiTestCase() {
                        it.alpha == 1f &&
                        it.animateFromTranslationY != 0f &&
                        it.translationY == 0f
                }
                },
            )

            transitionRepository.sendTransitionStep(
@@ -125,7 +128,7 @@ class KeyguardSurfaceBehindInteractorTest : SysuiTestCase() {
                        it.alpha == 1f &&
                        it.animateFromTranslationY != 0f &&
                        it.translationY == 0f
                }
                },
            )

            transitionRepository.sendTransitionStep(
@@ -146,7 +149,7 @@ class KeyguardSurfaceBehindInteractorTest : SysuiTestCase() {
                        it.translationY == 0f
                },
                // Once the current state is GONE, we should default to alpha = 1f.
                { it == KeyguardSurfaceBehindModel(alpha = 1f) }
                { it == KeyguardSurfaceBehindModel(alpha = 1f) },
            )
        }

@@ -161,7 +164,7 @@ class KeyguardSurfaceBehindInteractorTest : SysuiTestCase() {
            assertThat(values)
                .containsExactly(
                    // We're initialized in LOCKSCREEN.
                    KeyguardSurfaceBehindModel(alpha = 0f),
                    KeyguardSurfaceBehindModel(alpha = 0f)
                )
                .inOrder()

@@ -242,8 +245,7 @@ class KeyguardSurfaceBehindInteractorTest : SysuiTestCase() {

            values.assertValuesMatch(
                // We should be at alpha = 0f during the animation.
                { it == KeyguardSurfaceBehindModel(alpha = 0f) },
            )
                { it == KeyguardSurfaceBehindModel(alpha = 0f) })
        }

    @Test
@@ -251,14 +253,19 @@ class KeyguardSurfaceBehindInteractorTest : SysuiTestCase() {
    fun testSurfaceBehindModel_toAppSurface_scene_container() =
        testScope.runTest {
            val values by collectValues(underTest.viewParams)
            kosmos.sceneInteractor.snapToScene(Scenes.Lockscreen, "")
            kosmos.fakeDeviceEntryFingerprintAuthRepository.setAuthenticationStatus(
                SuccessFingerprintAuthenticationStatus(0, true)
            )
            runCurrent()

            assertThat(values)
                .containsExactly(
                    // We're initialized in LOCKSCREEN.
                    KeyguardSurfaceBehindModel(alpha = 0f),
                    KeyguardSurfaceBehindModel(alpha = 0f)
                )

            kosmos.sceneInteractor.changeScene(Scenes.Gone, "")
            kosmos.setSceneTransition(Transition(Scenes.Lockscreen, Scenes.Gone))

            values.assertValuesMatch(
@@ -270,7 +277,7 @@ class KeyguardSurfaceBehindInteractorTest : SysuiTestCase() {
                        it.alpha == 1f &&
                        it.animateFromTranslationY != 0f &&
                        it.translationY == 0f
                }
                },
            )

            kosmos.setSceneTransition(Idle(Scenes.Gone))
@@ -284,7 +291,7 @@ class KeyguardSurfaceBehindInteractorTest : SysuiTestCase() {
                        it.translationY == 0f
                },
                // Once the current state is GONE, we should default to alpha = 1f.
                { it == KeyguardSurfaceBehindModel(alpha = 1f) }
                { it == KeyguardSurfaceBehindModel(alpha = 1f) },
            )
        }

@@ -294,15 +301,20 @@ class KeyguardSurfaceBehindInteractorTest : SysuiTestCase() {
        testScope.runTest {
            val values by collectValues(underTest.viewParams)
            activityManagerWrapper.mockTopActivityClassName(LAUNCHER_ACTIVITY_NAME)
            kosmos.sceneInteractor.snapToScene(Scenes.Lockscreen, "")
            kosmos.fakeDeviceEntryFingerprintAuthRepository.setAuthenticationStatus(
                SuccessFingerprintAuthenticationStatus(0, true)
            )
            runCurrent()

            assertThat(values)
                .containsExactly(
                    // We're initialized in LOCKSCREEN.
                    KeyguardSurfaceBehindModel(alpha = 0f),
                    KeyguardSurfaceBehindModel(alpha = 0f)
                )
                .inOrder()

            kosmos.sceneInteractor.changeScene(Scenes.Gone, "")
            kosmos.setSceneTransition(Transition(Scenes.Lockscreen, Scenes.Gone))

            assertThat(values)
@@ -340,8 +352,7 @@ class KeyguardSurfaceBehindInteractorTest : SysuiTestCase() {

            values.assertValuesMatch(
                // We should be at alpha = 0f during the animation.
                { it == KeyguardSurfaceBehindModel(alpha = 0f) },
            )
                { it == KeyguardSurfaceBehindModel(alpha = 0f) })
        }

    @Test
@@ -435,6 +446,13 @@ class KeyguardSurfaceBehindInteractorTest : SysuiTestCase() {
        testScope.runTest {
            val isAnimatingSurface by collectLastValue(underTest.isAnimatingSurface)

            kosmos.sceneInteractor.snapToScene(Scenes.Lockscreen, "")
            kosmos.fakeDeviceEntryFingerprintAuthRepository.setAuthenticationStatus(
                SuccessFingerprintAuthenticationStatus(0, true)
            )
            runCurrent()

            kosmos.sceneInteractor.changeScene(Scenes.Gone, "")
            kosmos.setSceneTransition(Idle(Scenes.Gone))
            kosmos.notificationLaunchAnimationInteractor.setIsLaunchAnimationRunning(true)
            runCurrent()
+17 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import com.android.systemui.coroutines.collectValues
import com.android.systemui.flags.DisableSceneContainer
import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository
import com.android.systemui.keyguard.data.repository.fakeDeviceEntryFingerprintAuthRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
import com.android.systemui.keyguard.shared.model.Edge
import com.android.systemui.keyguard.shared.model.KeyguardState
@@ -34,6 +35,7 @@ import com.android.systemui.keyguard.shared.model.KeyguardState.LOCKSCREEN
import com.android.systemui.keyguard.shared.model.KeyguardState.OFF
import com.android.systemui.keyguard.shared.model.KeyguardState.PRIMARY_BOUNCER
import com.android.systemui.keyguard.shared.model.KeyguardState.UNDEFINED
import com.android.systemui.keyguard.shared.model.SuccessFingerprintAuthenticationStatus
import com.android.systemui.keyguard.shared.model.TransitionState.CANCELED
import com.android.systemui.keyguard.shared.model.TransitionState.FINISHED
import com.android.systemui.keyguard.shared.model.TransitionState.RUNNING
@@ -43,6 +45,7 @@ import com.android.systemui.kosmos.testScope
import com.android.systemui.scene.data.repository.Idle
import com.android.systemui.scene.data.repository.Transition
import com.android.systemui.scene.data.repository.setSceneTransition
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
@@ -713,6 +716,11 @@ class KeyguardTransitionInteractorTest : SysuiTestCase() {
                TransitionStep(AOD, DOZING, 1f, FINISHED),
            )

            kosmos.sceneInteractor.snapToScene(Scenes.Lockscreen, "reason")
            kosmos.fakeDeviceEntryFingerprintAuthRepository.setAuthenticationStatus(
                SuccessFingerprintAuthenticationStatus(0, true)
            )

            assertThat(results)
                .isEqualTo(
                    listOf(
@@ -724,6 +732,7 @@ class KeyguardTransitionInteractorTest : SysuiTestCase() {

            assertThat(results).isEqualTo(listOf(false))

            kosmos.sceneInteractor.changeScene(Scenes.Gone, "reason")
            kosmos.setSceneTransition(Idle(Scenes.Gone))

            assertThat(results).isEqualTo(listOf(false, true))
@@ -732,6 +741,7 @@ class KeyguardTransitionInteractorTest : SysuiTestCase() {

            assertThat(results).isEqualTo(listOf(false, true))

            kosmos.sceneInteractor.changeScene(Scenes.Lockscreen, "reason")
            kosmos.setSceneTransition(Idle(Scenes.Lockscreen))

            assertThat(results).isEqualTo(listOf(false, true, false))
@@ -740,6 +750,7 @@ class KeyguardTransitionInteractorTest : SysuiTestCase() {

            assertThat(results).isEqualTo(listOf(false, true, false))

            kosmos.sceneInteractor.changeScene(Scenes.Gone, "reason")
            kosmos.setSceneTransition(Idle(Scenes.Gone))

            assertThat(results).isEqualTo(listOf(false, true, false, true))
@@ -1152,8 +1163,14 @@ class KeyguardTransitionInteractorTest : SysuiTestCase() {
            val currentStatesMapped by
                collectValues(underTest.transition(Edge.create(LOCKSCREEN, Scenes.Gone)))

            kosmos.sceneInteractor.snapToScene(Scenes.Lockscreen, "reason")
            kosmos.fakeDeviceEntryFingerprintAuthRepository.setAuthenticationStatus(
                SuccessFingerprintAuthenticationStatus(0, true)
            )

            kosmos.setSceneTransition(Transition(Scenes.Gone, Scenes.Lockscreen))
            val sendStep1 = TransitionStep(UNDEFINED, LOCKSCREEN, 0f, STARTED)
            kosmos.sceneInteractor.changeScene(Scenes.Gone, "reason")
            kosmos.setSceneTransition(Idle(Scenes.Gone))
            val sendStep2 = TransitionStep(UNDEFINED, LOCKSCREEN, 0.6f, CANCELED)
            sendSteps(sendStep1, sendStep2)
+84 −0
Original line number Diff line number Diff line
@@ -799,4 +799,88 @@ class SceneInteractorTest : SysuiTestCase() {
            verify(processor, never()).onSceneAboutToChange(any(), any())
            assertThat(fakeSceneDataSource.freezeAndAnimateToCurrentStateCallCount).isEqualTo(0)
        }

    @Test
    fun topmostContent_sceneChange_noOverlays() =
        kosmos.runTest {
            val topmostContent by collectLastValue(underTest.topmostContent)

            kosmos.fakeDeviceEntryFingerprintAuthRepository.setAuthenticationStatus(
                SuccessFingerprintAuthenticationStatus(0, true)
            )

            underTest.snapToScene(Scenes.Lockscreen, "reason")

            assertThat(topmostContent).isEqualTo(Scenes.Lockscreen)

            underTest.changeScene(Scenes.Gone, "reason")

            assertThat(topmostContent).isEqualTo(Scenes.Gone)
        }

    @Test
    fun topmostContent_sceneChange_withOverlay() =
        kosmos.runTest {
            kosmos.enableDualShade()
            runCurrent()

            val topmostContent by collectLastValue(underTest.topmostContent)

            kosmos.fakeDeviceEntryFingerprintAuthRepository.setAuthenticationStatus(
                SuccessFingerprintAuthenticationStatus(0, true)
            )

            underTest.snapToScene(Scenes.Lockscreen, "reason")
            underTest.showOverlay(Overlays.NotificationsShade, "reason")

            assertThat(topmostContent).isEqualTo(Overlays.NotificationsShade)

            underTest.changeScene(Scenes.Gone, "reason")

            assertThat(topmostContent).isEqualTo(Overlays.NotificationsShade)
        }

    @Test
    fun topmostContent_overlayChange_higherZOrder() =
        kosmos.runTest {
            kosmos.enableDualShade()
            runCurrent()

            val topmostContent by collectLastValue(underTest.topmostContent)

            kosmos.fakeDeviceEntryFingerprintAuthRepository.setAuthenticationStatus(
                SuccessFingerprintAuthenticationStatus(0, true)
            )

            underTest.snapToScene(Scenes.Lockscreen, "reason")
            underTest.showOverlay(Overlays.NotificationsShade, "reason")

            assertThat(topmostContent).isEqualTo(Overlays.NotificationsShade)

            underTest.showOverlay(Overlays.QuickSettingsShade, "reason")

            assertThat(topmostContent).isEqualTo(Overlays.QuickSettingsShade)
        }

    @Test
    fun topmostContent_overlayChange_lowerZOrder() =
        kosmos.runTest {
            kosmos.enableDualShade()
            runCurrent()

            val topmostContent by collectLastValue(underTest.topmostContent)

            kosmos.fakeDeviceEntryFingerprintAuthRepository.setAuthenticationStatus(
                SuccessFingerprintAuthenticationStatus(0, true)
            )

            underTest.snapToScene(Scenes.Lockscreen, "reason")
            underTest.showOverlay(Overlays.QuickSettingsShade, "reason")

            assertThat(topmostContent).isEqualTo(Overlays.QuickSettingsShade)

            underTest.showOverlay(Overlays.NotificationsShade, "reason")

            assertThat(topmostContent).isEqualTo(Overlays.QuickSettingsShade)
        }
}
Loading