OSDN Git Service

Handle KeyguardViewMediator.setHidden() asynchronously to avoid deadlocks.
authorMike Lockwood <lockwood@android.com>
Wed, 18 Nov 2009 01:25:58 +0000 (20:25 -0500)
committerMike Lockwood <lockwood@android.com>
Wed, 18 Nov 2009 01:25:58 +0000 (20:25 -0500)
Fixes b/2267046 (Could not shut off alarm; then device reboot)

Change-Id: Id8f3e24edc5e1242a39c5d43bd549b5cb05abb36
Signed-off-by: Mike Lockwood <lockwood@android.com>
phone/com/android/internal/policy/impl/KeyguardViewMediator.java

index f5591b2..8d60e0e 100644 (file)
@@ -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;
             }
         }
     };