diff options
2 files changed, 41 insertions, 3 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromOccludedTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromOccludedTransitionInteractor.kt index ff0db34ca06d..714add461c16 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromOccludedTransitionInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromOccludedTransitionInteractor.kt @@ -50,14 +50,28 @@ constructor( listenForOccludedToAodOrDozing() listenForOccludedToGone() listenForOccludedToAlternateBouncer() + listenForOccludedToPrimaryBouncer() + } + + private fun listenForOccludedToPrimaryBouncer() { + scope.launch { + keyguardInteractor.primaryBouncerShowing + .sample(transitionInteractor.startedKeyguardTransitionStep, ::Pair) + .collect { (isBouncerShowing, lastStartedTransitionStep) -> + if ( + isBouncerShowing && lastStartedTransitionStep.to == KeyguardState.OCCLUDED + ) { + startTransitionTo(KeyguardState.PRIMARY_BOUNCER) + } + } + } } private fun listenForOccludedToDreaming() { scope.launch { keyguardInteractor.isAbleToDream .sample(transitionInteractor.finishedKeyguardState, ::Pair) - .collect { pair -> - val (isAbleToDream, keyguardState) = pair + .collect { (isAbleToDream, keyguardState) -> if (isAbleToDream && keyguardState == KeyguardState.OCCLUDED) { startTransitionTo(KeyguardState.DREAMING) } diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt index ca93246e8d9f..d4576053f9c7 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt @@ -1049,7 +1049,6 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { @Test fun occludedToAlternateBouncer() = testScope.runTest { - // GIVEN a prior transition has run to OCCLUDED runTransition(KeyguardState.LOCKSCREEN, KeyguardState.OCCLUDED) keyguardRepository.setKeyguardOccluded(true) @@ -1073,6 +1072,31 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { } @Test + fun occludedToPrimaryBouncer() = + testScope.runTest { + // GIVEN a prior transition has run to OCCLUDED + runTransition(KeyguardState.LOCKSCREEN, KeyguardState.OCCLUDED) + keyguardRepository.setKeyguardOccluded(true) + runCurrent() + + // WHEN primary bouncer shows + bouncerRepository.setPrimaryShow(true) // beverlyt + runCurrent() + + val info = + withArgCaptor<TransitionInfo> { + verify(transitionRepository).startTransition(capture(), anyBoolean()) + } + // THEN a transition to AlternateBouncer should occur + assertThat(info.ownerName).isEqualTo("FromOccludedTransitionInteractor") + assertThat(info.from).isEqualTo(KeyguardState.OCCLUDED) + assertThat(info.to).isEqualTo(KeyguardState.PRIMARY_BOUNCER) + assertThat(info.animator).isNotNull() + + coroutineContext.cancelChildren() + } + + @Test fun primaryBouncerToOccluded() = testScope.runTest { // GIVEN device not sleeping |