From 2967f48f8574ce35acd6c5e4e9f7872c64f159d5 Mon Sep 17 00:00:00 2001 From: Jim Miller Date: Thu, 7 Jan 2016 15:05:32 -0800 Subject: [PATCH] Fix problem where keyguard shows spontaneously A recent change caused keyguard to ignore the sequence number when calling doKeyguardLaterLocked(). It also appears we can get into a situation where multiple requests to show keyguard are pending. This change ensures only the latest request gets handled. Fixes bug 26326350 Change-Id: Ic6cba0054fe235a8838ca8c242b1840c9e8309d6 --- .../android/systemui/keyguard/KeyguardViewMediator.java | 8 +++++++- .../com/android/server/policy/PhoneWindowManager.java | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java index 443778e525d51..7556c6b33a83c 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java @@ -474,10 +474,12 @@ public class KeyguardViewMediator extends SystemUI { ViewMediatorCallback mViewMediatorCallback = new ViewMediatorCallback() { + @Override public void userActivity() { KeyguardViewMediator.this.userActivity(); } + @Override public void keyguardDone(boolean strongAuth) { if (!mKeyguardDonePending) { KeyguardViewMediator.this.keyguardDone(true /* authenticated */); @@ -487,6 +489,7 @@ public class KeyguardViewMediator extends SystemUI { } } + @Override public void keyguardDoneDrawing() { mHandler.sendEmptyMessage(KEYGUARD_DONE_DRAWING); } @@ -1248,7 +1251,9 @@ public class KeyguardViewMediator extends SystemUI { if (DEBUG) Log.d(TAG, "received DELAYED_KEYGUARD_ACTION with seq = " + sequence + ", mDelayedShowingSequence = " + mDelayedShowingSequence); synchronized (KeyguardViewMediator.this) { - doKeyguardLocked(null); + if (mDelayedShowingSequence == sequence) { + doKeyguardLocked(null); + } } } else if (DELAYED_LOCK_PROFILE_ACTION.equals(intent.getAction())) { int userId = intent.getIntExtra(Intent.EXTRA_USER_ID, 0); @@ -1698,6 +1703,7 @@ public class KeyguardViewMediator extends SystemUI { mHandler.removeMessages(KEYGUARD_DONE_PENDING_TIMEOUT); } + @Override public void onBootCompleted() { mUpdateMonitor.dispatchBootCompleted(); synchronized (this) { diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index f13d964e1e1b9..70338373a9486 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -6382,6 +6382,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { if (mLockScreenTimerActive != enable) { if (enable) { if (localLOGV) Log.v(TAG, "setting lockscreen timer"); + mHandler.removeCallbacks(mScreenLockTimeout); // remove any pending requests mHandler.postDelayed(mScreenLockTimeout, mLockScreenTimeout); } else { if (localLOGV) Log.v(TAG, "clearing lockscreen timer");