diff options
3 files changed, 16 insertions, 1 deletions
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java index 6ea3513..21ccfed 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java @@ -248,6 +248,9 @@ public class KeyguardHostView extends KeyguardViewBase { } public void dismiss(boolean authenticated) { + // If the biometric unlock was suppressed due to a user switch, it can now be safely + // unsuppressed because the user has left the unlock screen. + KeyguardUpdateMonitor.getInstance(mContext).clearBiometricUnlockUserSwitched(); showNextSecurityScreenOrFinish(authenticated); } diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSecurityModel.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSecurityModel.java index 30cd67b..e573072 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSecurityModel.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSecurityModel.java @@ -65,7 +65,8 @@ public class KeyguardSecurityModel { KeyguardUpdateMonitor monitor = KeyguardUpdateMonitor.getInstance(mContext); final boolean backupIsTimedOut = monitor.getFailedUnlockAttempts() >= LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT; - return monitor.getMaxBiometricUnlockAttemptsReached() || backupIsTimedOut; + return monitor.getMaxBiometricUnlockAttemptsReached() || backupIsTimedOut + || monitor.didBiometricUnlockUserSwitch(); } SecurityMode getSecurityMode() { diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardUpdateMonitor.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardUpdateMonitor.java index 15a6f9f..63a074a 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardUpdateMonitor.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardUpdateMonitor.java @@ -102,6 +102,8 @@ public class KeyguardUpdateMonitor { private int mFailedAttempts = 0; private int mFailedBiometricUnlockAttempts = 0; + private boolean mBiometricUnlockUserSwitched; + private boolean mClockVisible; private final ArrayList<WeakReference<KeyguardUpdateMonitorCallback>> @@ -404,6 +406,7 @@ public class KeyguardUpdateMonitor { cb.onUserSwitched(userId); } } + mBiometricUnlockUserSwitched = true; try { reply.sendResult(null); } catch (RemoteException e) { @@ -721,6 +724,14 @@ public class KeyguardUpdateMonitor { return mFailedBiometricUnlockAttempts >= FAILED_BIOMETRIC_UNLOCK_ATTEMPTS_BEFORE_BACKUP; } + public boolean didBiometricUnlockUserSwitch() { + return mBiometricUnlockUserSwitched; + } + + public void clearBiometricUnlockUserSwitched() { + mBiometricUnlockUserSwitched = false; + } + public boolean isSimLocked() { return isSimLocked(mSimState); } |
