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

Commit cd2a042a authored by Josh Tsuji's avatar Josh Tsuji Committed by Automerger Merge Worker
Browse files

Merge "Move common From*TransitionInteractor logic into the superclass." into...

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

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23765820



Change-Id: I49eeb41e76d2d245f3af3254762047292df4b65d
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 6e681ecf c82653d6
Loading
Loading
Loading
Loading
+13 −32
Original line number 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.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
+13 −25
Original line number 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.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
        }
    }

+13 −26
Original line number 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.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
        }
    }

+18 −43
Original line number 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.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
        }
    }

+20 −39
Original line number 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.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
Loading