Loading packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/startable/SceneContainerStartableTest.kt +32 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 { Loading packages/SystemUI/src/com/android/systemui/scene/domain/startable/SceneContainerStartable.kt +6 −1 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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() Loading Loading @@ -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) Loading Loading @@ -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 Loading packages/SystemUI/tests/utils/src/com/android/systemui/scene/domain/startable/SceneContainerStartableKosmos.kt +2 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -93,5 +94,6 @@ val Kosmos.sceneContainerStartable by Fixture { trustInteractor = trustInteractor, sysuiStateInteractor = sysuiStateInteractor, shadeDisplaysInteractor = { shadeDisplaysInteractor }, surfaceBehindInteractor = keyguardSurfaceBehindInteractor, ) } Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/scene/domain/startable/SceneContainerStartableTest.kt +32 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 { Loading
packages/SystemUI/src/com/android/systemui/scene/domain/startable/SceneContainerStartable.kt +6 −1 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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() Loading Loading @@ -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) Loading Loading @@ -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 Loading
packages/SystemUI/tests/utils/src/com/android/systemui/scene/domain/startable/SceneContainerStartableKosmos.kt +2 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -93,5 +94,6 @@ val Kosmos.sceneContainerStartable by Fixture { trustInteractor = trustInteractor, sysuiStateInteractor = sysuiStateInteractor, shadeDisplaysInteractor = { shadeDisplaysInteractor }, surfaceBehindInteractor = keyguardSurfaceBehindInteractor, ) }