Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bdbe4a51 authored by Beverly's avatar Beverly
Browse files

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
parent e73fc4b1
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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) {
+49 −27
Original line number Diff line number Diff line
@@ -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) {