diff options
3 files changed, 29 insertions, 68 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/TransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/TransitionInteractor.kt index e456a550cad7..2850165b0d1a 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/TransitionInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/TransitionInteractor.kt @@ -224,20 +224,12 @@ sealed class TransitionInteractor( ) { if (!KeyguardWmStateRefactor.isEnabled) { scope.launch { - keyguardInteractor.onCameraLaunchDetected - .sample(transitionInteractor.finishedKeyguardState) - .collect { finishedKeyguardState -> - // Other keyguard state transitions may trigger on the first power button - // push, - // so use the last finishedKeyguardState to determine the overriding FROM - // state - if (finishedKeyguardState == fromState) { - startTransitionTo( - toState = KeyguardState.OCCLUDED, - modeOnCanceled = TransitionModeOnCanceled.RESET, - ) - } - } + keyguardInteractor.onCameraLaunchDetected.filterRelevantKeyguardState().collect { + startTransitionTo( + toState = KeyguardState.OCCLUDED, + modeOnCanceled = TransitionModeOnCanceled.RESET, + ) + } } } } 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 085b70e61339..671b09b257ce 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 @@ -755,35 +755,6 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { } @Test - fun goneToDreamingLockscreenHosted() = - testScope.runTest { - // GIVEN a device that is not dreaming or dozing - keyguardRepository.setDreamingWithOverlay(false) - keyguardRepository.setDozeTransitionModel( - DozeTransitionModel(from = DozeStateModel.DOZE, to = DozeStateModel.FINISH) - ) - runCurrent() - - // GIVEN a prior transition has run to GONE - runTransitionAndSetWakefulness(KeyguardState.LOCKSCREEN, KeyguardState.GONE) - - // WHEN the device begins to dream with the lockscreen hosted dream - keyguardRepository.setDreamingWithOverlay(true) - keyguardRepository.setIsActiveDreamLockscreenHosted(true) - advanceTimeBy(100L) - - assertThat(transitionRepository) - .startedTransition( - to = KeyguardState.DREAMING_LOCKSCREEN_HOSTED, - from = KeyguardState.GONE, - ownerName = "FromGoneTransitionInteractor", - animatorAssertion = { it.isNotNull() } - ) - - coroutineContext.cancelChildren() - } - - @Test fun goneToGlanceableHub() = testScope.runTest { // GIVEN a prior transition has run to GONE @@ -1244,9 +1215,15 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { keyguardRepository.setKeyguardOccluded(true) runCurrent() - // GIVEN device is docked + // GIVEN device is docked/communal is available dockManager.setIsDocked(true) dockManager.setDockEvent(DockManager.STATE_DOCKED) + val idleTransitionState = + MutableStateFlow<ObservableTransitionState>( + ObservableTransitionState.Idle(CommunalScenes.Communal) + ) + communalInteractor.setTransitionState(idleTransitionState) + runCurrent() // WHEN occlusion ends keyguardRepository.setKeyguardOccluded(false) @@ -1372,6 +1349,8 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { // WHEN the keyguard is occluded and device wakes up and is no longer dreaming keyguardRepository.setDreaming(false) + testScheduler.advanceTimeBy(150) // The dreaming signal is debounced. + runCurrent() keyguardRepository.setKeyguardOccluded(true) powerInteractor.setAwakeForTest() runCurrent() @@ -1379,7 +1358,7 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { // THEN a transition to OCCLUDED should occur assertThat(transitionRepository) .startedTransition( - ownerName = "FromDreamingTransitionInteractor", + ownerName = "FromDreamingTransitionInteractor(Occluded but no longer dreaming)", from = KeyguardState.DREAMING, to = KeyguardState.OCCLUDED, animatorAssertion = { it.isNotNull() }, @@ -1516,7 +1495,7 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { // THEN a transition to OCCLUDED should occur assertThat(transitionRepository) .startedTransition( - ownerName = "FromAodTransitionInteractor", + ownerName = "FromAodTransitionInteractor(isOccluded = true)", from = KeyguardState.AOD, to = KeyguardState.OCCLUDED, animatorAssertion = { it.isNotNull() }, @@ -1555,7 +1534,8 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { runTransitionAndSetWakefulness(KeyguardState.AOD, KeyguardState.LOCKSCREEN) runCurrent() - // WHEN the device begins to sleep (first power button press)... + // WHEN the device begins to sleep (first power button press), which starts + // LS -> DOZING... powerInteractor.setAsleepForTest() runCurrent() reset(transitionRepository) @@ -1568,11 +1548,11 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { } runCurrent() - // THEN a transition from LOCKSCREEN => OCCLUDED should occur + // THEN a transition from DOZING => OCCLUDED should occur assertThat(transitionRepository) .startedTransition( - ownerName = "FromLockscreenTransitionInteractor", - from = KeyguardState.LOCKSCREEN, + ownerName = "FromDozingTransitionInteractor", + from = KeyguardState.DOZING, to = KeyguardState.OCCLUDED, animatorAssertion = { it.isNotNull() }, ) diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/util/KeyguardTransitionRepositorySpySubject.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/util/KeyguardTransitionRepositorySpySubject.kt index a08e4913d553..af785c24bb5c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/util/KeyguardTransitionRepositorySpySubject.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/util/KeyguardTransitionRepositorySpySubject.kt @@ -21,6 +21,8 @@ import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepositor import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.keyguard.shared.model.TransitionInfo import com.android.systemui.keyguard.shared.model.TransitionModeOnCanceled +import com.android.systemui.util.mockito.any +import com.android.systemui.util.mockito.withArgCaptor import com.google.common.truth.FailureMetadata import com.google.common.truth.Subject import com.google.common.truth.Truth @@ -28,6 +30,8 @@ import com.google.common.truth.Truth.assertAbout import junit.framework.Assert.assertEquals import kotlin.test.fail import org.mockito.Mockito +import org.mockito.Mockito.never +import org.mockito.Mockito.verify /** [Subject] used to make assertions about a [Mockito.spy] KeyguardTransitionRepository. */ class KeyguardTransitionRepositorySpySubject @@ -75,34 +79,19 @@ private constructor( animatorAssertion: (Subject) -> Unit, modeOnCanceled: TransitionModeOnCanceled? = null, ) { - // TODO(b/331799060): Remove this workaround once atest supports mocking suspend functions. - Mockito.mockingDetails(repository).invocations.forEach { invocation -> - if (invocation.method.equals(KeyguardTransitionRepository::startTransition.name)) { - val transitionInfo = invocation.arguments.firstOrNull() as TransitionInfo + withArgCaptor<TransitionInfo> { verify(repository).startTransition(capture()) } + .also { transitionInfo -> assertEquals(to, transitionInfo.to) animatorAssertion.invoke(Truth.assertThat(transitionInfo.animator)) from?.let { assertEquals(it, transitionInfo.from) } ownerName?.let { assertEquals(it, transitionInfo.ownerName) } modeOnCanceled?.let { assertEquals(it, transitionInfo.modeOnCanceled) } - invocation.markVerified() } - } } /** Verifies that [KeyguardTransitionRepository.startTransition] was never called. */ suspend fun noTransitionsStarted() { - // TODO(b/331799060): Remove this workaround once atest supports mocking suspend functions. - Mockito.mockingDetails(repository).invocations.forEach { - if ( - it.method.equals(KeyguardTransitionRepository::startTransition.name) && - !it.isVerified - ) { - fail( - "Expected no transitions started, however this transition was started: " + - it.arguments.firstOrNull() - ) - } - } + verify(repository, never()).startTransition(any()) } companion object { |