Merge "Show the face lockout follow-up message after the screen fully turns on." into tm-qpr-dev am: a3542e18d2

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20479205

Change-Id: Ied6e0fb9912751233469ef1e39de4fa37a354a78
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
TreeHugger Robot
2022-11-15 23:03:32 +00:00
committed by Automerger Merge Worker
2 changed files with 49 additions and 4 deletions

View File

@@ -198,7 +198,9 @@ public class KeyguardIndicationController {
public void onScreenTurnedOn() { public void onScreenTurnedOn() {
mHandler.removeMessages(MSG_RESET_ERROR_MESSAGE_ON_SCREEN_ON); mHandler.removeMessages(MSG_RESET_ERROR_MESSAGE_ON_SCREEN_ON);
if (mBiometricErrorMessageToShowOnScreenOn != null) { 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 // We want to keep this message around in case the screen was off
hideBiometricMessageDelayed(DEFAULT_HIDE_DELAY_MS); hideBiometricMessageDelayed(DEFAULT_HIDE_DELAY_MS);
mBiometricErrorMessageToShowOnScreenOn = null; mBiometricErrorMessageToShowOnScreenOn = null;
@@ -1263,9 +1265,7 @@ public class KeyguardIndicationController {
} }
private void handleFaceLockoutError(String errString) { private void handleFaceLockoutError(String errString) {
int followupMsgId = canUnlockWithFingerprint() ? R.string.keyguard_suggest_fingerprint String followupMessage = faceLockedOutFollowupMessage();
: R.string.keyguard_unlock;
String followupMessage = mContext.getString(followupMsgId);
// Lockout error can happen multiple times in a session because we trigger face auth // 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 // 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. // triggered but didn't because it is locked out.
@@ -1283,6 +1283,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) { private static boolean isLockoutError(int msgId) {
return msgId == FaceManager.FACE_ERROR_LOCKOUT_PERMANENT return msgId == FaceManager.FACE_ERROR_LOCKOUT_PERMANENT
|| msgId == FaceManager.FACE_ERROR_LOCKOUT; || msgId == FaceManager.FACE_ERROR_LOCKOUT;

View File

@@ -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.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_USER_LOCKED;
import static com.android.systemui.keyguard.ScreenLifecycle.SCREEN_OFF; 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_ON;
import static com.android.systemui.keyguard.ScreenLifecycle.SCREEN_TURNING_ON;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
@@ -1503,6 +1504,44 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
mContext.getString(R.string.keyguard_face_unlock_unavailable)); 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() { private void sendUpdateDisclosureBroadcast() {
mBroadcastReceiver.onReceive(mContext, new Intent()); mBroadcastReceiver.onReceive(mContext, new Intent());
} }