diff options
author | Jorim Jaggi <jjaggi@google.com> | 2015-09-16 14:53:48 -0700 |
---|---|---|
committer | Jorim Jaggi <jjaggi@google.com> | 2015-09-17 22:48:07 +0000 |
commit | 5c0c5ac84552f80ddadc43f451c3a28c5c8c8f84 (patch) | |
tree | cb64e7523d87f89a8454305172d563fdeed22c81 /packages/SystemUI | |
parent | 2ebcf2c28fd1657a98a7dc4a90bcbe7e78f296e9 (diff) | |
download | frameworks_base-5c0c5ac84552f80ddadc43f451c3a28c5c8c8f84.zip frameworks_base-5c0c5ac84552f80ddadc43f451c3a28c5c8c8f84.tar.gz frameworks_base-5c0c5ac84552f80ddadc43f451c3a28c5c8c8f84.tar.bz2 |
Handle case correctly when screen times out and locking immediately
In case the the screen timed out and the setting was set to "lock now"
in case the screen times out, we locked before finished going to sleep,
leading to all kinds of state messups in Keyguard, including an empty
lockscreen when authenticating with fingerprint during that period.
Bug: 23952388
Change-Id: If1629be1171c841d51ec0555422e6108002fdb73
Diffstat (limited to 'packages/SystemUI')
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java index 33c59f8..20b9cac 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java @@ -652,6 +652,7 @@ public class KeyguardViewMediator extends SystemUI { final boolean lockImmediately = mLockPatternUtils.getPowerButtonInstantlyLocks(currentUser) || !mLockPatternUtils.isSecure(currentUser); + long timeout = getLockTimeout(); if (mExitSecureCallback != null) { if (DEBUG) Log.d(TAG, "pending exit secure callback cancelled"); @@ -666,9 +667,9 @@ public class KeyguardViewMediator extends SystemUI { } } else if (mShowing) { mPendingReset = true; - } else if (why == WindowManagerPolicy.OFF_BECAUSE_OF_TIMEOUT + } else if ((why == WindowManagerPolicy.OFF_BECAUSE_OF_TIMEOUT && timeout > 0) || (why == WindowManagerPolicy.OFF_BECAUSE_OF_USER && !lockImmediately)) { - doKeyguardLaterLocked(); + doKeyguardLaterLocked(timeout); } else if (!mLockPatternUtils.isLockScreenDisabled(currentUser)) { mPendingLock = true; } @@ -703,7 +704,7 @@ public class KeyguardViewMediator extends SystemUI { KeyguardUpdateMonitor.getInstance(mContext).dispatchFinishedGoingToSleep(why); } - private void doKeyguardLaterLocked() { + private long getLockTimeout() { // if the screen turned off because of timeout or the user hit the power button // and we don't need to lock immediately, set an alarm // to enable it a little bit later (i.e, give the user a chance @@ -732,23 +733,30 @@ public class KeyguardViewMediator extends SystemUI { } else { timeout = lockAfterTimeout; } + return timeout; + } - if (timeout <= 0) { - // Lock now + private void doKeyguardLaterLocked() { + long timeout = getLockTimeout(); + if (timeout == 0) { doKeyguardLocked(null); } else { - // Lock in the future - long when = SystemClock.elapsedRealtime() + timeout; - Intent intent = new Intent(DELAYED_KEYGUARD_ACTION); - intent.putExtra("seq", mDelayedShowingSequence); - PendingIntent sender = PendingIntent.getBroadcast(mContext, - 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); - mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, when, sender); - if (DEBUG) Log.d(TAG, "setting alarm to turn off keyguard, seq = " - + mDelayedShowingSequence); + doKeyguardLaterLocked(timeout); } } + private void doKeyguardLaterLocked(long timeout) { + // Lock in the future + long when = SystemClock.elapsedRealtime() + timeout; + Intent intent = new Intent(DELAYED_KEYGUARD_ACTION); + intent.putExtra("seq", mDelayedShowingSequence); + PendingIntent sender = PendingIntent.getBroadcast(mContext, + 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); + mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, when, sender); + if (DEBUG) Log.d(TAG, "setting alarm to turn off keyguard, seq = " + + mDelayedShowingSequence); + } + private void cancelDoKeyguardLaterLocked() { mDelayedShowingSequence++; } |