Only show "use fingerprint instead" if fp is ALLOWED

Previously, SysUI was only checking if fingerprint
is possible but that doesn't check strong auth requirements
like if face is locking on fingerprint.

Fixes: 277365347
Test: atest KeyguardIndicationControllerTest
Test: lockout class 3 face with FP enrolled - observe
message informs the user to swipe up, NOT use fingeprint
since FP is not allowed

Change-Id: Ia1696d26050c983cc8f08ff3f104cd57f16a524c
This commit is contained in:
Beverly
2023-04-07 19:49:30 +00:00
parent e73fc4b123
commit bdbe4a5155
2 changed files with 50 additions and 28 deletions

View File

@@ -1423,7 +1423,7 @@ public class KeyguardIndicationController {
private boolean canUnlockWithFingerprint() {
return mKeyguardUpdateMonitor.getCachedIsUnlockWithFingerprintPossible(
getCurrentUser());
getCurrentUser()) && mKeyguardUpdateMonitor.isUnlockingWithFingerprintAllowed();
}
private void showErrorMessageNowOrLater(String errString, @Nullable String followUpMsg) {

View File

@@ -614,9 +614,8 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
public void onBiometricHelp_coEx_faceFailure() {
createController();
// GIVEN unlocking with fingerprint is possible
when(mKeyguardUpdateMonitor.getCachedIsUnlockWithFingerprintPossible(anyInt()))
.thenReturn(true);
// GIVEN unlocking with fingerprint is possible and allowed
fingerprintUnlockIsPossibleAndAllowed();
String message = "A message";
mController.setVisible(true);
@@ -641,9 +640,8 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
public void onBiometricHelp_coEx_faceUnavailable() {
createController();
// GIVEN unlocking with fingerprint is possible
when(mKeyguardUpdateMonitor.getCachedIsUnlockWithFingerprintPossible(anyInt()))
.thenReturn(true);
// GIVEN unlocking with fingerprint is possible and allowed
fingerprintUnlockIsPossibleAndAllowed();
String message = "A message";
mController.setVisible(true);
@@ -664,6 +662,35 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
mContext.getString(R.string.keyguard_suggest_fingerprint));
}
@Test
public void onBiometricHelp_coEx_faceUnavailable_fpNotAllowed() {
createController();
// GIVEN unlocking with fingerprint is possible but not allowed
setupFingerprintUnlockPossible(true);
when(mKeyguardUpdateMonitor.isUnlockingWithFingerprintAllowed())
.thenReturn(false);
String message = "A message";
mController.setVisible(true);
// WHEN there's a face unavailable message
mController.getKeyguardCallback().onBiometricHelp(
BIOMETRIC_HELP_FACE_NOT_AVAILABLE,
message,
BiometricSourceType.FACE);
// THEN show sequential messages such as: 'face unlock unavailable' and
// 'try fingerprint instead'
verifyIndicationMessage(
INDICATION_TYPE_BIOMETRIC_MESSAGE,
message);
verifyIndicationMessage(
INDICATION_TYPE_BIOMETRIC_MESSAGE_FOLLOW_UP,
mContext.getString(R.string.keyguard_unlock));
}
@Test
public void onBiometricHelp_coEx_fpFailure_faceAlreadyUnlocked() {
createController();
@@ -818,8 +845,7 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
@Test
public void faceErrorTimeout_whenFingerprintEnrolled_doesNotShowMessage() {
createController();
when(mKeyguardUpdateMonitor.getCachedIsUnlockWithFingerprintPossible(
getCurrentUser())).thenReturn(true);
fingerprintUnlockIsPossibleAndAllowed();
String message = "A message";
mController.setVisible(true);
@@ -832,9 +858,8 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
public void sendFaceHelpMessages_fingerprintEnrolled() {
createController();
// GIVEN fingerprint enrolled
when(mKeyguardUpdateMonitor.getCachedIsUnlockWithFingerprintPossible(
getCurrentUser())).thenReturn(true);
// GIVEN unlocking with fingerprint is possible and allowed
fingerprintUnlockIsPossibleAndAllowed();
// WHEN help messages received that are allowed to show
final String helpString = "helpString";
@@ -859,9 +884,8 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
public void doNotSendMostFaceHelpMessages_fingerprintEnrolled() {
createController();
// GIVEN fingerprint enrolled
when(mKeyguardUpdateMonitor.getCachedIsUnlockWithFingerprintPossible(
getCurrentUser())).thenReturn(true);
// GIVEN unlocking with fingerprint is possible and allowed
fingerprintUnlockIsPossibleAndAllowed();
// WHEN help messages received that aren't supposed to show
final String helpString = "helpString";
@@ -886,9 +910,8 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
public void sendAllFaceHelpMessages_fingerprintNotEnrolled() {
createController();
// GIVEN fingerprint NOT enrolled
when(mKeyguardUpdateMonitor.getCachedIsUnlockWithFingerprintPossible(
getCurrentUser())).thenReturn(false);
// GIVEN fingerprint NOT possible
fingerprintUnlockIsNotPossible();
// WHEN help messages received
final Set<CharSequence> helpStrings = new HashSet<>();
@@ -917,9 +940,8 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
public void sendTooDarkFaceHelpMessages_onTimeout_noFpEnrolled() {
createController();
// GIVEN fingerprint NOT enrolled
when(mKeyguardUpdateMonitor.getCachedIsUnlockWithFingerprintPossible(
getCurrentUser())).thenReturn(false);
// GIVEN fingerprint not possible
fingerprintUnlockIsNotPossible();
// WHEN help message received and deferred message is valid
final String helpString = "helpMsg";
@@ -948,9 +970,8 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
public void sendTooDarkFaceHelpMessages_onTimeout_fingerprintEnrolled() {
createController();
// GIVEN fingerprint enrolled
when(mKeyguardUpdateMonitor.getCachedIsUnlockWithFingerprintPossible(
getCurrentUser())).thenReturn(true);
// GIVEN unlocking with fingerprint is possible and allowed
fingerprintUnlockIsPossibleAndAllowed();
// WHEN help message received and deferredMessage is valid
final String helpString = "helpMsg";
@@ -1500,7 +1521,7 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
@Test
public void onBiometricError_faceLockedOutFirstTimeAndFpAllowed_showsTheFpFollowupMessage() {
createController();
fingerprintUnlockIsPossible();
fingerprintUnlockIsPossibleAndAllowed();
onFaceLockoutError("first lockout");
verifyIndicationShown(INDICATION_TYPE_BIOMETRIC_MESSAGE_FOLLOW_UP,
@@ -1559,7 +1580,7 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
@Test
public void onBiometricError_faceLockedOutAgainAndFpAllowed_showsTheFpFollowupMessage() {
createController();
fingerprintUnlockIsPossible();
fingerprintUnlockIsPossibleAndAllowed();
onFaceLockoutError("first lockout");
clearInvocations(mRotateTextViewController);
@@ -1668,7 +1689,7 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
public void onBiometricError_screenIsTurningOn_faceLockedOutFpIsAvailable_showsMessage() {
createController();
screenIsTurningOn();
fingerprintUnlockIsPossible();
fingerprintUnlockIsPossibleAndAllowed();
onFaceLockoutError("lockout error");
verifyNoMoreInteractions(mRotateTextViewController);
@@ -1746,8 +1767,9 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
setupFingerprintUnlockPossible(false);
}
private void fingerprintUnlockIsPossible() {
private void fingerprintUnlockIsPossibleAndAllowed() {
setupFingerprintUnlockPossible(true);
when(mKeyguardUpdateMonitor.isUnlockingWithFingerprintAllowed()).thenReturn(true);
}
private void setupFingerprintUnlockPossible(boolean possible) {