Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9c9d9518 authored by Josh Tsuji's avatar Josh Tsuji
Browse files

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
parent f41f026b
Loading
Loading
Loading
Loading
+13 −32
Original line number Original line Diff line number Diff line
@@ -22,7 +22,6 @@ import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository
import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository
import com.android.systemui.keyguard.shared.model.KeyguardState
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.keyguard.shared.model.WakefulnessState
import com.android.systemui.util.kotlin.Utils.Companion.toQuad
import com.android.systemui.util.kotlin.Utils.Companion.toQuad
import com.android.systemui.util.kotlin.Utils.Companion.toQuint
import com.android.systemui.util.kotlin.Utils.Companion.toQuint
@@ -38,11 +37,14 @@ import kotlinx.coroutines.launch
class FromAlternateBouncerTransitionInteractor
class FromAlternateBouncerTransitionInteractor
@Inject
@Inject
constructor(
constructor(
    override val transitionRepository: KeyguardTransitionRepository,
    override val transitionInteractor: KeyguardTransitionInteractor,
    @Application private val scope: CoroutineScope,
    @Application private val scope: CoroutineScope,
    private val keyguardInteractor: KeyguardInteractor,
    private val keyguardInteractor: KeyguardInteractor,
    private val keyguardTransitionRepository: KeyguardTransitionRepository,
) :
    private val keyguardTransitionInteractor: KeyguardTransitionInteractor,
    TransitionInteractor(
) : TransitionInteractor(FromAlternateBouncerTransitionInteractor::class.simpleName!!) {
        fromState = KeyguardState.ALTERNATE_BOUNCER,
    ) {


    override fun start() {
    override fun start() {
        listenForAlternateBouncerToGone()
        listenForAlternateBouncerToGone()
@@ -60,7 +62,7 @@ constructor(
                .sample(
                .sample(
                    combine(
                    combine(
                        keyguardInteractor.primaryBouncerShowing,
                        keyguardInteractor.primaryBouncerShowing,
                        keyguardTransitionInteractor.startedKeyguardTransitionStep,
                        transitionInteractor.startedKeyguardTransitionStep,
                        keyguardInteractor.wakefulnessModel,
                        keyguardInteractor.wakefulnessModel,
                        keyguardInteractor.isAodAvailable,
                        keyguardInteractor.isAodAvailable,
                        ::toQuad
                        ::toQuad
@@ -92,14 +94,7 @@ constructor(
                            } else {
                            } else {
                                KeyguardState.LOCKSCREEN
                                KeyguardState.LOCKSCREEN
                            }
                            }
                        keyguardTransitionRepository.startTransition(
                        startTransitionTo(to)
                            TransitionInfo(
                                ownerName = name,
                                from = KeyguardState.ALTERNATE_BOUNCER,
                                to = to,
                                animator = getAnimator(),
                            )
                        )
                    }
                    }
                }
                }
        }
        }
@@ -108,17 +103,10 @@ constructor(
    private fun listenForAlternateBouncerToGone() {
    private fun listenForAlternateBouncerToGone() {
        scope.launch {
        scope.launch {
            keyguardInteractor.isKeyguardGoingAway
            keyguardInteractor.isKeyguardGoingAway
                .sample(keyguardTransitionInteractor.finishedKeyguardState, ::Pair)
                .sample(transitionInteractor.finishedKeyguardState, ::Pair)
                .collect { (isKeyguardGoingAway, keyguardState) ->
                .collect { (isKeyguardGoingAway, keyguardState) ->
                    if (isKeyguardGoingAway && keyguardState == KeyguardState.ALTERNATE_BOUNCER) {
                    if (isKeyguardGoingAway && keyguardState == KeyguardState.ALTERNATE_BOUNCER) {
                        keyguardTransitionRepository.startTransition(
                        startTransitionTo(KeyguardState.GONE)
                            TransitionInfo(
                                ownerName = name,
                                from = KeyguardState.ALTERNATE_BOUNCER,
                                to = KeyguardState.GONE,
                                animator = getAnimator(),
                            )
                        )
                    }
                    }
                }
                }
        }
        }
@@ -127,26 +115,19 @@ constructor(
    private fun listenForAlternateBouncerToPrimaryBouncer() {
    private fun listenForAlternateBouncerToPrimaryBouncer() {
        scope.launch {
        scope.launch {
            keyguardInteractor.primaryBouncerShowing
            keyguardInteractor.primaryBouncerShowing
                .sample(keyguardTransitionInteractor.startedKeyguardTransitionStep, ::Pair)
                .sample(transitionInteractor.startedKeyguardTransitionStep, ::Pair)
                .collect { (isPrimaryBouncerShowing, startedKeyguardState) ->
                .collect { (isPrimaryBouncerShowing, startedKeyguardState) ->
                    if (
                    if (
                        isPrimaryBouncerShowing &&
                        isPrimaryBouncerShowing &&
                            startedKeyguardState.to == KeyguardState.ALTERNATE_BOUNCER
                            startedKeyguardState.to == KeyguardState.ALTERNATE_BOUNCER
                    ) {
                    ) {
                        keyguardTransitionRepository.startTransition(
                        startTransitionTo(KeyguardState.PRIMARY_BOUNCER)
                            TransitionInfo(
                                ownerName = name,
                                from = KeyguardState.ALTERNATE_BOUNCER,
                                to = KeyguardState.PRIMARY_BOUNCER,
                                animator = getAnimator(),
                            )
                        )
                    }
                    }
                }
                }
        }
        }
    }
    }


    private fun getAnimator(): ValueAnimator {
    override fun getDefaultAnimatorForTransitionsToState(toState: KeyguardState): ValueAnimator {
        return ValueAnimator().apply {
        return ValueAnimator().apply {
            interpolator = Interpolators.LINEAR
            interpolator = Interpolators.LINEAR
            duration = TRANSITION_DURATION_MS
            duration = TRANSITION_DURATION_MS
+13 −25
Original line number Original line Diff line number Diff line
@@ -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.BiometricUnlockModel.Companion.isWakeAndUnlock
import com.android.systemui.keyguard.shared.model.DozeStateModel
import com.android.systemui.keyguard.shared.model.DozeStateModel
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.TransitionInfo
import com.android.systemui.util.kotlin.sample
import com.android.systemui.util.kotlin.sample
import javax.inject.Inject
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.CoroutineScope
@@ -34,11 +33,14 @@ import kotlinx.coroutines.launch
class FromAodTransitionInteractor
class FromAodTransitionInteractor
@Inject
@Inject
constructor(
constructor(
    override val transitionRepository: KeyguardTransitionRepository,
    override val transitionInteractor: KeyguardTransitionInteractor,
    @Application private val scope: CoroutineScope,
    @Application private val scope: CoroutineScope,
    private val keyguardInteractor: KeyguardInteractor,
    private val keyguardInteractor: KeyguardInteractor,
    private val keyguardTransitionRepository: KeyguardTransitionRepository,
) :
    private val keyguardTransitionInteractor: KeyguardTransitionInteractor,
    TransitionInteractor(
) : TransitionInteractor(FromAodTransitionInteractor::class.simpleName!!) {
        fromState = KeyguardState.AOD,
    ) {


    override fun start() {
    override fun start() {
        listenForAodToLockscreen()
        listenForAodToLockscreen()
@@ -49,18 +51,11 @@ constructor(
        scope.launch {
        scope.launch {
            keyguardInteractor
            keyguardInteractor
                .dozeTransitionTo(DozeStateModel.FINISH)
                .dozeTransitionTo(DozeStateModel.FINISH)
                .sample(keyguardTransitionInteractor.startedKeyguardTransitionStep, ::Pair)
                .sample(transitionInteractor.startedKeyguardTransitionStep, ::Pair)
                .collect { pair ->
                .collect { pair ->
                    val (dozeToAod, lastStartedStep) = pair
                    val (dozeToAod, lastStartedStep) = pair
                    if (lastStartedStep.to == KeyguardState.AOD) {
                    if (lastStartedStep.to == KeyguardState.AOD) {
                        keyguardTransitionRepository.startTransition(
                        startTransitionTo(KeyguardState.LOCKSCREEN)
                            TransitionInfo(
                                name,
                                KeyguardState.AOD,
                                KeyguardState.LOCKSCREEN,
                                getAnimator(),
                            )
                        )
                    }
                    }
                }
                }
        }
        }
@@ -69,29 +64,22 @@ constructor(
    private fun listenForAodToGone() {
    private fun listenForAodToGone() {
        scope.launch {
        scope.launch {
            keyguardInteractor.biometricUnlockState
            keyguardInteractor.biometricUnlockState
                .sample(keyguardTransitionInteractor.finishedKeyguardState, ::Pair)
                .sample(transitionInteractor.finishedKeyguardState, ::Pair)
                .collect { pair ->
                .collect { pair ->
                    val (biometricUnlockState, keyguardState) = pair
                    val (biometricUnlockState, keyguardState) = pair
                    if (
                    if (
                        keyguardState == KeyguardState.AOD && isWakeAndUnlock(biometricUnlockState)
                        keyguardState == KeyguardState.AOD && isWakeAndUnlock(biometricUnlockState)
                    ) {
                    ) {
                        keyguardTransitionRepository.startTransition(
                        startTransitionTo(KeyguardState.GONE)
                            TransitionInfo(
                                name,
                                KeyguardState.AOD,
                                KeyguardState.GONE,
                                getAnimator(),
                            )
                        )
                    }
                    }
                }
                }
        }
        }
    }
    }


    private fun getAnimator(): ValueAnimator {
    override fun getDefaultAnimatorForTransitionsToState(toState: KeyguardState): ValueAnimator {
        return ValueAnimator().apply {
        return ValueAnimator().apply {
            setInterpolator(Interpolators.LINEAR)
            interpolator = Interpolators.LINEAR
            setDuration(TRANSITION_DURATION_MS)
            duration = TRANSITION_DURATION_MS
        }
        }
    }
    }


+13 −26
Original line number Original line Diff line number Diff line
@@ -23,10 +23,8 @@ import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository
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.BiometricUnlockModel.Companion.isWakeAndUnlock
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.TransitionInfo
import com.android.systemui.util.kotlin.sample
import com.android.systemui.util.kotlin.sample
import javax.inject.Inject
import javax.inject.Inject
import kotlin.time.Duration
import kotlin.time.Duration.Companion.milliseconds
import kotlin.time.Duration.Companion.milliseconds
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.launch
@@ -35,11 +33,14 @@ import kotlinx.coroutines.launch
class FromDozingTransitionInteractor
class FromDozingTransitionInteractor
@Inject
@Inject
constructor(
constructor(
    override val transitionRepository: KeyguardTransitionRepository,
    override val transitionInteractor: KeyguardTransitionInteractor,
    @Application private val scope: CoroutineScope,
    @Application private val scope: CoroutineScope,
    private val keyguardInteractor: KeyguardInteractor,
    private val keyguardInteractor: KeyguardInteractor,
    private val keyguardTransitionRepository: KeyguardTransitionRepository,
) :
    private val keyguardTransitionInteractor: KeyguardTransitionInteractor,
    TransitionInteractor(
) : TransitionInteractor(FromDozingTransitionInteractor::class.simpleName!!) {
        fromState = KeyguardState.DOZING,
    ) {


    override fun start() {
    override fun start() {
        listenForDozingToLockscreen()
        listenForDozingToLockscreen()
@@ -49,20 +50,13 @@ constructor(
    private fun listenForDozingToLockscreen() {
    private fun listenForDozingToLockscreen() {
        scope.launch {
        scope.launch {
            keyguardInteractor.wakefulnessModel
            keyguardInteractor.wakefulnessModel
                .sample(keyguardTransitionInteractor.startedKeyguardTransitionStep, ::Pair)
                .sample(transitionInteractor.startedKeyguardTransitionStep, ::Pair)
                .collect { (wakefulnessModel, lastStartedTransition) ->
                .collect { (wakefulnessModel, lastStartedTransition) ->
                    if (
                    if (
                        wakefulnessModel.isStartingToWakeOrAwake() &&
                        wakefulnessModel.isStartingToWakeOrAwake() &&
                            lastStartedTransition.to == KeyguardState.DOZING
                            lastStartedTransition.to == KeyguardState.DOZING
                    ) {
                    ) {
                        keyguardTransitionRepository.startTransition(
                        startTransitionTo(KeyguardState.LOCKSCREEN)
                            TransitionInfo(
                                name,
                                KeyguardState.DOZING,
                                KeyguardState.LOCKSCREEN,
                                getAnimator(),
                            )
                        )
                    }
                    }
                }
                }
        }
        }
@@ -71,29 +65,22 @@ constructor(
    private fun listenForDozingToGone() {
    private fun listenForDozingToGone() {
        scope.launch {
        scope.launch {
            keyguardInteractor.biometricUnlockState
            keyguardInteractor.biometricUnlockState
                .sample(keyguardTransitionInteractor.startedKeyguardTransitionStep, ::Pair)
                .sample(transitionInteractor.startedKeyguardTransitionStep, ::Pair)
                .collect { (biometricUnlockState, lastStartedTransition) ->
                .collect { (biometricUnlockState, lastStartedTransition) ->
                    if (
                    if (
                        lastStartedTransition.to == KeyguardState.DOZING &&
                        lastStartedTransition.to == KeyguardState.DOZING &&
                            isWakeAndUnlock(biometricUnlockState)
                            isWakeAndUnlock(biometricUnlockState)
                    ) {
                    ) {
                        keyguardTransitionRepository.startTransition(
                        startTransitionTo(KeyguardState.GONE)
                            TransitionInfo(
                                name,
                                KeyguardState.DOZING,
                                KeyguardState.GONE,
                                getAnimator(),
                            )
                        )
                    }
                    }
                }
                }
        }
        }
    }
    }


    private fun getAnimator(duration: Duration = DEFAULT_DURATION): ValueAnimator {
    override fun getDefaultAnimatorForTransitionsToState(toState: KeyguardState): ValueAnimator {
        return ValueAnimator().apply {
        return ValueAnimator().apply {
            setInterpolator(Interpolators.LINEAR)
            interpolator = Interpolators.LINEAR
            setDuration(duration.inWholeMilliseconds)
            duration = DEFAULT_DURATION.inWholeMilliseconds
        }
        }
    }
    }


+18 −43
Original line number Original line Diff line number Diff line
@@ -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.BiometricUnlockModel
import com.android.systemui.keyguard.shared.model.DozeStateModel
import com.android.systemui.keyguard.shared.model.DozeStateModel
import com.android.systemui.keyguard.shared.model.KeyguardState
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.Utils.Companion.toTriple
import com.android.systemui.util.kotlin.sample
import com.android.systemui.util.kotlin.sample
import javax.inject.Inject
import javax.inject.Inject
import kotlin.time.Duration
import kotlin.time.Duration.Companion.milliseconds
import kotlin.time.Duration.Companion.milliseconds
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.delay
@@ -40,11 +38,14 @@ import kotlinx.coroutines.launch
class FromDreamingTransitionInteractor
class FromDreamingTransitionInteractor
@Inject
@Inject
constructor(
constructor(
    override val transitionRepository: KeyguardTransitionRepository,
    override val transitionInteractor: KeyguardTransitionInteractor,
    @Application private val scope: CoroutineScope,
    @Application private val scope: CoroutineScope,
    private val keyguardInteractor: KeyguardInteractor,
    private val keyguardInteractor: KeyguardInteractor,
    private val keyguardTransitionRepository: KeyguardTransitionRepository,
) :
    private val keyguardTransitionInteractor: KeyguardTransitionInteractor,
    TransitionInteractor(
) : TransitionInteractor(FromDreamingTransitionInteractor::class.simpleName!!) {
        fromState = KeyguardState.DREAMING,
    ) {


    override fun start() {
    override fun start() {
        listenForDreamingToOccluded()
        listenForDreamingToOccluded()
@@ -54,15 +55,8 @@ constructor(


    fun startToLockscreenTransition() {
    fun startToLockscreenTransition() {
        scope.launch {
        scope.launch {
            if (keyguardTransitionInteractor.startedKeyguardState.value == KeyguardState.DREAMING) {
            if (transitionInteractor.startedKeyguardState.value == KeyguardState.DREAMING) {
                keyguardTransitionRepository.startTransition(
                startTransitionTo(KeyguardState.LOCKSCREEN)
                    TransitionInfo(
                        name,
                        KeyguardState.DREAMING,
                        KeyguardState.LOCKSCREEN,
                        getAnimator(TO_LOCKSCREEN_DURATION),
                    )
                )
            }
            }
        }
        }
    }
    }
@@ -76,7 +70,7 @@ constructor(
                .sample(
                .sample(
                    combine(
                    combine(
                        keyguardInteractor.isKeyguardOccluded,
                        keyguardInteractor.isKeyguardOccluded,
                        keyguardTransitionInteractor.startedKeyguardTransitionStep,
                        transitionInteractor.startedKeyguardTransitionStep,
                        ::Pair,
                        ::Pair,
                    ),
                    ),
                    ::toTriple
                    ::toTriple
@@ -92,14 +86,7 @@ constructor(
                        // action. There's no great signal to determine when the dream is ending
                        // 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
                        // and a transition to OCCLUDED is beginning directly. For now, the solution
                        // is DREAMING->LOCKSCREEN->OCCLUDED
                        // is DREAMING->LOCKSCREEN->OCCLUDED
                        keyguardTransitionRepository.startTransition(
                        startTransitionTo(KeyguardState.OCCLUDED)
                            TransitionInfo(
                                name,
                                lastStartedTransition.to,
                                KeyguardState.OCCLUDED,
                                getAnimator(),
                            )
                        )
                    }
                    }
                }
                }
        }
        }
@@ -109,14 +96,7 @@ constructor(
        scope.launch {
        scope.launch {
            keyguardInteractor.biometricUnlockState.collect { biometricUnlockState ->
            keyguardInteractor.biometricUnlockState.collect { biometricUnlockState ->
                if (biometricUnlockState == BiometricUnlockModel.WAKE_AND_UNLOCK_FROM_DREAM) {
                if (biometricUnlockState == BiometricUnlockModel.WAKE_AND_UNLOCK_FROM_DREAM) {
                    keyguardTransitionRepository.startTransition(
                    startTransitionTo(KeyguardState.GONE)
                        TransitionInfo(
                            name,
                            KeyguardState.DREAMING,
                            KeyguardState.GONE,
                            getAnimator(),
                        )
                    )
                }
                }
            }
            }
        }
        }
@@ -126,7 +106,7 @@ constructor(
        scope.launch {
        scope.launch {
            combine(
            combine(
                    keyguardInteractor.dozeTransitionModel,
                    keyguardInteractor.dozeTransitionModel,
                    keyguardTransitionInteractor.finishedKeyguardState,
                    transitionInteractor.finishedKeyguardState,
                    ::Pair
                    ::Pair
                )
                )
                .collect { (dozeTransitionModel, keyguardState) ->
                .collect { (dozeTransitionModel, keyguardState) ->
@@ -134,23 +114,18 @@ constructor(
                        dozeTransitionModel.to == DozeStateModel.DOZE &&
                        dozeTransitionModel.to == DozeStateModel.DOZE &&
                            keyguardState == KeyguardState.DREAMING
                            keyguardState == KeyguardState.DREAMING
                    ) {
                    ) {
                        keyguardTransitionRepository.startTransition(
                        startTransitionTo(KeyguardState.DOZING)
                            TransitionInfo(
                                name,
                                KeyguardState.DREAMING,
                                KeyguardState.DOZING,
                                getAnimator(),
                            )
                        )
                    }
                    }
                }
                }
        }
        }
    }
    }


    private fun getAnimator(duration: Duration = DEFAULT_DURATION): ValueAnimator {
    override fun getDefaultAnimatorForTransitionsToState(toState: KeyguardState): ValueAnimator {
        return ValueAnimator().apply {
        return ValueAnimator().apply {
            setInterpolator(Interpolators.LINEAR)
            interpolator = Interpolators.LINEAR
            setDuration(duration.inWholeMilliseconds)
            duration =
                if (toState == KeyguardState.LOCKSCREEN) TO_LOCKSCREEN_DURATION.inWholeMilliseconds
                else DEFAULT_DURATION.inWholeMilliseconds
        }
        }
    }
    }


+20 −39
Original line number Original line Diff line number Diff line
@@ -22,12 +22,10 @@ import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository
import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository
import com.android.systemui.keyguard.shared.model.KeyguardState
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.keyguard.shared.model.WakefulnessState
import com.android.systemui.util.kotlin.Utils.Companion.toTriple
import com.android.systemui.util.kotlin.Utils.Companion.toTriple
import com.android.systemui.util.kotlin.sample
import com.android.systemui.util.kotlin.sample
import javax.inject.Inject
import javax.inject.Inject
import kotlin.time.Duration
import kotlin.time.Duration.Companion.milliseconds
import kotlin.time.Duration.Companion.milliseconds
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.combine
@@ -37,11 +35,14 @@ import kotlinx.coroutines.launch
class FromGoneTransitionInteractor
class FromGoneTransitionInteractor
@Inject
@Inject
constructor(
constructor(
    override val transitionRepository: KeyguardTransitionRepository,
    override val transitionInteractor: KeyguardTransitionInteractor,
    @Application private val scope: CoroutineScope,
    @Application private val scope: CoroutineScope,
    private val keyguardInteractor: KeyguardInteractor,
    private val keyguardInteractor: KeyguardInteractor,
    private val keyguardTransitionRepository: KeyguardTransitionRepository,
) :
    private val keyguardTransitionInteractor: KeyguardTransitionInteractor,
    TransitionInteractor(
) : TransitionInteractor(FromGoneTransitionInteractor::class.simpleName!!) {
        fromState = KeyguardState.GONE,
    ) {


    override fun start() {
    override fun start() {
        listenForGoneToAodOrDozing()
        listenForGoneToAodOrDozing()
@@ -53,17 +54,10 @@ constructor(
    private fun listenForGoneToLockscreen() {
    private fun listenForGoneToLockscreen() {
        scope.launch {
        scope.launch {
            keyguardInteractor.isKeyguardShowing
            keyguardInteractor.isKeyguardShowing
                .sample(keyguardTransitionInteractor.startedKeyguardTransitionStep, ::Pair)
                .sample(transitionInteractor.startedKeyguardTransitionStep, ::Pair)
                .collect { (isKeyguardShowing, lastStartedStep) ->
                .collect { (isKeyguardShowing, lastStartedStep) ->
                    if (isKeyguardShowing && lastStartedStep.to == KeyguardState.GONE) {
                    if (isKeyguardShowing && lastStartedStep.to == KeyguardState.GONE) {
                        keyguardTransitionRepository.startTransition(
                        startTransitionTo(KeyguardState.LOCKSCREEN)
                            TransitionInfo(
                                name,
                                KeyguardState.GONE,
                                KeyguardState.LOCKSCREEN,
                                getAnimator(),
                            )
                        )
                    }
                    }
                }
                }
        }
        }
@@ -72,17 +66,10 @@ constructor(
    private fun listenForGoneToDreaming() {
    private fun listenForGoneToDreaming() {
        scope.launch {
        scope.launch {
            keyguardInteractor.isAbleToDream
            keyguardInteractor.isAbleToDream
                .sample(keyguardTransitionInteractor.startedKeyguardTransitionStep, ::Pair)
                .sample(transitionInteractor.startedKeyguardTransitionStep, ::Pair)
                .collect { (isAbleToDream, lastStartedStep) ->
                .collect { (isAbleToDream, lastStartedStep) ->
                    if (isAbleToDream && lastStartedStep.to == KeyguardState.GONE) {
                    if (isAbleToDream && lastStartedStep.to == KeyguardState.GONE) {
                        keyguardTransitionRepository.startTransition(
                        startTransitionTo(KeyguardState.DREAMING)
                            TransitionInfo(
                                name,
                                KeyguardState.GONE,
                                KeyguardState.DREAMING,
                                getAnimator(TO_DREAMING_DURATION),
                            )
                        )
                    }
                    }
                }
                }
        }
        }
@@ -93,7 +80,7 @@ constructor(
            keyguardInteractor.wakefulnessModel
            keyguardInteractor.wakefulnessModel
                .sample(
                .sample(
                    combine(
                    combine(
                        keyguardTransitionInteractor.startedKeyguardTransitionStep,
                        transitionInteractor.startedKeyguardTransitionStep,
                        keyguardInteractor.isAodAvailable,
                        keyguardInteractor.isAodAvailable,
                        ::Pair
                        ::Pair
                    ),
                    ),
@@ -104,30 +91,24 @@ constructor(
                        lastStartedStep.to == KeyguardState.GONE &&
                        lastStartedStep.to == KeyguardState.GONE &&
                            wakefulnessState.state == WakefulnessState.STARTING_TO_SLEEP
                            wakefulnessState.state == WakefulnessState.STARTING_TO_SLEEP
                    ) {
                    ) {
                        keyguardTransitionRepository.startTransition(
                        startTransitionTo(
                            TransitionInfo(
                            if (isAodAvailable) KeyguardState.AOD else KeyguardState.DOZING
                                name,
                                KeyguardState.GONE,
                                if (isAodAvailable) {
                                    KeyguardState.AOD
                                } else {
                                    KeyguardState.DOZING
                                },
                                getAnimator(),
                            )
                        )
                        )
                    }
                    }
                }
                }
        }
        }
    }
    }


    private fun getAnimator(duration: Duration = DEFAULT_DURATION): ValueAnimator {
    override fun getDefaultAnimatorForTransitionsToState(toState: KeyguardState): ValueAnimator {
        return ValueAnimator().apply {
        return ValueAnimator().apply {
            setInterpolator(Interpolators.LINEAR)
            interpolator = Interpolators.LINEAR
            setDuration(duration.inWholeMilliseconds)
            duration =
                when (toState) {
                    KeyguardState.DREAMING -> TO_DREAMING_DURATION
                    else -> DEFAULT_DURATION
                }.inWholeMilliseconds
        }
        }
    }
    }

    companion object {
    companion object {
        private val DEFAULT_DURATION = 500.milliseconds
        private val DEFAULT_DURATION = 500.milliseconds
        val TO_DREAMING_DURATION = 933.milliseconds
        val TO_DREAMING_DURATION = 933.milliseconds
Loading