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

Commit d254c50c authored by Josh Tsuji's avatar Josh Tsuji Committed by Android (Google) Code Review
Browse files

Merge "Keep scene container visible while the surface is animating." into main

parents 32e50fca 9f2660f8
Loading
Loading
Loading
Loading
+32 −0
Original line number Diff line number Diff line
@@ -83,6 +83,7 @@ import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.keyguard.domain.interactor.dozeInteractor
import com.android.systemui.keyguard.domain.interactor.keyguardEnabledInteractor
import com.android.systemui.keyguard.domain.interactor.keyguardInteractor
import com.android.systemui.keyguard.domain.interactor.keyguardSurfaceBehindInteractor
import com.android.systemui.keyguard.domain.interactor.scenetransition.lockscreenSceneTransitionInteractor
import com.android.systemui.keyguard.shared.model.FailFingerprintAuthenticationStatus
import com.android.systemui.keyguard.shared.model.KeyguardState
@@ -421,6 +422,37 @@ class SceneContainerStartableTest : SysuiTestCase() {
            assertThat(isVisible).isTrue()
        }

    @Test
    fun hydrateVisibility_surfaceBehindAnimating() =
        kosmos.runTest {
            val isVisible by collectLastValue(sceneInteractor.isVisible)

            val transitionState = prepareState(
                isDeviceUnlocked = true,
                initialSceneKey = Scenes.Lockscreen,
            )
            underTest.start()
            assertThat(isVisible).isTrue()

            // Unlock, leaving the surface behind animation running even after the transition ends.
            sceneInteractor.changeScene(
                Scenes.Gone, "unlocking for test", forceSettleToTargetScene = true)
            transitionState.value = ObservableTransitionState.Idle(Scenes.Gone)
            keyguardSurfaceBehindInteractor.setAnimatingSurface(true)
            runCurrent()

            // Scene container should remain visible so the flows controlling the surface behind
            // animation continue emitting.
            assertThat(isVisible).isTrue()

            // Once the animation settles...
            keyguardSurfaceBehindInteractor.setAnimatingSurface(false)
            runCurrent()

            // ...we no longer need to be visible.
            assertThat(isVisible).isFalse()
        }

    @Test
    fun startsInLockscreenScene() =
        kosmos.runTest {
+6 −1
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ import com.android.systemui.deviceentry.shared.model.DeviceUnlockSource
import com.android.systemui.keyguard.DismissCallbackRegistry
import com.android.systemui.keyguard.domain.interactor.KeyguardEnabledInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardSurfaceBehindInteractor
import com.android.systemui.keyguard.domain.interactor.TrustInteractor
import com.android.systemui.keyguard.domain.interactor.WindowManagerLockscreenVisibilityInteractor.Companion.keyguardScenes
import com.android.systemui.log.table.TableLogBuffer
@@ -155,6 +156,7 @@ constructor(
    private val trustInteractor: TrustInteractor,
    private val sysuiStateInteractor: SysUIStateDisplaysInteractor,
    private val shadeDisplaysInteractor: Lazy<ShadeDisplaysInteractor>,
    private val surfaceBehindInteractor: KeyguardSurfaceBehindInteractor,
) : CoreStartable {
    private val centralSurfaces: CentralSurfaces?
        get() = centralSurfacesOptLazy.get().getOrNull()
@@ -286,11 +288,13 @@ constructor(
                                headsUpInteractor.isHeadsUpOrAnimatingAway,
                                occlusionInteractor.invisibleDueToOcclusion,
                                alternateBouncerInteractor.isVisible,
                                surfaceBehindInteractor.isAnimatingSurface,
                            ) {
                                transitionState,
                                isHeadsUpOrAnimatingAway,
                                invisibleDueToOcclusion,
                                isAlternateBouncerVisible ->
                                isAlternateBouncerVisible,
                                isAnimatingSurface ->
                                val isCommunalShowing =
                                    transitionState.isTransitioningFromOrTo(Scenes.Communal) ||
                                        transitionState.isIdle(Scenes.Communal)
@@ -322,6 +326,7 @@ constructor(
                                when {
                                    isCommunalShowing ->
                                        true to "on or transitioning to/from communal"
                                    isAnimatingSurface -> true to "animating surface behind"
                                    isHeadsUpOrAnimatingAway -> true to "showing a HUN"
                                    isAlternateBouncerVisible -> true to "showing alternate bouncer"
                                    // We need to be visible during transitions, even if occlusion
+2 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ import com.android.systemui.haptics.vibratorHelper
import com.android.systemui.keyguard.dismissCallbackRegistry
import com.android.systemui.keyguard.domain.interactor.keyguardEnabledInteractor
import com.android.systemui.keyguard.domain.interactor.keyguardInteractor
import com.android.systemui.keyguard.domain.interactor.keyguardSurfaceBehindInteractor
import com.android.systemui.keyguard.domain.interactor.trustInteractor
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.Kosmos.Fixture
@@ -93,5 +94,6 @@ val Kosmos.sceneContainerStartable by Fixture {
        trustInteractor = trustInteractor,
        sysuiStateInteractor = sysuiStateInteractor,
        shadeDisplaysInteractor = { shadeDisplaysInteractor },
        surfaceBehindInteractor = keyguardSurfaceBehindInteractor,
    )
}