Merge "Support configurable multi-stage UDFPS enrollment" into sc-qpr1-dev

This commit is contained in:
Curtis Belmonte
2021-09-22 17:52:47 +00:00
committed by Android (Google) Code Review

View File

@@ -73,16 +73,6 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
private static final int PROGRESS_BAR_MAX = 10000; private static final int PROGRESS_BAR_MAX = 10000;
/**
* TODO(b/198928407): Consolidate with UdfpsEnrollHelper
*/
private static final int[] STAGE_THRESHOLDS = new int[] {
2, // center
18, // guided
22, // fingertip
38, // edges
};
private static final int STAGE_UNKNOWN = -1; private static final int STAGE_UNKNOWN = -1;
private static final int STAGE_CENTER = 0; private static final int STAGE_CENTER = 0;
private static final int STAGE_GUIDED = 1; private static final int STAGE_GUIDED = 1;
@@ -118,6 +108,7 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
.setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION) .setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION)
.build(); .build();
private FingerprintManager mFingerprintManager;
private boolean mCanAssumeUdfps; private boolean mCanAssumeUdfps;
@Nullable private ProgressBar mProgressBar; @Nullable private ProgressBar mProgressBar;
private ObjectAnimator mProgressAnim; private ObjectAnimator mProgressAnim;
@@ -143,9 +134,9 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
final FingerprintManager fingerprintManager = getSystemService(FingerprintManager.class); mFingerprintManager = getSystemService(FingerprintManager.class);
final List<FingerprintSensorPropertiesInternal> props = final List<FingerprintSensorPropertiesInternal> props =
fingerprintManager.getSensorPropertiesInternal(); mFingerprintManager.getSensorPropertiesInternal();
mCanAssumeUdfps = props.size() == 1 && props.get(0).isAnyUdfpsType(); mCanAssumeUdfps = props.size() == 1 && props.get(0).isAnyUdfpsType();
mAccessibilityManager = getSystemService(AccessibilityManager.class); mAccessibilityManager = getSystemService(AccessibilityManager.class);
@@ -389,11 +380,11 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
} }
final int progressSteps = mSidecar.getEnrollmentSteps() - mSidecar.getEnrollmentRemaining(); final int progressSteps = mSidecar.getEnrollmentSteps() - mSidecar.getEnrollmentRemaining();
if (progressSteps < STAGE_THRESHOLDS[0]) { if (progressSteps < getStageThresholdSteps(0)) {
return STAGE_CENTER; return STAGE_CENTER;
} else if (progressSteps < STAGE_THRESHOLDS[1]) { } else if (progressSteps < getStageThresholdSteps(1)) {
return STAGE_GUIDED; return STAGE_GUIDED;
} else if (progressSteps < STAGE_THRESHOLDS[2]) { } else if (progressSteps < getStageThresholdSteps(2)) {
return STAGE_FINGERTIP; return STAGE_FINGERTIP;
} else { } else {
return STAGE_EDGES; return STAGE_EDGES;
@@ -407,20 +398,30 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
} }
final int progressSteps = mSidecar.getEnrollmentSteps() - mSidecar.getEnrollmentRemaining(); final int progressSteps = mSidecar.getEnrollmentSteps() - mSidecar.getEnrollmentRemaining();
int prevThreshold = 0; int prevThresholdSteps = 0;
for (final int threshold : STAGE_THRESHOLDS) { for (int i = 0; i < mFingerprintManager.getEnrollStageCount(); i++) {
if (progressSteps >= prevThreshold && progressSteps < threshold) { final int thresholdSteps = getStageThresholdSteps(i);
final int adjustedProgress = progressSteps - prevThreshold; if (progressSteps >= prevThresholdSteps && progressSteps < thresholdSteps) {
final int adjustedThreshold = threshold - prevThreshold; final int adjustedProgress = progressSteps - prevThresholdSteps;
final int adjustedThreshold = thresholdSteps - prevThresholdSteps;
return adjustedProgress >= adjustedThreshold / 2; return adjustedProgress >= adjustedThreshold / 2;
} }
prevThreshold = threshold; prevThresholdSteps = thresholdSteps;
} }
// After last enrollment step. // After last enrollment step.
return true; return true;
} }
private int getStageThresholdSteps(int index) {
if (mSidecar == null || mSidecar.getEnrollmentSteps() == -1) {
Log.w(TAG, "getStageThresholdSteps: Enrollment not started yet");
return 1;
}
return Math.round(mSidecar.getEnrollmentSteps()
* mFingerprintManager.getEnrollStageThreshold(index));
}
@Override @Override
public void onEnrollmentHelp(int helpMsgId, CharSequence helpString) { public void onEnrollmentHelp(int helpMsgId, CharSequence helpString) {
if (!TextUtils.isEmpty(helpString)) { if (!TextUtils.isEmpty(helpString)) {
@@ -442,7 +443,6 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
@Override @Override
public void onEnrollmentProgressChange(int steps, int remaining) { public void onEnrollmentProgressChange(int steps, int remaining) {
correctStageThresholds();
updateProgress(true /* animate */); updateProgress(true /* animate */);
updateTitleAndDescription(); updateTitleAndDescription();
clearError(); clearError();
@@ -465,23 +465,6 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
} }
} }
private void correctStageThresholds() {
if (mSidecar == null || !mSidecar.isEnrolling() || mSidecar.getEnrollmentSteps() <= 0) {
Log.d(TAG, "correctStageThresholds: Enrollment not started yet");
return;
}
// Allocate (or subtract) any extra steps for the first enroll stage.
final int extraSteps = mSidecar.getEnrollmentSteps()
- STAGE_THRESHOLDS[STAGE_THRESHOLDS.length - 1];
if (extraSteps != 0) {
for (int stageIndex = 0; stageIndex < STAGE_THRESHOLDS.length; stageIndex++) {
STAGE_THRESHOLDS[stageIndex] =
Math.max(0, STAGE_THRESHOLDS[stageIndex] + extraSteps);
}
}
}
private void updateProgress(boolean animate) { private void updateProgress(boolean animate) {
if (mSidecar == null || !mSidecar.isEnrolling()) { if (mSidecar == null || !mSidecar.isEnrolling()) {
Log.d(TAG, "Enrollment not started yet"); Log.d(TAG, "Enrollment not started yet");