Suppressing FUL after user switch (fix b/7316467)
When switching users, Face Unlock starts in onResume(). However, there is no signal to indicate when the user actually sees their unlock screen. This means Face Unlock could be running unseen, timing out soon after it becomes visible, or letting the user in before they see the preview. This fix simply suppresses Face Unlock immediately after switching users. This is not the ideal behavior, but there is no easy way to make Face Unlock start only after the unlock screen becomes visible. When the user changes screens it becomes unsuppressed, so if they go back to the multi-select widget screen or login, Face Unlock works as expected and is only suppressed again when the user is switched. Change-Id: I80a302b0aefc1dee3c2dc77557978cbe062de435
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user