From 9200a3987e3dc147f732e9bce34ab1c5be043f12 Mon Sep 17 00:00:00 2001 From: Mike Lockwood Date: Tue, 17 Nov 2009 20:25:58 -0500 Subject: [PATCH] Handle KeyguardViewMediator.setHidden() asynchronously to avoid deadlocks. Fixes b/2267046 (Could not shut off alarm; then device reboot) Change-Id: Id8f3e24edc5e1242a39c5d43bd549b5cb05abb36 Signed-off-by: Mike Lockwood --- .../policy/impl/KeyguardViewMediator.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/policy/com/android/internal/policy/impl/KeyguardViewMediator.java b/policy/com/android/internal/policy/impl/KeyguardViewMediator.java index f5591b213df58..8d60e0ecdd49b 100644 --- a/policy/com/android/internal/policy/impl/KeyguardViewMediator.java +++ b/policy/com/android/internal/policy/impl/KeyguardViewMediator.java @@ -105,6 +105,7 @@ public class KeyguardViewMediator implements KeyguardViewCallback, private static final int KEYGUARD_DONE = 9; private static final int KEYGUARD_DONE_DRAWING = 10; private static final int KEYGUARD_DONE_AUTHENTICATING = 11; + private static final int SET_HIDDEN = 12; /** * The default amount of time we stay awake (used for all key input) @@ -425,9 +426,20 @@ public class KeyguardViewMediator implements KeyguardViewCallback, */ public void setHidden(boolean isHidden) { if (DEBUG) Log.d(TAG, "setHidden " + isHidden); + mHandler.removeMessages(SET_HIDDEN); + Message msg = mHandler.obtainMessage(SET_HIDDEN, (isHidden ? 1 : 0), 0); + mHandler.sendMessage(msg); + } + + /** + * Handles SET_HIDDEN message sent by setHidden() + */ + private void handleSetHidden(boolean isHidden) { synchronized (KeyguardViewMediator.this) { - mHidden = isHidden; - adjustUserActivityLocked(); + if (mHidden != isHidden) { + mHidden = isHidden; + adjustUserActivityLocked(); + } } } @@ -812,6 +824,9 @@ public class KeyguardViewMediator implements KeyguardViewCallback, case KEYGUARD_DONE_AUTHENTICATING: keyguardDone(true); return; + case SET_HIDDEN: + handleSetHidden(msg.arg1 != 0); + break; } } };