Report keyguard as initially showing and secure until we know
This fixes a bug where an app calls KeyguardManager.isLocked()
before keyguard has had a chance to show. The fix is to assume
keyguard is showing and secure until we know otherwise.
Fixes bug 11670159
Change-Id: Ifbe4cdf40e3b76d2069ecace940f85fa58f31187
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardViewMediator.java b/packages/Keyguard/src/com/android/keyguard/KeyguardViewMediator.java
index 49982ea..b65fcd8 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardViewMediator.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardViewMediator.java
@@ -200,7 +200,7 @@
// cached value of whether we are showing (need to know this to quickly
// answer whether the input should be restricted)
- private boolean mShowing = false;
+ private boolean mShowing;
// true if the keyguard is hidden by another window
private boolean mHidden = false;
@@ -508,6 +508,9 @@
? lockPatternUtils : new LockPatternUtils(mContext);
mLockPatternUtils.setCurrentUser(UserHandle.USER_OWNER);
+ // Assume keyguard is showing (unless it's disabled) until we know for sure...
+ mShowing = !mLockPatternUtils.isLockScreenDisabled();
+
WindowManager wm = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
mKeyguardViewManager = new KeyguardViewManager(context, wm, mViewMediatorCallback,
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardServiceDelegate.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardServiceDelegate.java
index bf22e2f..1357462 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardServiceDelegate.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardServiceDelegate.java
@@ -40,6 +40,14 @@
private KeyguardState mKeyguardState = new KeyguardState();
/* package */ static final class KeyguardState {
+ KeyguardState() {
+ // Assume keyguard is showing and secure until we know for sure. This is here in
+ // the event something checks before the service is actually started.
+ // KeyguardService itself should default to this state until the real state is known.
+ showing = true;
+ showingAndNotHidden = true;
+ secure = true;
+ }
boolean showing;
boolean showingAndNotHidden;
boolean inputRestricted;