Merge "Support configurable multi-stage UDFPS enrollment" into sc-qpr1-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
491ef413c3
@@ -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");
|
||||||
|
Reference in New Issue
Block a user