Merge "Move common From*TransitionInteractor logic into the superclass." into udc-qpr-dev

This commit is contained in:
Josh Tsuji
2023-06-26 15:00:14 +00:00
committed by Android (Google) Code Review
11 changed files with 301 additions and 459 deletions

View File

@@ -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

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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 }

View File

@@ -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?
}

View File

@@ -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()
fromAodTransitionInteractor =
FromAodTransitionInteractor(
scope = testScope,
keyguardInteractor = createKeyguardInteractor(),
keyguardTransitionRepository = mockTransitionRepository,
keyguardTransitionInteractor =
KeyguardTransitionInteractor(transitionRepository, testScope.backgroundScope),
)
fromAodTransitionInteractor.start()
fromGoneTransitionInteractor =
FromGoneTransitionInteractor(
scope = testScope,
keyguardInteractor = createKeyguardInteractor(),
keyguardTransitionRepository = mockTransitionRepository,
keyguardTransitionInteractor =
KeyguardTransitionInteractor(transitionRepository, testScope.backgroundScope),
)
fromGoneTransitionInteractor.start()
fromDozingTransitionInteractor =
FromDozingTransitionInteractor(
scope = testScope,
keyguardInteractor = createKeyguardInteractor(),
keyguardTransitionRepository = mockTransitionRepository,
keyguardTransitionInteractor =
KeyguardTransitionInteractor(transitionRepository, testScope.backgroundScope),
)
fromDozingTransitionInteractor.start()
fromOccludedTransitionInteractor =
FromOccludedTransitionInteractor(
scope = testScope,
keyguardInteractor = createKeyguardInteractor(),
keyguardTransitionRepository = mockTransitionRepository,
keyguardTransitionInteractor =
KeyguardTransitionInteractor(transitionRepository, testScope.backgroundScope),
)
fromOccludedTransitionInteractor.start()
fromAlternateBouncerTransitionInteractor =
FromAlternateBouncerTransitionInteractor(
scope = testScope,
keyguardInteractor = createKeyguardInteractor(),
keyguardTransitionRepository = mockTransitionRepository,
keyguardTransitionInteractor =
KeyguardTransitionInteractor(transitionRepository, testScope.backgroundScope),
)
fromAlternateBouncerTransitionInteractor.start()
fromPrimaryBouncerTransitionInteractor =
FromPrimaryBouncerTransitionInteractor(
scope = testScope,
keyguardInteractor = createKeyguardInteractor(),
keyguardTransitionRepository = mockTransitionRepository,
keyguardTransitionInteractor =
KeyguardTransitionInteractor(transitionRepository, testScope.backgroundScope),
transitionRepository = transitionRepository,
transitionInteractor = transitionInteractor,
keyguardSecurityModel = keyguardSecurityModel,
)
fromPrimaryBouncerTransitionInteractor.start()
).apply { start() }
fromDreamingTransitionInteractor = FromDreamingTransitionInteractor(
scope = testScope,
keyguardInteractor = createKeyguardInteractor(),
transitionRepository = transitionRepository,
transitionInteractor = transitionInteractor,
).apply { start() }
fromAodTransitionInteractor = FromAodTransitionInteractor(
scope = testScope,
keyguardInteractor = createKeyguardInteractor(),
transitionRepository = transitionRepository,
transitionInteractor = transitionInteractor,
).apply { start() }
fromGoneTransitionInteractor = FromGoneTransitionInteractor(
scope = testScope,
keyguardInteractor = createKeyguardInteractor(),
transitionRepository = transitionRepository,
transitionInteractor = transitionInteractor,
).apply { start() }
fromDozingTransitionInteractor = FromDozingTransitionInteractor(
scope = testScope,
keyguardInteractor = createKeyguardInteractor(),
transitionRepository = transitionRepository,
transitionInteractor = transitionInteractor,
).apply { start() }
fromOccludedTransitionInteractor = FromOccludedTransitionInteractor(
scope = testScope,
keyguardInteractor = createKeyguardInteractor(),
transitionRepository = transitionRepository,
transitionInteractor = transitionInteractor,
).apply { start() }
fromAlternateBouncerTransitionInteractor = FromAlternateBouncerTransitionInteractor(
scope = testScope,
keyguardInteractor = createKeyguardInteractor(),
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)
}
}