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

Commit 3a982ee1 authored by Josh Tsuji's avatar Josh Tsuji
Browse files

Don't return true for controlling screen off once we've already returned false for this sleep.

This was resulting in a weird partial screen off animation, as it started returning true part of the way through the screen off.

Also, check whether the panel is expanded OR in the process of expanding, so that the animation is disabled in both cases.

Fixes: 192477275
Test: screen off w/ shade expanded, also in landscape
Change-Id: I2939c8f7734db09f99fed6a31939d3d5c15812f3
parent a52ca6db
Loading
Loading
Loading
Loading
+25 −1
Original line number Diff line number Diff line
@@ -56,6 +56,13 @@ class UnlockedScreenOffAnimationController @Inject constructor(
    private var lightRevealAnimationPlaying = false
    private var aodUiAnimationPlaying = false

    /**
     * The result of our decision whether to play the screen off animation in
     * [onStartedGoingToSleep], or null if we haven't made that decision yet or aren't going to
     * sleep.
     */
    private var decidedToAnimateGoingToSleep: Boolean? = null

    private val lightRevealAnimator = ValueAnimator.ofFloat(1f, 0f).apply {
        duration = LIGHT_REVEAL_ANIMATION_DURATION
        interpolator = Interpolators.LINEAR
@@ -120,11 +127,17 @@ class UnlockedScreenOffAnimationController @Inject constructor(

                    // Run the callback given to us by the KeyguardVisibilityHelper.
                    after.run()

                    // Done going to sleep, reset this flag.
                    decidedToAnimateGoingToSleep = null
                }
                .start()
    }

    override fun onStartedWakingUp() {
        // Waking up, so reset this flag.
        decidedToAnimateGoingToSleep = null

        lightRevealAnimator.cancel()
        handler.removeCallbacksAndMessages(null)
    }
@@ -148,6 +161,8 @@ class UnlockedScreenOffAnimationController @Inject constructor(

    override fun onStartedGoingToSleep() {
        if (dozeParameters.get().shouldControlUnlockedScreenOff()) {
            decidedToAnimateGoingToSleep = true

            lightRevealAnimationPlaying = true
            lightRevealAnimator.start()

@@ -157,6 +172,8 @@ class UnlockedScreenOffAnimationController @Inject constructor(
                // Show AOD. That'll cause the KeyguardVisibilityHelper to call #animateInKeyguard.
                statusBar.notificationPanelViewController.showAodUi()
            }, ANIMATE_IN_KEYGUARD_DELAY)
        } else {
            decidedToAnimateGoingToSleep = false
        }
    }

@@ -165,6 +182,12 @@ class UnlockedScreenOffAnimationController @Inject constructor(
     * on the current state of the device.
     */
    fun shouldPlayUnlockedScreenOffAnimation(): Boolean {
        // If we explicitly already decided not to play the screen off animation, then never change
        // our mind.
        if (decidedToAnimateGoingToSleep == false) {
            return false
        }

        if (!dozeParameters.get().canControlUnlockedScreenOff()) {
            return false
        }
@@ -178,7 +201,8 @@ class UnlockedScreenOffAnimationController @Inject constructor(
        // already expanded and showing notifications/QS, the animation looks really messy. For now,
        // disable it if the notification panel is expanded.
        if (!this::statusBar.isInitialized ||
                statusBar.notificationPanelViewController.isFullyExpanded) {
                statusBar.notificationPanelViewController.isFullyExpanded ||
                statusBar.notificationPanelViewController.isExpanding) {
            return false
        }