Merge "Split acquire messages for face auth and enrollment" into sc-dev

This commit is contained in:
Curtis Belmonte
2021-02-12 21:59:06 +00:00
committed by Android (Google) Code Review
2 changed files with 123 additions and 64 deletions

View File

@@ -832,67 +832,6 @@ public class FaceManager implements BiometricAuthenticator, BiometricFaceConstan
return "";
}
/**
* @hide
*/
public static String getAcquiredString(Context context, int acquireInfo, int vendorCode) {
switch (acquireInfo) {
case FACE_ACQUIRED_GOOD:
return null;
case FACE_ACQUIRED_INSUFFICIENT:
return context.getString(R.string.face_acquired_insufficient);
case FACE_ACQUIRED_TOO_BRIGHT:
return context.getString(R.string.face_acquired_too_bright);
case FACE_ACQUIRED_TOO_DARK:
return context.getString(R.string.face_acquired_too_dark);
case FACE_ACQUIRED_TOO_CLOSE:
return context.getString(R.string.face_acquired_too_close);
case FACE_ACQUIRED_TOO_FAR:
return context.getString(R.string.face_acquired_too_far);
case FACE_ACQUIRED_TOO_HIGH:
return context.getString(R.string.face_acquired_too_high);
case FACE_ACQUIRED_TOO_LOW:
return context.getString(R.string.face_acquired_too_low);
case FACE_ACQUIRED_TOO_RIGHT:
return context.getString(R.string.face_acquired_too_right);
case FACE_ACQUIRED_TOO_LEFT:
return context.getString(R.string.face_acquired_too_left);
case FACE_ACQUIRED_POOR_GAZE:
return context.getString(R.string.face_acquired_poor_gaze);
case FACE_ACQUIRED_NOT_DETECTED:
return context.getString(R.string.face_acquired_not_detected);
case FACE_ACQUIRED_TOO_MUCH_MOTION:
return context.getString(R.string.face_acquired_too_much_motion);
case FACE_ACQUIRED_RECALIBRATE:
return context.getString(R.string.face_acquired_recalibrate);
case FACE_ACQUIRED_TOO_DIFFERENT:
return context.getString(R.string.face_acquired_too_different);
case FACE_ACQUIRED_TOO_SIMILAR:
return context.getString(R.string.face_acquired_too_similar);
case FACE_ACQUIRED_PAN_TOO_EXTREME:
return context.getString(R.string.face_acquired_pan_too_extreme);
case FACE_ACQUIRED_TILT_TOO_EXTREME:
return context.getString(R.string.face_acquired_tilt_too_extreme);
case FACE_ACQUIRED_ROLL_TOO_EXTREME:
return context.getString(R.string.face_acquired_roll_too_extreme);
case FACE_ACQUIRED_FACE_OBSCURED:
return context.getString(R.string.face_acquired_obscured);
case FACE_ACQUIRED_START:
return null;
case FACE_ACQUIRED_SENSOR_DIRTY:
return context.getString(R.string.face_acquired_sensor_dirty);
case FACE_ACQUIRED_VENDOR: {
String[] msgArray = context.getResources().getStringArray(
R.array.face_acquired_vendor);
if (vendorCode < msgArray.length) {
return msgArray[vendorCode];
}
}
}
Slog.w(TAG, "Invalid acquired message: " + acquireInfo + ", " + vendorCode);
return null;
}
/**
* Used so BiometricPrompt can map the face ones onto existing public constants.
* @hide
@@ -1387,7 +1326,7 @@ public class FaceManager implements BiometricAuthenticator, BiometricFaceConstan
final int acquireInfo = frame.getData().getAcquiredInfo();
final int vendorCode = frame.getData().getVendorCode();
final int helpCode = getHelpCode(acquireInfo, vendorCode);
final String helpMessage = getAcquiredString(mContext, acquireInfo, vendorCode);
final String helpMessage = getAuthHelpMessage(mContext, acquireInfo, vendorCode);
mAuthenticationCallback.onAuthenticationAcquired(acquireInfo);
// Ensure that only non-null help messages are sent.
@@ -1405,7 +1344,7 @@ public class FaceManager implements BiometricAuthenticator, BiometricFaceConstan
final int acquireInfo = frame.getData().getAcquiredInfo();
final int vendorCode = frame.getData().getVendorCode();
final int helpCode = getHelpCode(acquireInfo, vendorCode);
final String helpMessage = getAcquiredString(mContext, acquireInfo, vendorCode);
final String helpMessage = getEnrollHelpMessage(mContext, acquireInfo, vendorCode);
mEnrollmentCallback.onEnrollmentHelp(helpCode, helpMessage);
}
}
@@ -1415,4 +1354,124 @@ public class FaceManager implements BiometricAuthenticator, BiometricFaceConstan
? vendorCode + FACE_ACQUIRED_VENDOR_BASE
: acquireInfo;
}
/**
* @hide
*/
@Nullable
public static String getAuthHelpMessage(Context context, int acquireInfo, int vendorCode) {
switch (acquireInfo) {
// No help message is needed for a good capture.
case FACE_ACQUIRED_GOOD:
case FACE_ACQUIRED_START:
return null;
// Consolidate positional feedback to reduce noise during authentication.
case FACE_ACQUIRED_NOT_DETECTED:
case FACE_ACQUIRED_TOO_CLOSE:
case FACE_ACQUIRED_TOO_FAR:
case FACE_ACQUIRED_TOO_HIGH:
case FACE_ACQUIRED_TOO_LOW:
case FACE_ACQUIRED_TOO_RIGHT:
case FACE_ACQUIRED_TOO_LEFT:
case FACE_ACQUIRED_POOR_GAZE:
case FACE_ACQUIRED_PAN_TOO_EXTREME:
case FACE_ACQUIRED_TILT_TOO_EXTREME:
case FACE_ACQUIRED_ROLL_TOO_EXTREME:
return context.getString(R.string.face_acquired_not_detected);
// Provide more detailed feedback for other soft errors.
case FACE_ACQUIRED_INSUFFICIENT:
return context.getString(R.string.face_acquired_insufficient);
case FACE_ACQUIRED_TOO_BRIGHT:
return context.getString(R.string.face_acquired_too_bright);
case FACE_ACQUIRED_TOO_DARK:
return context.getString(R.string.face_acquired_too_dark);
case FACE_ACQUIRED_TOO_MUCH_MOTION:
return context.getString(R.string.face_acquired_too_much_motion);
case FACE_ACQUIRED_RECALIBRATE:
return context.getString(R.string.face_acquired_recalibrate);
case FACE_ACQUIRED_TOO_DIFFERENT:
return context.getString(R.string.face_acquired_too_different);
case FACE_ACQUIRED_TOO_SIMILAR:
return context.getString(R.string.face_acquired_too_similar);
case FACE_ACQUIRED_FACE_OBSCURED:
return context.getString(R.string.face_acquired_obscured);
case FACE_ACQUIRED_SENSOR_DIRTY:
return context.getString(R.string.face_acquired_sensor_dirty);
// Find and return the appropriate vendor-specific message.
case FACE_ACQUIRED_VENDOR: {
String[] msgArray = context.getResources().getStringArray(
R.array.face_acquired_vendor);
if (vendorCode < msgArray.length) {
return msgArray[vendorCode];
}
}
}
Slog.w(TAG, "Unknown authentication acquired message: " + acquireInfo + ", " + vendorCode);
return null;
}
/**
* @hide
*/
@Nullable
public static String getEnrollHelpMessage(Context context, int acquireInfo, int vendorCode) {
switch (acquireInfo) {
case FACE_ACQUIRED_GOOD:
case FACE_ACQUIRED_START:
return null;
case FACE_ACQUIRED_INSUFFICIENT:
return context.getString(R.string.face_acquired_insufficient);
case FACE_ACQUIRED_TOO_BRIGHT:
return context.getString(R.string.face_acquired_too_bright);
case FACE_ACQUIRED_TOO_DARK:
return context.getString(R.string.face_acquired_too_dark);
case FACE_ACQUIRED_TOO_CLOSE:
return context.getString(R.string.face_acquired_too_close);
case FACE_ACQUIRED_TOO_FAR:
return context.getString(R.string.face_acquired_too_far);
case FACE_ACQUIRED_TOO_HIGH:
return context.getString(R.string.face_acquired_too_high);
case FACE_ACQUIRED_TOO_LOW:
return context.getString(R.string.face_acquired_too_low);
case FACE_ACQUIRED_TOO_RIGHT:
return context.getString(R.string.face_acquired_too_right);
case FACE_ACQUIRED_TOO_LEFT:
return context.getString(R.string.face_acquired_too_left);
case FACE_ACQUIRED_POOR_GAZE:
return context.getString(R.string.face_acquired_poor_gaze);
case FACE_ACQUIRED_NOT_DETECTED:
return context.getString(R.string.face_acquired_not_detected);
case FACE_ACQUIRED_TOO_MUCH_MOTION:
return context.getString(R.string.face_acquired_too_much_motion);
case FACE_ACQUIRED_RECALIBRATE:
return context.getString(R.string.face_acquired_recalibrate);
case FACE_ACQUIRED_TOO_DIFFERENT:
return context.getString(R.string.face_acquired_too_different);
case FACE_ACQUIRED_TOO_SIMILAR:
return context.getString(R.string.face_acquired_too_similar);
case FACE_ACQUIRED_PAN_TOO_EXTREME:
return context.getString(R.string.face_acquired_pan_too_extreme);
case FACE_ACQUIRED_TILT_TOO_EXTREME:
return context.getString(R.string.face_acquired_tilt_too_extreme);
case FACE_ACQUIRED_ROLL_TOO_EXTREME:
return context.getString(R.string.face_acquired_roll_too_extreme);
case FACE_ACQUIRED_FACE_OBSCURED:
return context.getString(R.string.face_acquired_obscured);
case FACE_ACQUIRED_SENSOR_DIRTY:
return context.getString(R.string.face_acquired_sensor_dirty);
case FACE_ACQUIRED_VENDOR: {
String[] msgArray = context.getResources().getStringArray(
R.array.face_acquired_vendor);
if (vendorCode < msgArray.length) {
return msgArray[vendorCode];
}
}
}
Slog.w(TAG, "Unknown enrollment acquired message: " + acquireInfo + ", " + vendorCode);
return null;
}
}

View File

@@ -798,7 +798,7 @@ public final class AuthSession implements IBinder.DeathRecipient {
case BiometricAuthenticator.TYPE_FINGERPRINT:
return FingerprintManager.getAcquiredString(mContext, acquiredInfo, vendorCode);
case BiometricAuthenticator.TYPE_FACE:
return FaceManager.getAcquiredString(mContext, acquiredInfo, vendorCode);
return FaceManager.getAuthHelpMessage(mContext, acquiredInfo, vendorCode);
default:
return null;
}