diff options
| author | 2023-06-21 16:19:52 -0400 | |
|---|---|---|
| committer | 2023-06-23 15:51:35 -0400 | |
| commit | 9c9d951846e0ca8c6596d03c1aab87c51a2d49f4 (patch) | |
| tree | dca7bab9deae325498bebd4d249fb3c1a16f68eb | |
| parent | f41f026bb8dbd747c343936bd512f4a9af455386 (diff) | |
Move common From*TransitionInteractor logic into the superclass.
This also has the benefit of allowing us to force that From<T>
transition interactors can only start transitions when we're
in, or were animating to, KeyguardState T.
Bug: 278086361
Test: atest KeyguardTransitionScenariosTest
Change-Id: I6503c51bfa3e55e0c6395f361fcd54fa0c18e2cf
11 files changed, 284 insertions, 442 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractor.kt index 38eaccee7284..8f0b91b6d864 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAlternateBouncerTransitionInteractor.kt @@ -22,7 +22,6 @@ import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository import com.android.systemui.keyguard.shared.model.KeyguardState -import com.android.systemui.keyguard.shared.model.TransitionInfo import com.android.systemui.keyguard.shared.model.WakefulnessState import com.android.systemui.util.kotlin.Utils.Companion.toQuad import com.android.systemui.util.kotlin.Utils.Companion.toQuint @@ -38,11 +37,14 @@ import kotlinx.coroutines.launch class FromAlternateBouncerTransitionInteractor @Inject constructor( + override val transitionRepository: KeyguardTransitionRepository, + override val transitionInteractor: KeyguardTransitionInteractor, @Application private val scope: CoroutineScope, private val keyguardInteractor: KeyguardInteractor, - private val keyguardTransitionRepository: KeyguardTransitionRepository, - private val keyguardTransitionInteractor: KeyguardTransitionInteractor, -) : TransitionInteractor(FromAlternateBouncerTransitionInteractor::class.simpleName!!) { +) : + TransitionInteractor( + fromState = KeyguardState.ALTERNATE_BOUNCER, + ) { override fun start() { listenForAlternateBouncerToGone() @@ -60,7 +62,7 @@ constructor( .sample( combine( keyguardInteractor.primaryBouncerShowing, - keyguardTransitionInteractor.startedKeyguardTransitionStep, + transitionInteractor.startedKeyguardTransitionStep, keyguardInteractor.wakefulnessModel, keyguardInteractor.isAodAvailable, ::toQuad @@ -92,14 +94,7 @@ constructor( } else { KeyguardState.LOCKSCREEN } - keyguardTransitionRepository.startTransition( - TransitionInfo( - ownerName = name, - from = KeyguardState.ALTERNATE_BOUNCER, - to = to, - animator = getAnimator(), - ) - ) + startTransitionTo(to) } } } @@ -108,17 +103,10 @@ constructor( private fun listenForAlternateBouncerToGone() { scope.launch { keyguardInteractor.isKeyguardGoingAway - .sample(keyguardTransitionInteractor.finishedKeyguardState, ::Pair) + .sample(transitionInteractor.finishedKeyguardState, ::Pair) .collect { (isKeyguardGoingAway, keyguardState) -> if (isKeyguardGoingAway && keyguardState == KeyguardState.ALTERNATE_BOUNCER) { - keyguardTransitionRepository.startTransition( - TransitionInfo( - ownerName = name, - from = KeyguardState.ALTERNATE_BOUNCER, - to = KeyguardState.GONE, - animator = getAnimator(), - ) - ) + startTransitionTo(KeyguardState.GONE) } } } @@ -127,26 +115,19 @@ constructor( private fun listenForAlternateBouncerToPrimaryBouncer() { scope.launch { keyguardInteractor.primaryBouncerShowing - .sample(keyguardTransitionInteractor.startedKeyguardTransitionStep, ::Pair) + .sample(transitionInteractor.startedKeyguardTransitionStep, ::Pair) .collect { (isPrimaryBouncerShowing, startedKeyguardState) -> if ( isPrimaryBouncerShowing && startedKeyguardState.to == KeyguardState.ALTERNATE_BOUNCER ) { - keyguardTransitionRepository.startTransition( - TransitionInfo( - ownerName = name, - from = KeyguardState.ALTERNATE_BOUNCER, - to = KeyguardState.PRIMARY_BOUNCER, - animator = getAnimator(), - ) - ) + startTransitionTo(KeyguardState.PRIMARY_BOUNCER) } } } } - private fun getAnimator(): ValueAnimator { + override fun getDefaultAnimatorForTransitionsToState(toState: KeyguardState): ValueAnimator { return ValueAnimator().apply { interpolator = Interpolators.LINEAR duration = TRANSITION_DURATION_MS diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAodTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAodTransitionInteractor.kt index 7e9cbc1a9772..2085c877064d 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAodTransitionInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromAodTransitionInteractor.kt @@ -24,7 +24,6 @@ import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepositor import com.android.systemui.keyguard.shared.model.BiometricUnlockModel.Companion.isWakeAndUnlock import com.android.systemui.keyguard.shared.model.DozeStateModel import com.android.systemui.keyguard.shared.model.KeyguardState -import com.android.systemui.keyguard.shared.model.TransitionInfo import com.android.systemui.util.kotlin.sample import javax.inject.Inject import kotlinx.coroutines.CoroutineScope @@ -34,11 +33,14 @@ import kotlinx.coroutines.launch class FromAodTransitionInteractor @Inject constructor( + override val transitionRepository: KeyguardTransitionRepository, + override val transitionInteractor: KeyguardTransitionInteractor, @Application private val scope: CoroutineScope, private val keyguardInteractor: KeyguardInteractor, - private val keyguardTransitionRepository: KeyguardTransitionRepository, - private val keyguardTransitionInteractor: KeyguardTransitionInteractor, -) : TransitionInteractor(FromAodTransitionInteractor::class.simpleName!!) { +) : + TransitionInteractor( + fromState = KeyguardState.AOD, + ) { override fun start() { listenForAodToLockscreen() @@ -49,18 +51,11 @@ constructor( scope.launch { keyguardInteractor .dozeTransitionTo(DozeStateModel.FINISH) - .sample(keyguardTransitionInteractor.startedKeyguardTransitionStep, ::Pair) + .sample(transitionInteractor.startedKeyguardTransitionStep, ::Pair) .collect { pair -> val (dozeToAod, lastStartedStep) = pair if (lastStartedStep.to == KeyguardState.AOD) { - keyguardTransitionRepository.startTransition( - TransitionInfo( - name, - KeyguardState.AOD, - KeyguardState.LOCKSCREEN, - getAnimator(), - ) - ) + startTransitionTo(KeyguardState.LOCKSCREEN) } } } @@ -69,29 +64,22 @@ constructor( private fun listenForAodToGone() { scope.launch { keyguardInteractor.biometricUnlockState - .sample(keyguardTransitionInteractor.finishedKeyguardState, ::Pair) + .sample(transitionInteractor.finishedKeyguardState, ::Pair) .collect { pair -> val (biometricUnlockState, keyguardState) = pair if ( keyguardState == KeyguardState.AOD && isWakeAndUnlock(biometricUnlockState) ) { - keyguardTransitionRepository.startTransition( - TransitionInfo( - name, - KeyguardState.AOD, - KeyguardState.GONE, - getAnimator(), - ) - ) + startTransitionTo(KeyguardState.GONE) } } } } - private fun getAnimator(): ValueAnimator { + override fun getDefaultAnimatorForTransitionsToState(toState: KeyguardState): ValueAnimator { return ValueAnimator().apply { - setInterpolator(Interpolators.LINEAR) - setDuration(TRANSITION_DURATION_MS) + interpolator = Interpolators.LINEAR + duration = TRANSITION_DURATION_MS } } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDozingTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDozingTransitionInteractor.kt index ee2c2df41624..c867c43b1646 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDozingTransitionInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDozingTransitionInteractor.kt @@ -23,10 +23,8 @@ import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository import com.android.systemui.keyguard.shared.model.BiometricUnlockModel.Companion.isWakeAndUnlock import com.android.systemui.keyguard.shared.model.KeyguardState -import com.android.systemui.keyguard.shared.model.TransitionInfo import com.android.systemui.util.kotlin.sample import javax.inject.Inject -import kotlin.time.Duration import kotlin.time.Duration.Companion.milliseconds import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch @@ -35,11 +33,14 @@ import kotlinx.coroutines.launch class FromDozingTransitionInteractor @Inject constructor( + override val transitionRepository: KeyguardTransitionRepository, + override val transitionInteractor: KeyguardTransitionInteractor, @Application private val scope: CoroutineScope, private val keyguardInteractor: KeyguardInteractor, - private val keyguardTransitionRepository: KeyguardTransitionRepository, - private val keyguardTransitionInteractor: KeyguardTransitionInteractor, -) : TransitionInteractor(FromDozingTransitionInteractor::class.simpleName!!) { +) : + TransitionInteractor( + fromState = KeyguardState.DOZING, + ) { override fun start() { listenForDozingToLockscreen() @@ -49,20 +50,13 @@ constructor( private fun listenForDozingToLockscreen() { scope.launch { keyguardInteractor.wakefulnessModel - .sample(keyguardTransitionInteractor.startedKeyguardTransitionStep, ::Pair) + .sample(transitionInteractor.startedKeyguardTransitionStep, ::Pair) .collect { (wakefulnessModel, lastStartedTransition) -> if ( wakefulnessModel.isStartingToWakeOrAwake() && lastStartedTransition.to == KeyguardState.DOZING ) { - keyguardTransitionRepository.startTransition( - TransitionInfo( - name, - KeyguardState.DOZING, - KeyguardState.LOCKSCREEN, - getAnimator(), - ) - ) + startTransitionTo(KeyguardState.LOCKSCREEN) } } } @@ -71,29 +65,22 @@ constructor( private fun listenForDozingToGone() { scope.launch { keyguardInteractor.biometricUnlockState - .sample(keyguardTransitionInteractor.startedKeyguardTransitionStep, ::Pair) + .sample(transitionInteractor.startedKeyguardTransitionStep, ::Pair) .collect { (biometricUnlockState, lastStartedTransition) -> if ( lastStartedTransition.to == KeyguardState.DOZING && isWakeAndUnlock(biometricUnlockState) ) { - keyguardTransitionRepository.startTransition( - TransitionInfo( - name, - KeyguardState.DOZING, - KeyguardState.GONE, - getAnimator(), - ) - ) + startTransitionTo(KeyguardState.GONE) } } } } - private fun getAnimator(duration: Duration = DEFAULT_DURATION): ValueAnimator { + override fun getDefaultAnimatorForTransitionsToState(toState: KeyguardState): ValueAnimator { return ValueAnimator().apply { - setInterpolator(Interpolators.LINEAR) - setDuration(duration.inWholeMilliseconds) + interpolator = Interpolators.LINEAR + duration = DEFAULT_DURATION.inWholeMilliseconds } } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractor.kt index ccf4bc1588f6..98d7434166b4 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDreamingTransitionInteractor.kt @@ -24,11 +24,9 @@ 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.keyguard.shared.model.TransitionInfo import com.android.systemui.util.kotlin.Utils.Companion.toTriple import com.android.systemui.util.kotlin.sample import javax.inject.Inject -import kotlin.time.Duration import kotlin.time.Duration.Companion.milliseconds import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.delay @@ -40,11 +38,14 @@ import kotlinx.coroutines.launch class FromDreamingTransitionInteractor @Inject constructor( + override val transitionRepository: KeyguardTransitionRepository, + override val transitionInteractor: KeyguardTransitionInteractor, @Application private val scope: CoroutineScope, private val keyguardInteractor: KeyguardInteractor, - private val keyguardTransitionRepository: KeyguardTransitionRepository, - private val keyguardTransitionInteractor: KeyguardTransitionInteractor, -) : TransitionInteractor(FromDreamingTransitionInteractor::class.simpleName!!) { +) : + TransitionInteractor( + fromState = KeyguardState.DREAMING, + ) { override fun start() { listenForDreamingToOccluded() @@ -54,15 +55,8 @@ constructor( fun startToLockscreenTransition() { scope.launch { - if (keyguardTransitionInteractor.startedKeyguardState.value == KeyguardState.DREAMING) { - keyguardTransitionRepository.startTransition( - TransitionInfo( - name, - KeyguardState.DREAMING, - KeyguardState.LOCKSCREEN, - getAnimator(TO_LOCKSCREEN_DURATION), - ) - ) + if (transitionInteractor.startedKeyguardState.value == KeyguardState.DREAMING) { + startTransitionTo(KeyguardState.LOCKSCREEN) } } } @@ -76,7 +70,7 @@ constructor( .sample( combine( keyguardInteractor.isKeyguardOccluded, - keyguardTransitionInteractor.startedKeyguardTransitionStep, + transitionInteractor.startedKeyguardTransitionStep, ::Pair, ), ::toTriple @@ -92,14 +86,7 @@ constructor( // action. There's no great signal to determine when the dream is ending // and a transition to OCCLUDED is beginning directly. For now, the solution // is DREAMING->LOCKSCREEN->OCCLUDED - keyguardTransitionRepository.startTransition( - TransitionInfo( - name, - lastStartedTransition.to, - KeyguardState.OCCLUDED, - getAnimator(), - ) - ) + startTransitionTo(KeyguardState.OCCLUDED) } } } @@ -109,14 +96,7 @@ constructor( scope.launch { keyguardInteractor.biometricUnlockState.collect { biometricUnlockState -> if (biometricUnlockState == BiometricUnlockModel.WAKE_AND_UNLOCK_FROM_DREAM) { - keyguardTransitionRepository.startTransition( - TransitionInfo( - name, - KeyguardState.DREAMING, - KeyguardState.GONE, - getAnimator(), - ) - ) + startTransitionTo(KeyguardState.GONE) } } } @@ -126,7 +106,7 @@ constructor( scope.launch { combine( keyguardInteractor.dozeTransitionModel, - keyguardTransitionInteractor.finishedKeyguardState, + transitionInteractor.finishedKeyguardState, ::Pair ) .collect { (dozeTransitionModel, keyguardState) -> @@ -134,23 +114,18 @@ constructor( dozeTransitionModel.to == DozeStateModel.DOZE && keyguardState == KeyguardState.DREAMING ) { - keyguardTransitionRepository.startTransition( - TransitionInfo( - name, - KeyguardState.DREAMING, - KeyguardState.DOZING, - getAnimator(), - ) - ) + startTransitionTo(KeyguardState.DOZING) } } } } - private fun getAnimator(duration: Duration = DEFAULT_DURATION): ValueAnimator { + override fun getDefaultAnimatorForTransitionsToState(toState: KeyguardState): ValueAnimator { return ValueAnimator().apply { - setInterpolator(Interpolators.LINEAR) - setDuration(duration.inWholeMilliseconds) + interpolator = Interpolators.LINEAR + duration = + if (toState == KeyguardState.LOCKSCREEN) TO_LOCKSCREEN_DURATION.inWholeMilliseconds + else DEFAULT_DURATION.inWholeMilliseconds } } 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 cfcb65471d8b..f82633fbba27 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 @@ -22,12 +22,10 @@ import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository import com.android.systemui.keyguard.shared.model.KeyguardState -import com.android.systemui.keyguard.shared.model.TransitionInfo import com.android.systemui.keyguard.shared.model.WakefulnessState import com.android.systemui.util.kotlin.Utils.Companion.toTriple import com.android.systemui.util.kotlin.sample import javax.inject.Inject -import kotlin.time.Duration import kotlin.time.Duration.Companion.milliseconds import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.combine @@ -37,11 +35,14 @@ import kotlinx.coroutines.launch class FromGoneTransitionInteractor @Inject constructor( + override val transitionRepository: KeyguardTransitionRepository, + override val transitionInteractor: KeyguardTransitionInteractor, @Application private val scope: CoroutineScope, private val keyguardInteractor: KeyguardInteractor, - private val keyguardTransitionRepository: KeyguardTransitionRepository, - private val keyguardTransitionInteractor: KeyguardTransitionInteractor, -) : TransitionInteractor(FromGoneTransitionInteractor::class.simpleName!!) { +) : + TransitionInteractor( + fromState = KeyguardState.GONE, + ) { override fun start() { listenForGoneToAodOrDozing() @@ -53,17 +54,10 @@ constructor( private fun listenForGoneToLockscreen() { scope.launch { keyguardInteractor.isKeyguardShowing - .sample(keyguardTransitionInteractor.startedKeyguardTransitionStep, ::Pair) + .sample(transitionInteractor.startedKeyguardTransitionStep, ::Pair) .collect { (isKeyguardShowing, lastStartedStep) -> if (isKeyguardShowing && lastStartedStep.to == KeyguardState.GONE) { - keyguardTransitionRepository.startTransition( - TransitionInfo( - name, - KeyguardState.GONE, - KeyguardState.LOCKSCREEN, - getAnimator(), - ) - ) + startTransitionTo(KeyguardState.LOCKSCREEN) } } } @@ -72,17 +66,10 @@ constructor( private fun listenForGoneToDreaming() { scope.launch { keyguardInteractor.isAbleToDream - .sample(keyguardTransitionInteractor.startedKeyguardTransitionStep, ::Pair) + .sample(transitionInteractor.startedKeyguardTransitionStep, ::Pair) .collect { (isAbleToDream, lastStartedStep) -> if (isAbleToDream && lastStartedStep.to == KeyguardState.GONE) { - keyguardTransitionRepository.startTransition( - TransitionInfo( - name, - KeyguardState.GONE, - KeyguardState.DREAMING, - getAnimator(TO_DREAMING_DURATION), - ) - ) + startTransitionTo(KeyguardState.DREAMING) } } } @@ -93,7 +80,7 @@ constructor( keyguardInteractor.wakefulnessModel .sample( combine( - keyguardTransitionInteractor.startedKeyguardTransitionStep, + transitionInteractor.startedKeyguardTransitionStep, keyguardInteractor.isAodAvailable, ::Pair ), @@ -104,30 +91,24 @@ constructor( lastStartedStep.to == KeyguardState.GONE && wakefulnessState.state == WakefulnessState.STARTING_TO_SLEEP ) { - keyguardTransitionRepository.startTransition( - TransitionInfo( - name, - KeyguardState.GONE, - if (isAodAvailable) { - KeyguardState.AOD - } else { - KeyguardState.DOZING - }, - getAnimator(), - ) + startTransitionTo( + if (isAodAvailable) KeyguardState.AOD else KeyguardState.DOZING ) } } } } - private fun getAnimator(duration: Duration = DEFAULT_DURATION): ValueAnimator { + override fun getDefaultAnimatorForTransitionsToState(toState: KeyguardState): ValueAnimator { return ValueAnimator().apply { - setInterpolator(Interpolators.LINEAR) - setDuration(duration.inWholeMilliseconds) + interpolator = Interpolators.LINEAR + duration = + when (toState) { + KeyguardState.DREAMING -> TO_DREAMING_DURATION + else -> DEFAULT_DURATION + }.inWholeMilliseconds } } - companion object { private val DEFAULT_DURATION = 500.milliseconds val TO_DREAMING_DURATION = 933.milliseconds diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromLockscreenTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromLockscreenTransitionInteractor.kt index b5e289f2ac6e..b7963340228b 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromLockscreenTransitionInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromLockscreenTransitionInteractor.kt @@ -32,7 +32,6 @@ import com.android.systemui.util.kotlin.Utils.Companion.toTriple import com.android.systemui.util.kotlin.sample import java.util.UUID import javax.inject.Inject -import kotlin.time.Duration import kotlin.time.Duration.Companion.milliseconds import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.combine @@ -42,12 +41,15 @@ import kotlinx.coroutines.launch class FromLockscreenTransitionInteractor @Inject constructor( + override val transitionRepository: KeyguardTransitionRepository, + override val transitionInteractor: KeyguardTransitionInteractor, @Application private val scope: CoroutineScope, private val keyguardInteractor: KeyguardInteractor, private val shadeRepository: ShadeRepository, - private val keyguardTransitionInteractor: KeyguardTransitionInteractor, - private val keyguardTransitionRepository: KeyguardTransitionRepository, -) : TransitionInteractor(FromLockscreenTransitionInteractor::class.simpleName!!) { +) : + TransitionInteractor( + fromState = KeyguardState.LOCKSCREEN, + ) { override fun start() { listenForLockscreenToGone() @@ -66,8 +68,8 @@ constructor( keyguardInteractor.isAbleToDream .sample( combine( - keyguardTransitionInteractor.startedKeyguardTransitionStep, - keyguardTransitionInteractor.finishedKeyguardState, + transitionInteractor.startedKeyguardTransitionStep, + transitionInteractor.finishedKeyguardState, ::Pair ), ::toTriple @@ -78,14 +80,7 @@ constructor( lastStartedTransition.to == KeyguardState.LOCKSCREEN && !invalidFromStates.contains(lastStartedTransition.from) if (isAbleToDream && (isOnLockscreen || isTransitionInterruptible)) { - keyguardTransitionRepository.startTransition( - TransitionInfo( - name, - KeyguardState.LOCKSCREEN, - KeyguardState.DREAMING, - getAnimator(TO_DREAMING_DURATION), - ) - ) + startTransitionTo(KeyguardState.DREAMING) } } } @@ -94,20 +89,13 @@ constructor( private fun listenForLockscreenToPrimaryBouncer() { scope.launch { keyguardInteractor.primaryBouncerShowing - .sample(keyguardTransitionInteractor.startedKeyguardTransitionStep, ::Pair) + .sample(transitionInteractor.startedKeyguardTransitionStep, ::Pair) .collect { pair -> val (isBouncerShowing, lastStartedTransitionStep) = pair if ( isBouncerShowing && lastStartedTransitionStep.to == KeyguardState.LOCKSCREEN ) { - keyguardTransitionRepository.startTransition( - TransitionInfo( - ownerName = name, - from = KeyguardState.LOCKSCREEN, - to = KeyguardState.PRIMARY_BOUNCER, - animator = getAnimator(), - ) - ) + startTransitionTo(KeyguardState.PRIMARY_BOUNCER) } } } @@ -116,21 +104,14 @@ constructor( private fun listenForLockscreenToAlternateBouncer() { scope.launch { keyguardInteractor.alternateBouncerShowing - .sample(keyguardTransitionInteractor.startedKeyguardTransitionStep, ::Pair) + .sample(transitionInteractor.startedKeyguardTransitionStep, ::Pair) .collect { pair -> val (isAlternateBouncerShowing, lastStartedTransitionStep) = pair if ( isAlternateBouncerShowing && lastStartedTransitionStep.to == KeyguardState.LOCKSCREEN ) { - keyguardTransitionRepository.startTransition( - TransitionInfo( - ownerName = name, - from = KeyguardState.LOCKSCREEN, - to = KeyguardState.ALTERNATE_BOUNCER, - animator = getAnimator(), - ) - ) + startTransitionTo(KeyguardState.ALTERNATE_BOUNCER) } } } @@ -143,7 +124,7 @@ constructor( shadeRepository.shadeModel .sample( combine( - keyguardTransitionInteractor.startedKeyguardTransitionStep, + transitionInteractor.startedKeyguardTransitionStep, keyguardInteractor.statusBarState, keyguardInteractor.isKeyguardUnlocked, ::Triple @@ -164,7 +145,7 @@ constructor( } else { TransitionState.RUNNING } - keyguardTransitionRepository.updateTransition( + transitionRepository.updateTransition( id, 1f - shadeModel.expansionAmount, nextState, @@ -178,13 +159,17 @@ constructor( } // If canceled, just put the state back + // TODO: This logic should happen in FromPrimaryBouncerInteractor. if (nextState == TransitionState.CANCELED) { - keyguardTransitionRepository.startTransition( + transitionRepository.startTransition( TransitionInfo( ownerName = name, from = KeyguardState.PRIMARY_BOUNCER, to = KeyguardState.LOCKSCREEN, - animator = getAnimator(0.milliseconds) + animator = + getDefaultAnimatorForTransitionsToState(KeyguardState.LOCKSCREEN).apply { + duration = 0 + } ) ) } @@ -198,15 +183,7 @@ constructor( !isKeyguardUnlocked && statusBarState == KEYGUARD ) { - transitionId = - keyguardTransitionRepository.startTransition( - TransitionInfo( - ownerName = name, - from = KeyguardState.LOCKSCREEN, - to = KeyguardState.PRIMARY_BOUNCER, - animator = null, - ) - ) + transitionId = startTransitionTo(KeyguardState.PRIMARY_BOUNCER) } } } @@ -216,18 +193,11 @@ constructor( private fun listenForLockscreenToGone() { scope.launch { keyguardInteractor.isKeyguardGoingAway - .sample(keyguardTransitionInteractor.startedKeyguardTransitionStep, ::Pair) + .sample(transitionInteractor.startedKeyguardTransitionStep, ::Pair) .collect { pair -> val (isKeyguardGoingAway, lastStartedStep) = pair if (isKeyguardGoingAway && lastStartedStep.to == KeyguardState.LOCKSCREEN) { - keyguardTransitionRepository.startTransition( - TransitionInfo( - name, - KeyguardState.LOCKSCREEN, - KeyguardState.GONE, - getAnimator(), - ) - ) + startTransitionTo(KeyguardState.GONE) } } } @@ -238,7 +208,7 @@ constructor( keyguardInteractor.isKeyguardOccluded .sample( combine( - keyguardTransitionInteractor.finishedKeyguardState, + transitionInteractor.finishedKeyguardState, keyguardInteractor.isDreaming, ::Pair ), @@ -246,14 +216,7 @@ constructor( ) .collect { (isOccluded, keyguardState, isDreaming) -> if (isOccluded && !isDreaming && keyguardState == KeyguardState.LOCKSCREEN) { - keyguardTransitionRepository.startTransition( - TransitionInfo( - name, - keyguardState, - KeyguardState.OCCLUDED, - getAnimator(TO_OCCLUDED_DURATION), - ) - ) + startTransitionTo(KeyguardState.OCCLUDED) } } } @@ -263,7 +226,7 @@ constructor( private fun listenForLockscreenToCamera() { scope.launch { keyguardInteractor.onCameraLaunchDetected - .sample(keyguardTransitionInteractor.startedKeyguardTransitionStep, ::Pair) + .sample(transitionInteractor.startedKeyguardTransitionStep, ::Pair) .collect { (_, lastStartedStep) -> // DREAMING/AOD/OFF may trigger on the first power button push, so include this // state in order to cancel and correct the transition @@ -274,14 +237,7 @@ constructor( lastStartedStep.to == KeyguardState.AOD || lastStartedStep.to == KeyguardState.OFF ) { - keyguardTransitionRepository.startTransition( - TransitionInfo( - name, - KeyguardState.LOCKSCREEN, - KeyguardState.OCCLUDED, - getAnimator(TO_OCCLUDED_DURATION), - ) - ) + startTransitionTo(KeyguardState.OCCLUDED) } } } @@ -292,7 +248,7 @@ constructor( keyguardInteractor.wakefulnessModel .sample( combine( - keyguardTransitionInteractor.startedKeyguardTransitionStep, + transitionInteractor.startedKeyguardTransitionStep, keyguardInteractor.isAodAvailable, ::Pair ), @@ -303,27 +259,23 @@ constructor( lastStartedStep.to == KeyguardState.LOCKSCREEN && wakefulnessState.state == WakefulnessState.STARTING_TO_SLEEP ) { - keyguardTransitionRepository.startTransition( - TransitionInfo( - name, - KeyguardState.LOCKSCREEN, - if (isAodAvailable) { - KeyguardState.AOD - } else { - KeyguardState.DOZING - }, - getAnimator(), - ) + startTransitionTo( + if (isAodAvailable) KeyguardState.AOD else KeyguardState.DOZING ) } } } } - private fun getAnimator(duration: Duration = DEFAULT_DURATION): ValueAnimator { + override fun getDefaultAnimatorForTransitionsToState(toState: KeyguardState): ValueAnimator { return ValueAnimator().apply { - setInterpolator(Interpolators.LINEAR) - setDuration(duration.inWholeMilliseconds) + interpolator = Interpolators.LINEAR + duration = + when (toState) { + KeyguardState.DREAMING -> TO_DREAMING_DURATION + KeyguardState.OCCLUDED -> TO_OCCLUDED_DURATION + else -> DEFAULT_DURATION + }.inWholeMilliseconds } } 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 b0dbc591dd15..a8147d0c2cf6 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 @@ -22,12 +22,10 @@ import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository import com.android.systemui.keyguard.shared.model.KeyguardState -import com.android.systemui.keyguard.shared.model.TransitionInfo import com.android.systemui.keyguard.shared.model.WakefulnessState import com.android.systemui.util.kotlin.Utils.Companion.toTriple import com.android.systemui.util.kotlin.sample import javax.inject.Inject -import kotlin.time.Duration import kotlin.time.Duration.Companion.milliseconds import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.combine @@ -37,11 +35,14 @@ import kotlinx.coroutines.launch class FromOccludedTransitionInteractor @Inject constructor( + override val transitionRepository: KeyguardTransitionRepository, + override val transitionInteractor: KeyguardTransitionInteractor, @Application private val scope: CoroutineScope, private val keyguardInteractor: KeyguardInteractor, - private val keyguardTransitionRepository: KeyguardTransitionRepository, - private val keyguardTransitionInteractor: KeyguardTransitionInteractor, -) : TransitionInteractor(FromOccludedTransitionInteractor::class.simpleName!!) { +) : + TransitionInteractor( + fromState = KeyguardState.OCCLUDED, + ) { override fun start() { listenForOccludedToLockscreen() @@ -54,18 +55,11 @@ constructor( private fun listenForOccludedToDreaming() { scope.launch { keyguardInteractor.isAbleToDream - .sample(keyguardTransitionInteractor.finishedKeyguardState, ::Pair) + .sample(transitionInteractor.finishedKeyguardState, ::Pair) .collect { pair -> val (isAbleToDream, keyguardState) = pair if (isAbleToDream && keyguardState == KeyguardState.OCCLUDED) { - keyguardTransitionRepository.startTransition( - TransitionInfo( - name, - KeyguardState.OCCLUDED, - KeyguardState.DREAMING, - getAnimator(), - ) - ) + startTransitionTo(KeyguardState.DREAMING) } } } @@ -77,7 +71,7 @@ constructor( .sample( combine( keyguardInteractor.isKeyguardShowing, - keyguardTransitionInteractor.startedKeyguardTransitionStep, + transitionInteractor.startedKeyguardTransitionStep, ::Pair ), ::toTriple @@ -90,14 +84,7 @@ constructor( isShowing && lastStartedKeyguardState.to == KeyguardState.OCCLUDED ) { - keyguardTransitionRepository.startTransition( - TransitionInfo( - name, - KeyguardState.OCCLUDED, - KeyguardState.LOCKSCREEN, - getAnimator(TO_LOCKSCREEN_DURATION), - ) - ) + startTransitionTo(KeyguardState.LOCKSCREEN) } } } @@ -109,7 +96,7 @@ constructor( .sample( combine( keyguardInteractor.isKeyguardShowing, - keyguardTransitionInteractor.startedKeyguardTransitionStep, + transitionInteractor.startedKeyguardTransitionStep, ::Pair ), ::toTriple @@ -122,14 +109,7 @@ constructor( !isShowing && lastStartedKeyguardState.to == KeyguardState.OCCLUDED ) { - keyguardTransitionRepository.startTransition( - TransitionInfo( - name, - KeyguardState.OCCLUDED, - KeyguardState.GONE, - getAnimator(), - ) - ) + startTransitionTo(KeyguardState.GONE) } } } @@ -140,7 +120,7 @@ constructor( keyguardInteractor.wakefulnessModel .sample( combine( - keyguardTransitionInteractor.startedKeyguardTransitionStep, + transitionInteractor.startedKeyguardTransitionStep, keyguardInteractor.isAodAvailable, ::Pair ), @@ -151,17 +131,8 @@ constructor( lastStartedStep.to == KeyguardState.OCCLUDED && wakefulnessState.state == WakefulnessState.STARTING_TO_SLEEP ) { - keyguardTransitionRepository.startTransition( - TransitionInfo( - name, - KeyguardState.OCCLUDED, - if (isAodAvailable) { - KeyguardState.AOD - } else { - KeyguardState.DOZING - }, - getAnimator(), - ) + startTransitionTo( + if (isAodAvailable) KeyguardState.AOD else KeyguardState.DOZING ) } } @@ -171,29 +142,26 @@ constructor( private fun listenForOccludedToAlternateBouncer() { scope.launch { keyguardInteractor.alternateBouncerShowing - .sample(keyguardTransitionInteractor.startedKeyguardTransitionStep, ::Pair) + .sample(transitionInteractor.startedKeyguardTransitionStep, ::Pair) .collect { (isAlternateBouncerShowing, lastStartedTransitionStep) -> if ( isAlternateBouncerShowing && lastStartedTransitionStep.to == KeyguardState.OCCLUDED ) { - keyguardTransitionRepository.startTransition( - TransitionInfo( - ownerName = name, - from = KeyguardState.OCCLUDED, - to = KeyguardState.ALTERNATE_BOUNCER, - animator = getAnimator(), - ) - ) + startTransitionTo(KeyguardState.ALTERNATE_BOUNCER) } } } } - private fun getAnimator(duration: Duration = DEFAULT_DURATION): ValueAnimator { + override fun getDefaultAnimatorForTransitionsToState(toState: KeyguardState): ValueAnimator { return ValueAnimator().apply { - setInterpolator(Interpolators.LINEAR) - setDuration(duration.inWholeMilliseconds) + interpolator = Interpolators.LINEAR + duration = + when (toState) { + KeyguardState.LOCKSCREEN -> TO_LOCKSCREEN_DURATION + else -> DEFAULT_DURATION + }.inWholeMilliseconds } } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractor.kt index da09e1f0f4d2..e1754f55b1dd 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromPrimaryBouncerTransitionInteractor.kt @@ -25,12 +25,10 @@ import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository import com.android.systemui.keyguard.shared.model.KeyguardState -import com.android.systemui.keyguard.shared.model.TransitionInfo import com.android.systemui.keyguard.shared.model.WakefulnessState import com.android.systemui.util.kotlin.Utils.Companion.toQuad import com.android.systemui.util.kotlin.sample import javax.inject.Inject -import kotlin.time.Duration import kotlin.time.Duration.Companion.milliseconds import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.combine @@ -40,12 +38,15 @@ import kotlinx.coroutines.launch class FromPrimaryBouncerTransitionInteractor @Inject constructor( + override val transitionRepository: KeyguardTransitionRepository, + override val transitionInteractor: KeyguardTransitionInteractor, @Application private val scope: CoroutineScope, private val keyguardInteractor: KeyguardInteractor, - private val keyguardTransitionRepository: KeyguardTransitionRepository, - private val keyguardTransitionInteractor: KeyguardTransitionInteractor, private val keyguardSecurityModel: KeyguardSecurityModel, -) : TransitionInteractor(FromPrimaryBouncerTransitionInteractor::class.simpleName!!) { +) : + TransitionInteractor( + fromState = KeyguardState.PRIMARY_BOUNCER, + ) { override fun start() { listenForPrimaryBouncerToGone() @@ -59,7 +60,7 @@ constructor( .sample( combine( keyguardInteractor.wakefulnessModel, - keyguardTransitionInteractor.startedKeyguardTransitionStep, + transitionInteractor.startedKeyguardTransitionStep, keyguardInteractor.isKeyguardOccluded, ::Triple ), @@ -73,20 +74,8 @@ constructor( (wakefulnessState.state == WakefulnessState.AWAKE || wakefulnessState.state == WakefulnessState.STARTING_TO_WAKE) ) { - val to = - if (occluded) { - KeyguardState.OCCLUDED - } else { - KeyguardState.LOCKSCREEN - } - - keyguardTransitionRepository.startTransition( - TransitionInfo( - ownerName = name, - from = KeyguardState.PRIMARY_BOUNCER, - to = to, - animator = getAnimator(), - ) + startTransitionTo( + if (occluded) KeyguardState.OCCLUDED else KeyguardState.LOCKSCREEN ) } } @@ -99,7 +88,7 @@ constructor( .sample( combine( keyguardInteractor.wakefulnessModel, - keyguardTransitionInteractor.startedKeyguardTransitionStep, + transitionInteractor.startedKeyguardTransitionStep, keyguardInteractor.isAodAvailable, ::Triple ), @@ -114,20 +103,8 @@ constructor( (wakefulnessState.state == WakefulnessState.STARTING_TO_SLEEP || wakefulnessState.state == WakefulnessState.ASLEEP) ) { - val to = - if (isAodAvailable) { - KeyguardState.AOD - } else { - KeyguardState.DOZING - } - - keyguardTransitionRepository.startTransition( - TransitionInfo( - ownerName = name, - from = KeyguardState.PRIMARY_BOUNCER, - to = to, - animator = getAnimator(), - ) + startTransitionTo( + if (isAodAvailable) KeyguardState.AOD else KeyguardState.DOZING ) } } @@ -137,7 +114,7 @@ constructor( private fun listenForPrimaryBouncerToGone() { scope.launch { keyguardInteractor.isKeyguardGoingAway - .sample(keyguardTransitionInteractor.startedKeyguardTransitionStep, ::Pair) + .sample(transitionInteractor.startedKeyguardTransitionStep, ::Pair) .collect { (isKeyguardGoingAway, lastStartedTransitionStep) -> if ( isKeyguardGoingAway && @@ -154,24 +131,24 @@ constructor( } else { TO_GONE_DURATION } - keyguardTransitionRepository.startTransition( - TransitionInfo( - ownerName = name, - from = KeyguardState.PRIMARY_BOUNCER, - to = KeyguardState.GONE, - animator = getAnimator(duration), - ), - resetIfCanceled = true, + + startTransitionTo( + toState = KeyguardState.GONE, + animator = + getDefaultAnimatorForTransitionsToState(KeyguardState.GONE).apply { + this.duration = duration.inWholeMilliseconds + }, + resetIfCancelled = true ) } } } } - private fun getAnimator(duration: Duration = DEFAULT_DURATION): ValueAnimator { + override fun getDefaultAnimatorForTransitionsToState(toState: KeyguardState): ValueAnimator { return ValueAnimator().apply { - setInterpolator(Interpolators.LINEAR) - setDuration(duration.inWholeMilliseconds) + interpolator = Interpolators.LINEAR + duration = DEFAULT_DURATION.inWholeMilliseconds } } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractor.kt index 42f12f82d9a7..df7c79ff4264 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardTransitionInteractor.kt @@ -47,6 +47,8 @@ constructor( private val repository: KeyguardTransitionRepository, @Application val scope: CoroutineScope, ) { + private val TAG = this::class.simpleName + /** (any)->GONE transition information */ val anyStateToGoneTransition: Flow<TransitionStep> = repository.transitions.filter { step -> step.to == KeyguardState.GONE } 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 b7dd1a5f42b5..ae6fc9e6e6dc 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 @@ -15,6 +15,14 @@ */ package com.android.systemui.keyguard.domain.interactor + +import android.animation.ValueAnimator +import android.util.Log +import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository +import com.android.systemui.keyguard.shared.model.KeyguardState +import com.android.systemui.keyguard.shared.model.TransitionInfo +import java.util.UUID + /** * Each TransitionInteractor is responsible for determining under which conditions to notify * [KeyguardTransitionRepository] to signal a transition. When (and if) the transition occurs is @@ -26,6 +34,50 @@ package com.android.systemui.keyguard.domain.interactor * MUST list implementing classes in dagger module [StartKeyguardTransitionModule] and also in the * 'when' clause of [KeyguardTransitionCoreStartable] */ -sealed class TransitionInteractor(val name: String) { +sealed class TransitionInteractor( + val fromState: KeyguardState, +) { + val name = this::class.simpleName ?: "UnknownTransitionInteractor" + + abstract val transitionRepository: KeyguardTransitionRepository + abstract val transitionInteractor: KeyguardTransitionInteractor abstract fun start() + + fun startTransitionTo( + toState: KeyguardState, + animator: ValueAnimator? = getDefaultAnimatorForTransitionsToState(toState), + resetIfCancelled: Boolean = false + ): UUID? { + if ( + fromState != transitionInteractor.startedKeyguardState.value && + fromState != transitionInteractor.finishedKeyguardState.value + ) { + Log.e( + name, + "startTransition: We were asked to transition from " + + "$fromState to $toState, however we last finished a transition to " + + "${transitionInteractor.finishedKeyguardState.value}, " + + "and last started a transition to " + + "${transitionInteractor.startedKeyguardState.value}. " + + "Ignoring startTransition, but this should never happen." + ) + return null + } + + return transitionRepository.startTransition( + TransitionInfo( + name, + fromState, + toState, + animator, + ), + resetIfCancelled + ) + } + + /** + * Returns a ValueAnimator to be used for transitions to [toState], if one is not explicitly + * passed to [startTransitionTo]. + */ + abstract fun getDefaultAnimatorForTransitionsToState(toState: KeyguardState): ValueAnimator? } 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 50075b5ae5d2..b5590154f7f4 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 @@ -25,7 +25,6 @@ import com.android.systemui.flags.FakeFeatureFlags import com.android.systemui.flags.Flags import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository -import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository import com.android.systemui.keyguard.shared.model.BiometricUnlockModel import com.android.systemui.keyguard.shared.model.DozeStateModel import com.android.systemui.keyguard.shared.model.DozeTransitionModel @@ -56,6 +55,7 @@ import org.mockito.ArgumentMatchers.anyInt import org.mockito.Mock import org.mockito.Mockito.never import org.mockito.Mockito.reset +import org.mockito.Mockito.spy import org.mockito.Mockito.verify import org.mockito.MockitoAnnotations @@ -72,10 +72,10 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { private lateinit var bouncerRepository: FakeKeyguardBouncerRepository private lateinit var shadeRepository: ShadeRepository private lateinit var transitionRepository: FakeKeyguardTransitionRepository + private lateinit var transitionInteractor: KeyguardTransitionInteractor private lateinit var featureFlags: FakeFeatureFlags // Used to verify transition requests for test output - @Mock private lateinit var mockTransitionRepository: KeyguardTransitionRepository @Mock private lateinit var keyguardSecurityModel: KeyguardSecurityModel private lateinit var fromLockscreenTransitionInteractor: FromLockscreenTransitionInteractor @@ -97,92 +97,71 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { keyguardRepository = FakeKeyguardRepository() bouncerRepository = FakeKeyguardBouncerRepository() shadeRepository = FakeShadeRepository() - transitionRepository = FakeKeyguardTransitionRepository() + transitionRepository = spy(FakeKeyguardTransitionRepository()) + transitionInteractor = KeyguardTransitionInteractor( + transitionRepository, testScope.backgroundScope) whenever(keyguardSecurityModel.getSecurityMode(anyInt())).thenReturn(PIN) featureFlags = FakeFeatureFlags().apply { set(Flags.FACE_AUTH_REFACTOR, true) } - fromLockscreenTransitionInteractor = - FromLockscreenTransitionInteractor( + + fromLockscreenTransitionInteractor = FromLockscreenTransitionInteractor( scope = testScope, keyguardInteractor = createKeyguardInteractor(), + transitionRepository = transitionRepository, + transitionInteractor = transitionInteractor, shadeRepository = shadeRepository, - keyguardTransitionRepository = mockTransitionRepository, - keyguardTransitionInteractor = - KeyguardTransitionInteractor(transitionRepository, testScope.backgroundScope), - ) - fromLockscreenTransitionInteractor.start() + ).apply { start() } - fromDreamingTransitionInteractor = - FromDreamingTransitionInteractor( + fromPrimaryBouncerTransitionInteractor = FromPrimaryBouncerTransitionInteractor( scope = testScope, keyguardInteractor = createKeyguardInteractor(), - keyguardTransitionRepository = mockTransitionRepository, - keyguardTransitionInteractor = - KeyguardTransitionInteractor(transitionRepository, testScope.backgroundScope), - ) - fromDreamingTransitionInteractor.start() + transitionRepository = transitionRepository, + transitionInteractor = transitionInteractor, + keyguardSecurityModel = keyguardSecurityModel, + ).apply { start() } - fromAodTransitionInteractor = - FromAodTransitionInteractor( + fromDreamingTransitionInteractor = FromDreamingTransitionInteractor( scope = testScope, keyguardInteractor = createKeyguardInteractor(), - keyguardTransitionRepository = mockTransitionRepository, - keyguardTransitionInteractor = - KeyguardTransitionInteractor(transitionRepository, testScope.backgroundScope), - ) - fromAodTransitionInteractor.start() + transitionRepository = transitionRepository, + transitionInteractor = transitionInteractor, + ).apply { start() } - fromGoneTransitionInteractor = - FromGoneTransitionInteractor( + fromAodTransitionInteractor = FromAodTransitionInteractor( scope = testScope, keyguardInteractor = createKeyguardInteractor(), - keyguardTransitionRepository = mockTransitionRepository, - keyguardTransitionInteractor = - KeyguardTransitionInteractor(transitionRepository, testScope.backgroundScope), - ) - fromGoneTransitionInteractor.start() + transitionRepository = transitionRepository, + transitionInteractor = transitionInteractor, + ).apply { start() } - fromDozingTransitionInteractor = - FromDozingTransitionInteractor( + fromGoneTransitionInteractor = FromGoneTransitionInteractor( scope = testScope, keyguardInteractor = createKeyguardInteractor(), - keyguardTransitionRepository = mockTransitionRepository, - keyguardTransitionInteractor = - KeyguardTransitionInteractor(transitionRepository, testScope.backgroundScope), - ) - fromDozingTransitionInteractor.start() + transitionRepository = transitionRepository, + transitionInteractor = transitionInteractor, + ).apply { start() } - fromOccludedTransitionInteractor = - FromOccludedTransitionInteractor( + fromDozingTransitionInteractor = FromDozingTransitionInteractor( scope = testScope, keyguardInteractor = createKeyguardInteractor(), - keyguardTransitionRepository = mockTransitionRepository, - keyguardTransitionInteractor = - KeyguardTransitionInteractor(transitionRepository, testScope.backgroundScope), - ) - fromOccludedTransitionInteractor.start() + transitionRepository = transitionRepository, + transitionInteractor = transitionInteractor, + ).apply { start() } - fromAlternateBouncerTransitionInteractor = - FromAlternateBouncerTransitionInteractor( + fromOccludedTransitionInteractor = FromOccludedTransitionInteractor( scope = testScope, keyguardInteractor = createKeyguardInteractor(), - keyguardTransitionRepository = mockTransitionRepository, - keyguardTransitionInteractor = - KeyguardTransitionInteractor(transitionRepository, testScope.backgroundScope), - ) - fromAlternateBouncerTransitionInteractor.start() + transitionRepository = transitionRepository, + transitionInteractor = transitionInteractor, + ).apply { start() } - fromPrimaryBouncerTransitionInteractor = - FromPrimaryBouncerTransitionInteractor( + fromAlternateBouncerTransitionInteractor = FromAlternateBouncerTransitionInteractor( scope = testScope, keyguardInteractor = createKeyguardInteractor(), - keyguardTransitionRepository = mockTransitionRepository, - keyguardTransitionInteractor = - KeyguardTransitionInteractor(transitionRepository, testScope.backgroundScope), - keyguardSecurityModel = keyguardSecurityModel, - ) - fromPrimaryBouncerTransitionInteractor.start() + transitionRepository = transitionRepository, + transitionInteractor = transitionInteractor, + ).apply { start() } } @Test @@ -201,7 +180,7 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { val info = withArgCaptor<TransitionInfo> { - verify(mockTransitionRepository).startTransition(capture(), anyBoolean()) + verify(transitionRepository).startTransition(capture(), anyBoolean()) } // THEN a transition to PRIMARY_BOUNCER should occur assertThat(info.ownerName).isEqualTo("FromLockscreenTransitionInteractor") @@ -228,7 +207,7 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { val info = withArgCaptor<TransitionInfo> { - verify(mockTransitionRepository).startTransition(capture(), anyBoolean()) + verify(transitionRepository).startTransition(capture(), anyBoolean()) } // THEN a transition to DOZING should occur assertThat(info.ownerName).isEqualTo("FromOccludedTransitionInteractor") @@ -255,7 +234,7 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { val info = withArgCaptor<TransitionInfo> { - verify(mockTransitionRepository).startTransition(capture(), anyBoolean()) + verify(transitionRepository).startTransition(capture(), anyBoolean()) } // THEN a transition to DOZING should occur assertThat(info.ownerName).isEqualTo("FromOccludedTransitionInteractor") @@ -286,7 +265,7 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { val info = withArgCaptor<TransitionInfo> { - verify(mockTransitionRepository).startTransition(capture(), anyBoolean()) + verify(transitionRepository).startTransition(capture(), anyBoolean()) } // THEN a transition to DREAMING should occur assertThat(info.ownerName).isEqualTo("FromLockscreenTransitionInteractor") @@ -313,7 +292,7 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { val info = withArgCaptor<TransitionInfo> { - verify(mockTransitionRepository).startTransition(capture(), anyBoolean()) + verify(transitionRepository).startTransition(capture(), anyBoolean()) } // THEN a transition to DOZING should occur assertThat(info.ownerName).isEqualTo("FromLockscreenTransitionInteractor") @@ -340,7 +319,7 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { val info = withArgCaptor<TransitionInfo> { - verify(mockTransitionRepository).startTransition(capture(), anyBoolean()) + verify(transitionRepository).startTransition(capture(), anyBoolean()) } // THEN a transition to DOZING should occur assertThat(info.ownerName).isEqualTo("FromLockscreenTransitionInteractor") @@ -363,7 +342,7 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { val info = withArgCaptor<TransitionInfo> { - verify(mockTransitionRepository).startTransition(capture(), anyBoolean()) + verify(transitionRepository).startTransition(capture(), anyBoolean()) } // THEN a transition to DOZING should occur assertThat(info.ownerName).isEqualTo("FromDozingTransitionInteractor") @@ -388,14 +367,14 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { ) ) runCurrent() - reset(mockTransitionRepository) + reset(transitionRepository) // WHEN a signal comes that dreaming is enabled keyguardRepository.setDreamingWithOverlay(true) advanceUntilIdle() // THEN the transition is ignored - verify(mockTransitionRepository, never()).startTransition(any(), anyBoolean()) + verify(transitionRepository, never()).startTransition(any(), anyBoolean()) coroutineContext.cancelChildren() } @@ -412,7 +391,7 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { val info = withArgCaptor<TransitionInfo> { - verify(mockTransitionRepository).startTransition(capture(), anyBoolean()) + verify(transitionRepository).startTransition(capture(), anyBoolean()) } // THEN a transition to DOZING should occur assertThat(info.ownerName).isEqualTo("FromDozingTransitionInteractor") @@ -439,7 +418,7 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { val info = withArgCaptor<TransitionInfo> { - verify(mockTransitionRepository).startTransition(capture(), anyBoolean()) + verify(transitionRepository).startTransition(capture(), anyBoolean()) } // THEN a transition to DOZING should occur assertThat(info.ownerName).isEqualTo("FromGoneTransitionInteractor") @@ -466,7 +445,7 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { val info = withArgCaptor<TransitionInfo> { - verify(mockTransitionRepository).startTransition(capture(), anyBoolean()) + verify(transitionRepository).startTransition(capture(), anyBoolean()) } // THEN a transition to AOD should occur assertThat(info.ownerName).isEqualTo("FromGoneTransitionInteractor") @@ -489,7 +468,7 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { val info = withArgCaptor<TransitionInfo> { - verify(mockTransitionRepository).startTransition(capture(), anyBoolean()) + verify(transitionRepository).startTransition(capture(), anyBoolean()) } // THEN a transition to AOD should occur assertThat(info.ownerName).isEqualTo("FromGoneTransitionInteractor") @@ -520,7 +499,7 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { val info = withArgCaptor<TransitionInfo> { - verify(mockTransitionRepository).startTransition(capture(), anyBoolean()) + verify(transitionRepository).startTransition(capture(), anyBoolean()) } // THEN a transition to DREAMING should occur assertThat(info.ownerName).isEqualTo("FromGoneTransitionInteractor") @@ -543,7 +522,7 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { val info = withArgCaptor<TransitionInfo> { - verify(mockTransitionRepository).startTransition(capture(), anyBoolean()) + verify(transitionRepository).startTransition(capture(), anyBoolean()) } // THEN a transition to PRIMARY_BOUNCER should occur assertThat(info.ownerName).isEqualTo("FromAlternateBouncerTransitionInteractor") @@ -572,7 +551,7 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { val info = withArgCaptor<TransitionInfo> { - verify(mockTransitionRepository).startTransition(capture(), anyBoolean()) + verify(transitionRepository).startTransition(capture(), anyBoolean()) } // THEN a transition to AOD should occur assertThat(info.ownerName).isEqualTo("FromAlternateBouncerTransitionInteractor") @@ -602,7 +581,7 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { val info = withArgCaptor<TransitionInfo> { - verify(mockTransitionRepository).startTransition(capture(), anyBoolean()) + verify(transitionRepository).startTransition(capture(), anyBoolean()) } // THEN a transition to DOZING should occur assertThat(info.ownerName).isEqualTo("FromAlternateBouncerTransitionInteractor") @@ -630,7 +609,7 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { val info = withArgCaptor<TransitionInfo> { - verify(mockTransitionRepository).startTransition(capture(), anyBoolean()) + verify(transitionRepository).startTransition(capture(), anyBoolean()) } // THEN a transition to LOCKSCREEN should occur assertThat(info.ownerName).isEqualTo("FromAlternateBouncerTransitionInteractor") @@ -658,7 +637,7 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { val info = withArgCaptor<TransitionInfo> { - verify(mockTransitionRepository).startTransition(capture(), anyBoolean()) + verify(transitionRepository).startTransition(capture(), anyBoolean()) } // THEN a transition to AOD should occur assertThat(info.ownerName).isEqualTo("FromPrimaryBouncerTransitionInteractor") @@ -686,7 +665,7 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { val info = withArgCaptor<TransitionInfo> { - verify(mockTransitionRepository).startTransition(capture(), anyBoolean()) + verify(transitionRepository).startTransition(capture(), anyBoolean()) } // THEN a transition to DOZING should occur assertThat(info.ownerName).isEqualTo("FromPrimaryBouncerTransitionInteractor") @@ -713,7 +692,7 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { val info = withArgCaptor<TransitionInfo> { - verify(mockTransitionRepository).startTransition(capture(), anyBoolean()) + verify(transitionRepository).startTransition(capture(), anyBoolean()) } // THEN a transition to LOCKSCREEN should occur assertThat(info.ownerName).isEqualTo("FromPrimaryBouncerTransitionInteractor") @@ -744,7 +723,7 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { val info = withArgCaptor<TransitionInfo> { - verify(mockTransitionRepository).startTransition(capture(), anyBoolean()) + verify(transitionRepository).startTransition(capture(), anyBoolean()) } // THEN a transition to GONE should occur assertThat(info.ownerName).isEqualTo("FromOccludedTransitionInteractor") @@ -773,7 +752,7 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { val info = withArgCaptor<TransitionInfo> { - verify(mockTransitionRepository).startTransition(capture(), anyBoolean()) + verify(transitionRepository).startTransition(capture(), anyBoolean()) } // THEN a transition to LOCKSCREEN should occur assertThat(info.ownerName).isEqualTo("FromOccludedTransitionInteractor") @@ -799,7 +778,7 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { val info = withArgCaptor<TransitionInfo> { - verify(mockTransitionRepository).startTransition(capture(), anyBoolean()) + verify(transitionRepository).startTransition(capture(), anyBoolean()) } // THEN a transition to AlternateBouncer should occur assertThat(info.ownerName).isEqualTo("FromOccludedTransitionInteractor") @@ -828,7 +807,7 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { val info = withArgCaptor<TransitionInfo> { - verify(mockTransitionRepository).startTransition(capture(), anyBoolean()) + verify(transitionRepository).startTransition(capture(), anyBoolean()) } // THEN a transition to AlternateBouncer should occur assertThat(info.ownerName).isEqualTo("FromPrimaryBouncerTransitionInteractor") @@ -890,6 +869,6 @@ class KeyguardTransitionScenariosTest : SysuiTestCase() { ) ) runCurrent() - reset(mockTransitionRepository) + reset(transitionRepository) } } |