am b684251e: Fix problems with KeyguardManager.exitKeyguardSecurely() and the FLAG_SHOW_WHEN_LOCKED window manager flag.

Merge commit 'b684251e8f1e85ea9483af2b80bc92f0fd8ded1c' into eclair-mr2

* commit 'b684251e8f1e85ea9483af2b80bc92f0fd8ded1c':
  Fix problems with KeyguardManager.exitKeyguardSecurely() and the FLAG_SHOW_WHEN_LOCKED window manager flag.
diff --git a/policy/com/android/internal/policy/impl/KeyguardViewMediator.java b/policy/com/android/internal/policy/impl/KeyguardViewMediator.java
index 17586be..1861ef9 100644
--- a/policy/com/android/internal/policy/impl/KeyguardViewMediator.java
+++ b/policy/com/android/internal/policy/impl/KeyguardViewMediator.java
@@ -22,6 +22,7 @@
 import android.app.ActivityManagerNative;
 import android.app.AlarmManager;
 import android.app.PendingIntent;
+import android.app.StatusBarManager;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
@@ -135,6 +136,7 @@
     
     private Context mContext;
     private AlarmManager mAlarmManager;
+    private StatusBarManager mStatusBarManager;
 
     private boolean mSystemReady;
     
@@ -462,6 +464,7 @@
             if (mHidden != isHidden) {
                 mHidden = isHidden;
                 adjustUserActivityLocked();
+                adjustStatusBarLocked();
             }
         }
     }
@@ -915,6 +918,7 @@
             mKeyguardViewManager.show();
             mShowing = true;
             adjustUserActivityLocked();
+            adjustStatusBarLocked();
             try {
                 ActivityManagerNative.getDefault().closeSystemDialogs("lock");
             } catch (RemoteException e) {
@@ -938,6 +942,7 @@
             mKeyguardViewManager.hide();
             mShowing = false;
             adjustUserActivityLocked();
+            adjustStatusBarLocked();
         }
     }
 
@@ -952,6 +957,23 @@
         }
     }
 
+    private void adjustStatusBarLocked() {
+        if (mStatusBarManager == null) {
+            mStatusBarManager = (StatusBarManager)
+                    mContext.getSystemService(Context.STATUS_BAR_SERVICE);
+        }
+        if (mStatusBarManager == null) {
+            Log.w(TAG, "Could not get status bar manager");
+        } else {
+            // if the keyguard is shown, allow the status bar to open
+            // only if the keyguard is insecure and is covered by another window
+            boolean enable = !mShowing || (mHidden && !isSecure());
+            mStatusBarManager.disable(enable ?
+                         StatusBarManager.DISABLE_NONE :
+                         StatusBarManager.DISABLE_EXPAND);
+        }
+    }
+
     /**
      * Handle message sent by {@link #wakeWhenReadyLocked(int)}
      * @param keyCode The key that woke the device.
diff --git a/policy/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/com/android/internal/policy/impl/PhoneWindowManager.java
index 2f9faae..e7a03e4 100755
--- a/policy/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -1725,8 +1725,14 @@
                     mHandler.removeCallbacks(mPowerLongPress);
                     if (mShouldTurnOffOnKeyUp) {
                         mShouldTurnOffOnKeyUp = false;
-                        boolean gohome = (mEndcallBehavior & ENDCALL_HOME) != 0;
-                        boolean sleeps = (mEndcallBehavior & ENDCALL_SLEEPS) != 0;
+                        boolean gohome, sleeps;
+                        if (code == KeyEvent.KEYCODE_ENDCALL) {
+                            gohome = (mEndcallBehavior & ENDCALL_HOME) != 0;
+                            sleeps = (mEndcallBehavior & ENDCALL_SLEEPS) != 0;
+                        } else {
+                            gohome = false;
+                            sleeps = true;
+                        }
                         if (keyguardActive
                                 || (sleeps && !gohome)
                                 || (gohome && !goHome() && sleeps)) {
@@ -1928,8 +1934,7 @@
         mKeyguardMediator.verifyUnlock(callback);
     }
 
-    /** {@inheritDoc} */
-    public boolean keyguardIsShowingTq() {
+    private boolean keyguardIsShowingTq() {
         return mKeyguardMediator.isShowingAndNotHidden();
     }