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

Commit 27f9231e authored by Kevin Chyn's avatar Kevin Chyn
Browse files

Do not use canAuthenticate() to check if user can reset lockout

canAuthenticate() is meant for apps so it will reflect the
FACE_UNLOCK_APP_ENABLED setting. If disabled, resetLockout will not be
run for that user.

Fixes: 138269776

Test: Disable unlocking for apps, get locked out, enter password.
      Lockout is reset now.

Change-Id: I5d7bf3abbac7c8982595d5733464a887ab5184ab
parent 58184123
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -128,6 +128,25 @@ public class BiometricManager {
        }
    }

    /**
     * @hide
     * @param userId
     * @return
     */
    @RequiresPermission(USE_BIOMETRIC_INTERNAL)
    public boolean hasEnrolledBiometrics(int userId) {
        if (mService != null) {
            try {
                return mService.hasEnrolledBiometrics(userId);
            } catch (RemoteException e) {
                Slog.w(TAG, "Remote exception in hasEnrolledBiometrics(): " + e);
                return false;
            }
        } else {
            return false;
        }
    }

    /**
     * Listens for changes to biometric eligibility on keyguard from user settings.
     * @param callback
+3 −0
Original line number Diff line number Diff line
@@ -42,6 +42,9 @@ interface IBiometricService {
    // Checks if biometrics can be used.
    int canAuthenticate(String opPackageName, int userId);

    // Checks if any biometrics are enrolled.
    boolean hasEnrolledBiometrics(int userId);

    // Register callback for when keyguard biometric eligibility changes.
    void registerEnabledOnKeyguardCallback(IBiometricEnabledOnKeyguardCallback callback);

+17 −0
Original line number Diff line number Diff line
@@ -789,6 +789,23 @@ public class BiometricService extends SystemService {
            return error;
        }

        @Override
        public boolean hasEnrolledBiometrics(int userId) {
            checkInternalPermission();

            final long ident = Binder.clearCallingIdentity();
            try {
                for (int i = 0; i < mAuthenticators.size(); i++) {
                    if (mAuthenticators.get(i).mAuthenticator.hasEnrolledTemplates(userId)) {
                        return true;
                    }
                }
            } finally {
                Binder.restoreCallingIdentity(ident);
            }
            return false;
        }

        @Override // Binder call
        public void registerEnabledOnKeyguardCallback(IBiometricEnabledOnKeyguardCallback callback)
                throws RemoteException {
+1 −1
Original line number Diff line number Diff line
@@ -446,7 +446,7 @@ public class LockSettingsService extends ILockSettings.Stub {

        public boolean hasEnrolledBiometrics(int userId) {
            BiometricManager bm = mContext.getSystemService(BiometricManager.class);
            return bm.canAuthenticate(userId) == BiometricManager.BIOMETRIC_SUCCESS;
            return bm.hasEnrolledBiometrics(userId);
        }

        public int binderGetCallingUid() {