Merge "Update error prioritization in PreAutInfo" into sc-dev

This commit is contained in:
Kevin Chyn
2021-04-06 23:13:01 +00:00
committed by Android (Google) Code Review

View File

@@ -259,6 +259,21 @@ class PreAuthInfo {
this.confirmationRequested = confirmationRequested;
}
private Pair<BiometricSensor, Integer> calculateErrorByPriority() {
// If the caller requested STRONG, and the device contains both STRONG and non-STRONG
// sensors, prioritize BIOMETRIC_NOT_ENROLLED over the weak sensor's
// BIOMETRIC_INSUFFICIENT_STRENGTH error. Pretty sure we can always prioritize
// BIOMETRIC_NOT_ENROLLED over any other error (unless of course its calculation is
// wrong, in which case we should fix that instead).
for (Pair<BiometricSensor, Integer> pair : ineligibleSensors) {
if (pair.second == BIOMETRIC_NOT_ENROLLED) {
return pair;
}
}
return ineligibleSensors.get(0);
}
/**
* With {@link PreAuthInfo} generated with the requested authenticators from the public API
* surface, combined with the actual sensor/credential and user/system settings, calculate the
@@ -281,8 +296,9 @@ class PreAuthInfo {
} else {
// Pick the first sensor error if it exists
if (!ineligibleSensors.isEmpty()) {
modality |= ineligibleSensors.get(0).first.modality;
status = ineligibleSensors.get(0).second;
final Pair<BiometricSensor, Integer> pair = calculateErrorByPriority();
modality |= pair.first.modality;
status = pair.second;
} else {
modality |= TYPE_CREDENTIAL;
status = CREDENTIAL_NOT_ENROLLED;
@@ -297,8 +313,9 @@ class PreAuthInfo {
} else {
// Pick the first sensor error if it exists
if (!ineligibleSensors.isEmpty()) {
modality |= ineligibleSensors.get(0).first.modality;
status = ineligibleSensors.get(0).second;
final Pair<BiometricSensor, Integer> pair = calculateErrorByPriority();
modality |= pair.first.modality;
status = pair.second;
} else {
modality |= TYPE_NONE;
status = BIOMETRIC_NO_HARDWARE;