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

Fixes b/2297221 ('Add call' button has no action, if call is answered on lockpattern screen)

Change-Id: I6df8f64dedc4d2d8b02f746213c7b1b336d6560e
Signed-off-by: Mike Lockwood <lockwood@android.com>
This commit is contained in:
Mike Lockwood
2009-12-02 01:15:27 -05:00
parent c72b15f2ee
commit 3e42c35f7a

View File

@@ -170,7 +170,7 @@ public class KeyguardViewMediator implements KeyguardViewCallback,
// these are protected by synchronized (this)
/**
* External apps (like the phone app) can tell us to disable the keygaurd.
* This is set to false if the keyguard is disabled via setKeyguardEnabled(false).
*/
private boolean mExternallyEnabled = true;
@@ -398,15 +398,31 @@ public class KeyguardViewMediator implements KeyguardViewCallback,
// don't allow this api when the device isn't provisioned
if (DEBUG) Log.d(TAG, "ignoring because device isn't provisioned");
callback.onKeyguardExitResult(false);
} else if (mExternallyEnabled) {
// this only applies when the user has externally disabled the
// keyguard. this is unexpected and means the user is not
// using the api properly.
Log.w(TAG, "verifyUnlock called when not externally disabled");
callback.onKeyguardExitResult(false);
} else if (mExitSecureCallback != null) {
// already in progress with someone else
callback.onKeyguardExitResult(false);
} else if (mExternallyEnabled) {
if (mHidden) {
if (isSecure()) {
// if the current activity is in front of the keyguard, then
// pretend like we succeeded and we will hit the lock screen
// when the activity is launched.
// HACK ALERT - this is assuming that the callback will be used
// to start a new activity (current usage by Phone app).
callback.onKeyguardExitResult(true);
} else {
// call through to verifyUnlockLocked() so we can bypass
// the insecure keyguard screen.
mExitSecureCallback = callback;
verifyUnlockLocked();
}
} else {
// this only applies when the user has externally disabled the keyguard
// and no other activities are in front of the keyguard.
// this is unexpected and means the user is not using the api properly.
Log.w(TAG, "verifyUnlock called when not externally disabled");
callback.onKeyguardExitResult(false);
}
} else {
mExitSecureCallback = callback;
verifyUnlockLocked();