Loading services/core/java/com/android/server/biometrics/PreAuthInfo.java +4 −4 Original line number Diff line number Diff line Loading @@ -226,10 +226,6 @@ class PreAuthInfo { return BIOMETRIC_NO_HARDWARE; } if (sensor.modality == TYPE_FACE && biometricCameraManager.isAnyCameraUnavailable()) { return BIOMETRIC_HARDWARE_NOT_DETECTED; } final boolean wasStrongEnough = Utils.isAtLeastStrength(sensor.oemStrength, requestedStrength); final boolean isStrongEnough = Loading @@ -241,6 +237,10 @@ class PreAuthInfo { return BIOMETRIC_INSUFFICIENT_STRENGTH; } if (sensor.modality == TYPE_FACE && biometricCameraManager.isAnyCameraUnavailable()) { return BIOMETRIC_HARDWARE_NOT_DETECTED; } try { if (!sensor.impl.isHardwareDetected(opPackageName)) { return BIOMETRIC_HARDWARE_NOT_DETECTED; Loading services/tests/servicestests/src/com/android/server/biometrics/PreAuthInfoTest.java +23 −2 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import static android.hardware.biometrics.BiometricAuthenticator.TYPE_FACE; import static android.hardware.biometrics.BiometricAuthenticator.TYPE_FINGERPRINT; import static android.hardware.biometrics.BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE; import static android.hardware.biometrics.BiometricManager.BIOMETRIC_ERROR_NOT_ENABLED_FOR_APPS; import static android.hardware.biometrics.BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE; import static com.android.server.biometrics.sensors.LockoutTracker.LOCKOUT_NONE; Loading Loading @@ -354,6 +355,21 @@ public class PreAuthInfoTest { assertThat(preAuthInfo.getIsMandatoryBiometricsAuthentication()).isTrue(); } @Test public void prioritizeStrengthErrorBeforeCameraUnavailableError() throws Exception { final BiometricSensor sensor = getFaceSensorWithStrength( BiometricManager.Authenticators.BIOMETRIC_WEAK); final PromptInfo promptInfo = new PromptInfo(); promptInfo.setAuthenticators(BiometricManager.Authenticators.BIOMETRIC_STRONG); promptInfo.setNegativeButtonText(TEST_PACKAGE_NAME); final PreAuthInfo preAuthInfo = PreAuthInfo.create(mTrustManager, mDevicePolicyManager, mSettingObserver, List.of(sensor), USER_ID , promptInfo, TEST_PACKAGE_NAME, false /* checkDevicePolicyManager */, mContext, mBiometricCameraManager, mUserManager); assertThat(preAuthInfo.getCanAuthenticateResult()).isEqualTo(BIOMETRIC_ERROR_NO_HARDWARE); } private BiometricSensor getFingerprintSensor() { BiometricSensor sensor = new BiometricSensor(mContext, SENSOR_ID_FINGERPRINT, TYPE_FINGERPRINT, BiometricManager.Authenticators.BIOMETRIC_STRONG, Loading @@ -372,9 +388,10 @@ public class PreAuthInfoTest { return sensor; } private BiometricSensor getFaceSensor() { private BiometricSensor getFaceSensorWithStrength( @BiometricManager.Authenticators.Types int sensorStrength) { BiometricSensor sensor = new BiometricSensor(mContext, SENSOR_ID_FACE, TYPE_FACE, BiometricManager.Authenticators.BIOMETRIC_STRONG, mFaceAuthenticator) { sensorStrength, mFaceAuthenticator) { @Override boolean confirmationAlwaysRequired(int userId) { return false; Loading @@ -388,4 +405,8 @@ public class PreAuthInfoTest { return sensor; } private BiometricSensor getFaceSensor() { return getFaceSensorWithStrength(BiometricManager.Authenticators.BIOMETRIC_STRONG); } } Loading
services/core/java/com/android/server/biometrics/PreAuthInfo.java +4 −4 Original line number Diff line number Diff line Loading @@ -226,10 +226,6 @@ class PreAuthInfo { return BIOMETRIC_NO_HARDWARE; } if (sensor.modality == TYPE_FACE && biometricCameraManager.isAnyCameraUnavailable()) { return BIOMETRIC_HARDWARE_NOT_DETECTED; } final boolean wasStrongEnough = Utils.isAtLeastStrength(sensor.oemStrength, requestedStrength); final boolean isStrongEnough = Loading @@ -241,6 +237,10 @@ class PreAuthInfo { return BIOMETRIC_INSUFFICIENT_STRENGTH; } if (sensor.modality == TYPE_FACE && biometricCameraManager.isAnyCameraUnavailable()) { return BIOMETRIC_HARDWARE_NOT_DETECTED; } try { if (!sensor.impl.isHardwareDetected(opPackageName)) { return BIOMETRIC_HARDWARE_NOT_DETECTED; Loading
services/tests/servicestests/src/com/android/server/biometrics/PreAuthInfoTest.java +23 −2 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import static android.hardware.biometrics.BiometricAuthenticator.TYPE_FACE; import static android.hardware.biometrics.BiometricAuthenticator.TYPE_FINGERPRINT; import static android.hardware.biometrics.BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE; import static android.hardware.biometrics.BiometricManager.BIOMETRIC_ERROR_NOT_ENABLED_FOR_APPS; import static android.hardware.biometrics.BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE; import static com.android.server.biometrics.sensors.LockoutTracker.LOCKOUT_NONE; Loading Loading @@ -354,6 +355,21 @@ public class PreAuthInfoTest { assertThat(preAuthInfo.getIsMandatoryBiometricsAuthentication()).isTrue(); } @Test public void prioritizeStrengthErrorBeforeCameraUnavailableError() throws Exception { final BiometricSensor sensor = getFaceSensorWithStrength( BiometricManager.Authenticators.BIOMETRIC_WEAK); final PromptInfo promptInfo = new PromptInfo(); promptInfo.setAuthenticators(BiometricManager.Authenticators.BIOMETRIC_STRONG); promptInfo.setNegativeButtonText(TEST_PACKAGE_NAME); final PreAuthInfo preAuthInfo = PreAuthInfo.create(mTrustManager, mDevicePolicyManager, mSettingObserver, List.of(sensor), USER_ID , promptInfo, TEST_PACKAGE_NAME, false /* checkDevicePolicyManager */, mContext, mBiometricCameraManager, mUserManager); assertThat(preAuthInfo.getCanAuthenticateResult()).isEqualTo(BIOMETRIC_ERROR_NO_HARDWARE); } private BiometricSensor getFingerprintSensor() { BiometricSensor sensor = new BiometricSensor(mContext, SENSOR_ID_FINGERPRINT, TYPE_FINGERPRINT, BiometricManager.Authenticators.BIOMETRIC_STRONG, Loading @@ -372,9 +388,10 @@ public class PreAuthInfoTest { return sensor; } private BiometricSensor getFaceSensor() { private BiometricSensor getFaceSensorWithStrength( @BiometricManager.Authenticators.Types int sensorStrength) { BiometricSensor sensor = new BiometricSensor(mContext, SENSOR_ID_FACE, TYPE_FACE, BiometricManager.Authenticators.BIOMETRIC_STRONG, mFaceAuthenticator) { sensorStrength, mFaceAuthenticator) { @Override boolean confirmationAlwaysRequired(int userId) { return false; Loading @@ -388,4 +405,8 @@ public class PreAuthInfoTest { return sensor; } private BiometricSensor getFaceSensor() { return getFaceSensorWithStrength(BiometricManager.Authenticators.BIOMETRIC_STRONG); } }