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

Commit 4474f54f authored by Jorim Jaggi's avatar Jorim Jaggi
Browse files

Fix empty keyguard for once and all

When a Keyguard exit animation was played while the screen was
turning off, the window animation was cancelled. However, since
we didn't reset mPostKeyguardExitAnimation, we thought we need to
apply it again, with a start time of Long.MIN_VALUE. For some reason,
this animation never ended, and it was stuck at the beginning. Thus,
the alpha was 0 and the user just saw a blank wallpaper.

In addition, we also forbid starting the Keyguard exit animation when
the screen is about to turn off.

Bug: 21124013
Change-Id: Ief022c5bd758a9fedcaab3fe9fc385fa4234b37f
parent c1541571
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -253,6 +253,7 @@ public class KeyguardViewMediator extends SystemUI {
    private KeyguardUpdateMonitor mUpdateMonitor;

    private boolean mDeviceInteractive;
    private boolean mGoingToSleep;

    // last known state of the cellular connection
    private String mPhoneState = TelephonyManager.EXTRA_STATE_IDLE;
@@ -639,6 +640,7 @@ public class KeyguardViewMediator extends SystemUI {
        if (DEBUG) Log.d(TAG, "onStartedGoingToSleep(" + why + ")");
        synchronized (this) {
            mDeviceInteractive = false;
            mGoingToSleep = true;

            // Lock immediately based on setting if secure (user has a pin/pattern/password).
            // This also "locks" the device when not secure to provide easy access to the
@@ -678,6 +680,7 @@ public class KeyguardViewMediator extends SystemUI {
        if (DEBUG) Log.d(TAG, "onFinishedGoingToSleep(" + why + ")");
        synchronized (this) {
            mDeviceInteractive = false;
            mGoingToSleep = false;

            resetKeyguardDonePendingLocked();
            mHideAnimationRun = false;
@@ -1239,6 +1242,10 @@ public class KeyguardViewMediator extends SystemUI {
        }
        mUpdateMonitor.clearFingerprintRecognized();

        if (mGoingToSleep) {
            Log.i(TAG, "Device is going to sleep, aborting keyguardDone");
            return;
        }
        if (mExitSecureCallback != null) {
            try {
                mExitSecureCallback.onKeyguardExitResult(authenticated);
+2 −2
Original line number Diff line number Diff line
@@ -349,6 +349,7 @@ public class WindowAnimator {
                                "Now policy hidden: " + win);
                    } else {
                        boolean applyExistingExitAnimation = mPostKeyguardExitAnimation != null
                                && !mPostKeyguardExitAnimation.hasEnded()
                                && !winAnimator.mKeyguardGoingAwayAnimation
                                && win.hasDrawnLw()
                                && win.mAttachedWindow == null
@@ -499,8 +500,7 @@ public class WindowAnimator {
                        mPostKeyguardExitAnimation.getStartOffset(),
                        mPostKeyguardExitAnimation.getDuration());
                mKeyguardGoingAway = false;
            } else if (mCurrentTime - mPostKeyguardExitAnimation.getStartTime()
                    > mPostKeyguardExitAnimation.getDuration()) {
            } else if (mPostKeyguardExitAnimation.hasEnded()) {
                // Done with the animation, reset.
                if (DEBUG_KEYGUARD) Slog.v(TAG, "Done with Keyguard exit animations.");
                mPostKeyguardExitAnimation = null;