From aa2fabb937c98a23b330fe42fb00e1616ea08bbe Mon Sep 17 00:00:00 2001 From: Matt Pietal Date: Fri, 20 Jan 2023 14:35:21 +0000 Subject: [PATCH] Transitions - Add GONE->LOCKSCREEN support Primarily used when the device goes into immediate lockdown. Also, increase the timeout to see if it reduces flakiness. Fixes: 266192407 Test: atest KeyguardTransitionScenariosTest Change-Id: I1e99ab8fa081c23943f319982c5730644680bd9c --- .../FromGoneTransitionInteractor.kt | 21 +++++++++++ .../KeyguardTransitionScenariosTest.kt | 37 +++++++++++++++++++ .../keyguard/util/KeyguardTransitionRunner.kt | 4 +- 3 files changed, 60 insertions(+), 2 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromGoneTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromGoneTransitionInteractor.kt index 14f918d78bc67..b5bcd45f03ddd 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromGoneTransitionInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromGoneTransitionInteractor.kt @@ -45,6 +45,27 @@ constructor( override fun start() { listenForGoneToAodOrDozing() listenForGoneToDreaming() + listenForGoneToLockscreen() + } + + // Primarily for when the user chooses to lock down the device + private fun listenForGoneToLockscreen() { + scope.launch { + keyguardInteractor.isKeyguardShowing + .sample(keyguardTransitionInteractor.startedKeyguardTransitionStep, ::Pair) + .collect { (isKeyguardShowing, lastStartedStep) -> + if (isKeyguardShowing && lastStartedStep.to == KeyguardState.GONE) { + keyguardTransitionRepository.startTransition( + TransitionInfo( + name, + KeyguardState.GONE, + KeyguardState.LOCKSCREEN, + getAnimator(), + ) + ) + } + } + } } private fun listenForGoneToDreaming() { 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 5a7a3d49b628a..3a871b4de8bc7 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 @@ -518,6 +518,43 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { coroutineContext.cancelChildren() } + @Test + fun `GONE to LOCKSREEN`() = + testScope.runTest { + // GIVEN a prior transition has run to GONE + runner.startTransition( + testScope, + TransitionInfo( + ownerName = "", + from = KeyguardState.LOCKSCREEN, + to = KeyguardState.GONE, + animator = + ValueAnimator().apply { + duration = 10 + interpolator = Interpolators.LINEAR + }, + ) + ) + runCurrent() + reset(mockTransitionRepository) + + // WHEN the keyguard starts to show + keyguardRepository.setKeyguardShowing(true) + runCurrent() + + val info = + withArgCaptor { + verify(mockTransitionRepository).startTransition(capture()) + } + // THEN a transition to AOD should occur + assertThat(info.ownerName).isEqualTo("FromGoneTransitionInteractor") + assertThat(info.from).isEqualTo(KeyguardState.GONE) + assertThat(info.to).isEqualTo(KeyguardState.LOCKSCREEN) + assertThat(info.animator).isNotNull() + + coroutineContext.cancelChildren() + } + @Test fun `GONE to DREAMING`() = testScope.runTest { diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/util/KeyguardTransitionRunner.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/util/KeyguardTransitionRunner.kt index c88f84a028edf..54fc4938e1b00 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/util/KeyguardTransitionRunner.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/util/KeyguardTransitionRunner.kt @@ -71,7 +71,7 @@ class KeyguardTransitionRunner( waitUntilComplete(info.animator!!) } - suspend private fun waitUntilComplete(animator: ValueAnimator) { + private suspend fun waitUntilComplete(animator: ValueAnimator) { withContext(Dispatchers.Main) { val startTime = System.currentTimeMillis() while (!isTerminated && animator.isRunning()) { @@ -96,6 +96,6 @@ class KeyguardTransitionRunner( override fun setFrameDelay(delay: Long) {} companion object { - private const val MAX_TEST_DURATION = 100L + private const val MAX_TEST_DURATION = 200L } }