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

Commit f087f94e authored by Matt Pietal's avatar Matt Pietal
Browse files

Transitions: Limit how to LOCKSCREEN can be interrupted

When going from AOD, DOZING -> LOCKSCREEN, it is possible for
isDreaming flag to flip to true for a moment, which can cause a brief
pause in the animation. If the transition is actively running, don't
allow it to be interrupted.

Also fix the flakiness from scenario tests and use a more reliable way
to send transitions

Fixes: 265303901
Fixes: 274799450
Test: atest KeyguardTransitionScenariosTest
Change-Id: Ia8d5dfc8e0d2abeeea1c34b6915a8eb6a3d9bc2c
parent 1620670c
Loading
Loading
Loading
Loading
+15 −8
Original line number Original line Diff line number Diff line
@@ -59,16 +59,23 @@ constructor(
    }
    }


    private fun listenForLockscreenToDreaming() {
    private fun listenForLockscreenToDreaming() {
        val invalidFromStates = setOf(KeyguardState.AOD, KeyguardState.DOZING)
        scope.launch {
        scope.launch {
            keyguardInteractor.isAbleToDream
            keyguardInteractor.isAbleToDream
                .sample(keyguardTransitionInteractor.startedKeyguardTransitionStep, ::Pair)
                .sample(
                .collect { pair ->
                    combine(
                    val (isAbleToDream, lastStartedTransition) = pair
                        keyguardTransitionInteractor.startedKeyguardTransitionStep,
                    if (
                        keyguardTransitionInteractor.finishedKeyguardState,
                        isAbleToDream &&
                        ::Pair
                    ),
                    ::toTriple
                )
                .collect { (isAbleToDream, lastStartedTransition, finishedKeyguardState) ->
                    val isOnLockscreen = finishedKeyguardState == KeyguardState.LOCKSCREEN
                    val isTransitionInterruptible =
                        lastStartedTransition.to == KeyguardState.LOCKSCREEN &&
                        lastStartedTransition.to == KeyguardState.LOCKSCREEN &&
                            lastStartedTransition.from != KeyguardState.AOD
                            !invalidFromStates.contains(lastStartedTransition.from)
                    ) {
                    if (isAbleToDream && (isOnLockscreen || isTransitionInterruptible)) {
                        keyguardTransitionRepository.startTransition(
                        keyguardTransitionRepository.startTransition(
                            TransitionInfo(
                            TransitionInfo(
                                name,
                                name,
+84 −337

File changed.

Preview size limit exceeded, changes collapsed.