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

Commit b7a1853e authored by Matt Pietal's avatar Matt Pietal Committed by Android Build Coastguard Worker
Browse files

Make sure to reset isFoldHandled

A previous commit reset this flag in select circumstances. However,
there are other paths that also need to be covered. Always reset
isFoldHandled every single time the device has been folded and the
screen has turned on. This should fully prevent errant calls to
showAodUI(), which forces keyguard to show over any other screen.

Paths that could've produced the issue involve:
1. Unfold and unlock
2. Fold the device, it should go to AOD
3. Cover the prox sensor (as if putting in purse/pocket) and let
screen timeout until black.
4. Wait a few moments to let the device really sleep
5. Uncover sensor and unlock with Side FPS immediately

Test: atest FoldAodAnimationsControllerTest
Fixes: 273681779
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:dd564d207d24e83a5f724f632bf80e5ce6764046)
Merged-In: I3260125fa545494c28e52ecf02825704ffbad295
Change-Id: I3260125fa545494c28e52ecf02825704ffbad295
parent 1f76f69f
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -150,10 +150,6 @@ constructor(
                pendingScrimReadyCallback = onReady
            }
        } else if (isFolded && !isFoldHandled && alwaysOnEnabled && isDozing) {
            // Screen turning on for the first time after folding and we are already dozing
            // We should play the folding to AOD animation
            isFoldHandled = true

            setAnimationState(playing = true)
            centralSurfaces.notificationPanelViewController.prepareFoldToAodAnimation()

@@ -169,6 +165,13 @@ constructor(
            // No animation, call ready callback immediately
            onReady.run()
        }

        if (isFolded) {
            // Any time the screen turns on, this state needs to be reset if the device has been
            // folded. Reaching this line implies AOD has been shown in one way or another,
            // if enabled
            isFoldHandled = true
        }
    }

    /** Called when keyguard scrim opaque changed */
+25 −0
Original line number Diff line number Diff line
@@ -197,6 +197,31 @@ class FoldAodAnimationControllerTest : SysuiTestCase() {
            job.cancel()
        }

    @Test
    fun onFolded_onScreenTurningOnWithoutDozingThenWithDozing_doesNotLogLatency() =
        runBlocking(IMMEDIATE) {
            val job = underTest.listenForDozing(this)
            keyguardRepository.setDozing(false)
            setAodEnabled(enabled = true)

            yield()

            fold()
            simulateScreenTurningOn()
            reset(latencyTracker)

            // Now enable dozing and trigger a second run through the aod animation code. It should
            // not rerun the animation
            keyguardRepository.setDozing(true)
            yield()
            simulateScreenTurningOn()

            verify(latencyTracker, never()).onActionStart(any())
            verify(latencyTracker, never()).onActionEnd(any())

            job.cancel()
        }

    @Test
    fun onFolded_animationCancelled_doesNotLogLatency() =
        runBlocking(IMMEDIATE) {