Loading packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractor.kt +26 −2 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepositor import com.android.systemui.keyguard.shared.model.BiometricUnlockModel import com.android.systemui.keyguard.shared.model.DozeStateModel import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.util.kotlin.Utils.Companion.sample as sampleCombine import com.android.systemui.util.kotlin.Utils.Companion.toTriple import com.android.systemui.util.kotlin.sample import javax.inject.Inject Loading Loading @@ -57,7 +58,8 @@ constructor( override fun start() { listenForDreamingToOccluded() listenForDreamingToGone() listenForDreamingToGoneWhenDismissable() listenForDreamingToGoneFromBiometricUnlock() listenForDreamingToAodOrDozing() listenForTransitionToCamera(scope, keyguardInteractor) listenForDreamingToGlanceableHub() Loading Loading @@ -101,7 +103,29 @@ constructor( } } private fun listenForDreamingToGone() { private fun listenForDreamingToGoneWhenDismissable() { scope.launch { keyguardInteractor.isAbleToDream .sampleCombine( keyguardInteractor.isKeyguardShowing, keyguardInteractor.isKeyguardDismissible, startedKeyguardTransitionStep, ) .collect { (isDreaming, isKeyguardShowing, isKeyguardDismissible, lastStartedTransition) -> if ( !isDreaming && lastStartedTransition.to == KeyguardState.DREAMING && isKeyguardDismissible && !isKeyguardShowing ) { startTransitionTo(KeyguardState.GONE) } } } } private fun listenForDreamingToGoneFromBiometricUnlock() { scope.launch { keyguardInteractor.biometricUnlockState .sample(startedKeyguardTransitionStep, ::Pair) Loading packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt +26 −0 Original line number Diff line number Diff line Loading @@ -703,6 +703,32 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { coroutineContext.cancelChildren() } /** This handles security method NONE and screen off with lock timeout */ @Test fun dreamingToGoneWithKeyguardNotShowing() = testScope.runTest { // GIVEN a prior transition has run to DREAMING keyguardRepository.setDreamingWithOverlay(true) runTransitionAndSetWakefulness(KeyguardState.LOCKSCREEN, KeyguardState.DREAMING) runCurrent() // WHEN the device wakes up without a keyguard keyguardRepository.setKeyguardShowing(false) keyguardRepository.setKeyguardDismissible(true) keyguardRepository.setDreamingWithOverlay(false) advanceTimeBy(60L) assertThat(transitionRepository) .startedTransition( to = KeyguardState.GONE, from = KeyguardState.DREAMING, ownerName = "FromDreamingTransitionInteractor", animatorAssertion = { it.isNotNull() } ) coroutineContext.cancelChildren() } @Test fun dozingToGlanceableHub() = testScope.runTest { Loading Loading
packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractor.kt +26 −2 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepositor import com.android.systemui.keyguard.shared.model.BiometricUnlockModel import com.android.systemui.keyguard.shared.model.DozeStateModel import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.util.kotlin.Utils.Companion.sample as sampleCombine import com.android.systemui.util.kotlin.Utils.Companion.toTriple import com.android.systemui.util.kotlin.sample import javax.inject.Inject Loading Loading @@ -57,7 +58,8 @@ constructor( override fun start() { listenForDreamingToOccluded() listenForDreamingToGone() listenForDreamingToGoneWhenDismissable() listenForDreamingToGoneFromBiometricUnlock() listenForDreamingToAodOrDozing() listenForTransitionToCamera(scope, keyguardInteractor) listenForDreamingToGlanceableHub() Loading Loading @@ -101,7 +103,29 @@ constructor( } } private fun listenForDreamingToGone() { private fun listenForDreamingToGoneWhenDismissable() { scope.launch { keyguardInteractor.isAbleToDream .sampleCombine( keyguardInteractor.isKeyguardShowing, keyguardInteractor.isKeyguardDismissible, startedKeyguardTransitionStep, ) .collect { (isDreaming, isKeyguardShowing, isKeyguardDismissible, lastStartedTransition) -> if ( !isDreaming && lastStartedTransition.to == KeyguardState.DREAMING && isKeyguardDismissible && !isKeyguardShowing ) { startTransitionTo(KeyguardState.GONE) } } } } private fun listenForDreamingToGoneFromBiometricUnlock() { scope.launch { keyguardInteractor.biometricUnlockState .sample(startedKeyguardTransitionStep, ::Pair) Loading
packages/SystemUI/tests/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionScenariosTest.kt +26 −0 Original line number Diff line number Diff line Loading @@ -703,6 +703,32 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { coroutineContext.cancelChildren() } /** This handles security method NONE and screen off with lock timeout */ @Test fun dreamingToGoneWithKeyguardNotShowing() = testScope.runTest { // GIVEN a prior transition has run to DREAMING keyguardRepository.setDreamingWithOverlay(true) runTransitionAndSetWakefulness(KeyguardState.LOCKSCREEN, KeyguardState.DREAMING) runCurrent() // WHEN the device wakes up without a keyguard keyguardRepository.setKeyguardShowing(false) keyguardRepository.setKeyguardDismissible(true) keyguardRepository.setDreamingWithOverlay(false) advanceTimeBy(60L) assertThat(transitionRepository) .startedTransition( to = KeyguardState.GONE, from = KeyguardState.DREAMING, ownerName = "FromDreamingTransitionInteractor", animatorAssertion = { it.isNotNull() } ) coroutineContext.cancelChildren() } @Test fun dozingToGlanceableHub() = testScope.runTest { Loading