Show the face lockout follow-up message after the screen fully turns on.
Handles the race condition between screen turning on and face unlock error being shown. Fixes: 247688462 Test: atest KeyguardIndicationControllerTest Change-Id: I2c5a6ea87ce4cf94a7d2b288318f77ace165c56b
This commit is contained in:
@@ -196,7 +196,9 @@ public class KeyguardIndicationController {
|
||||
public void onScreenTurnedOn() {
|
||||
mHandler.removeMessages(MSG_RESET_ERROR_MESSAGE_ON_SCREEN_ON);
|
||||
if (mBiometricErrorMessageToShowOnScreenOn != null) {
|
||||
showBiometricMessage(mBiometricErrorMessageToShowOnScreenOn);
|
||||
String followUpMessage = mFaceLockedOutThisAuthSession
|
||||
? faceLockedOutFollowupMessage() : null;
|
||||
showBiometricMessage(mBiometricErrorMessageToShowOnScreenOn, followUpMessage);
|
||||
// We want to keep this message around in case the screen was off
|
||||
hideBiometricMessageDelayed(DEFAULT_HIDE_DELAY_MS);
|
||||
mBiometricErrorMessageToShowOnScreenOn = null;
|
||||
@@ -1256,9 +1258,7 @@ public class KeyguardIndicationController {
|
||||
}
|
||||
|
||||
private void handleFaceLockoutError(String errString) {
|
||||
int followupMsgId = canUnlockWithFingerprint() ? R.string.keyguard_suggest_fingerprint
|
||||
: R.string.keyguard_unlock;
|
||||
String followupMessage = mContext.getString(followupMsgId);
|
||||
String followupMessage = faceLockedOutFollowupMessage();
|
||||
// Lockout error can happen multiple times in a session because we trigger face auth
|
||||
// even when it is locked out so that the user is aware that face unlock would have
|
||||
// triggered but didn't because it is locked out.
|
||||
@@ -1276,6 +1276,12 @@ public class KeyguardIndicationController {
|
||||
}
|
||||
}
|
||||
|
||||
private String faceLockedOutFollowupMessage() {
|
||||
int followupMsgId = canUnlockWithFingerprint() ? R.string.keyguard_suggest_fingerprint
|
||||
: R.string.keyguard_unlock;
|
||||
return mContext.getString(followupMsgId);
|
||||
}
|
||||
|
||||
private static boolean isLockoutError(int msgId) {
|
||||
return msgId == FaceManager.FACE_ERROR_LOCKOUT_PERMANENT
|
||||
|| msgId == FaceManager.FACE_ERROR_LOCKOUT;
|
||||
|
||||
@@ -38,6 +38,7 @@ import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewCont
|
||||
import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_USER_LOCKED;
|
||||
import static com.android.systemui.keyguard.ScreenLifecycle.SCREEN_OFF;
|
||||
import static com.android.systemui.keyguard.ScreenLifecycle.SCREEN_ON;
|
||||
import static com.android.systemui.keyguard.ScreenLifecycle.SCREEN_TURNING_ON;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
@@ -1497,6 +1498,44 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
|
||||
mContext.getString(R.string.keyguard_face_unlock_unavailable));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onBiometricError_screenIsTurningOn_faceLockedOutFpIsNotAvailable_showsMessage() {
|
||||
createController();
|
||||
screenIsTurningOn();
|
||||
fingerprintUnlockIsNotPossible();
|
||||
|
||||
onFaceLockoutError("lockout error");
|
||||
verifyNoMoreInteractions(mRotateTextViewController);
|
||||
|
||||
mScreenObserver.onScreenTurnedOn();
|
||||
|
||||
verifyIndicationShown(INDICATION_TYPE_BIOMETRIC_MESSAGE,
|
||||
"lockout error");
|
||||
verifyIndicationShown(INDICATION_TYPE_BIOMETRIC_MESSAGE_FOLLOW_UP,
|
||||
mContext.getString(R.string.keyguard_unlock));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onBiometricError_screenIsTurningOn_faceLockedOutFpIsAvailable_showsMessage() {
|
||||
createController();
|
||||
screenIsTurningOn();
|
||||
fingerprintUnlockIsPossible();
|
||||
|
||||
onFaceLockoutError("lockout error");
|
||||
verifyNoMoreInteractions(mRotateTextViewController);
|
||||
|
||||
mScreenObserver.onScreenTurnedOn();
|
||||
|
||||
verifyIndicationShown(INDICATION_TYPE_BIOMETRIC_MESSAGE,
|
||||
"lockout error");
|
||||
verifyIndicationShown(INDICATION_TYPE_BIOMETRIC_MESSAGE_FOLLOW_UP,
|
||||
mContext.getString(R.string.keyguard_suggest_fingerprint));
|
||||
}
|
||||
|
||||
private void screenIsTurningOn() {
|
||||
when(mScreenLifecycle.getScreenState()).thenReturn(SCREEN_TURNING_ON);
|
||||
}
|
||||
|
||||
private void sendUpdateDisclosureBroadcast() {
|
||||
mBroadcastReceiver.onReceive(mContext, new Intent());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user