diff options
| author | 2015-05-12 13:23:15 +0800 | |
|---|---|---|
| committer | 2015-05-18 13:56:34 +0800 | |
| commit | 38cd664c68d0ae41e88a7e2471f1ba84394562ee (patch) | |
| tree | da16df066dc9a2cc44c34772de9b225b66a27486 | |
| parent | a194eb9b5d36acc083aa55b9a152567d68e84f14 (diff) | |
Should reset mDismissKeyguard on keyguard secure change
If user sets a non-secure lock screen, launch an activity which
appends window flag FLAG_DISMISS_KEYGUARD, then insert a PIN lock
SIM card, activity window will become black screen.
This is because mDismissKeyguard keeps on DISMISS_KEYGUARD_CONTINUE
when keyguard secure changes from non-secure to secure like in the
insert PIN lock SIM card case. If mDismissKeyguard is
DISMISS_KEYGUARD_CONTINUE and keyguard is secure, there is no chance
to launch keyguard unlock window anymore.
This patch handles the use case that to reset mDismissKeyguard to a
new cycle from DISMISS_KEYGUARD_START to DISMISS_KEYGUARD_CONTINUE
again once keyguard secure state change suddenly to let keyguard
window has chance to be launched.
https://code.google.com/p/android/issues/detail?id=78806
Change-Id: I0d4fd0b9bdf7d0a39f35427bfd4e1b928d9bca6b
Signed-off-by: tingna_sung <tingna_sung@htc.com>
| -rw-r--r-- | policy/src/com/android/internal/policy/impl/PhoneWindowManager.java | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java index af5025b8d151..d4c530bbad3d 100644 --- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java +++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java @@ -472,6 +472,11 @@ public class PhoneWindowManager implements WindowManagerPolicy { /** The window that is currently dismissing the keyguard. Dismissing the keyguard must only * be done once per window. */ private WindowState mWinDismissingKeyguard; + /** When window is currently dismissing the keyguard, dismissing the keyguard must handle + * the keygaurd secure state change instantly case, e.g. the use case of inserting a PIN + * lock SIM card. This variable is used to record the previous keyguard secure state for + * monitoring secure state change on window dismissing keyguard. */ + private boolean mSecureDismissingKeyguard; /** The window that is currently showing "over" the keyguard. If there is an app window * belonging to another app on top of this the keyguard shows. If there is a fullscreen @@ -4094,9 +4099,11 @@ public class PhoneWindowManager implements WindowManagerPolicy { mDismissKeyguard == DISMISS_KEYGUARD_NONE) { if (DEBUG_LAYOUT) Slog.v(TAG, "Setting mDismissKeyguard true by win " + win); - mDismissKeyguard = mWinDismissingKeyguard == win ? + mDismissKeyguard = mWinDismissingKeyguard == win + && mSecureDismissingKeyguard == mKeyguardSecure ? DISMISS_KEYGUARD_CONTINUE : DISMISS_KEYGUARD_START; mWinDismissingKeyguard = win; + mSecureDismissingKeyguard = mKeyguardSecure; mForceStatusBarFromKeyguard = mShowingLockscreen && mKeyguardSecure; } else if (mAppsToBeHidden.isEmpty() && showWhenLocked) { if (DEBUG_LAYOUT) Slog.v(TAG, @@ -4250,6 +4257,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { } } else { mWinDismissingKeyguard = null; + mSecureDismissingKeyguard = false; mKeyguardHidden = false; if (setKeyguardOccludedLw(false)) { changes |= FINISH_LAYOUT_REDO_LAYOUT |