From: Mike Lockwood Date: Wed, 18 Nov 2009 01:25:58 +0000 (-0500) Subject: Handle KeyguardViewMediator.setHidden() asynchronously to avoid deadlocks. X-Git-Tag: android-x86-2.2~14^2~7^2~15 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=129b69f368bd30cb1caa75cf13961b5b44982d4b;p=android-x86%2Fframeworks-policies-base.git 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 --- diff --git a/phone/com/android/internal/policy/impl/KeyguardViewMediator.java b/phone/com/android/internal/policy/impl/KeyguardViewMediator.java index f5591b2..8d60e0e 100644 --- a/phone/com/android/internal/policy/impl/KeyguardViewMediator.java +++ b/phone/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; } } };