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();
}