Finish biometric enroll screens when backgrounded
Currently, there are some biometric security setting and enrollment screens which remain open after the user has backgrounded them. This means that they can later be resumed without requiring the user to confirm their device credential as normal. This commit fixes the issue in AOSP by adding logic to the affected biometric enrollment/setting activities in to finish() with RESULT_TIMEOUT in onStop(). We don't want to finish() these activities prematurely if the user is currently in a wizard setup flow, however. In that case, this commit ensures that the newly added logic will not run. Test: Pixel 3 - Background at each step of fingerprint enroll => finish Test: Pixel 3 - Rotate at each step of fingerprint enroll => no finish Test: Pixel 3 - Proceed though fingerprint setup wizard => no change Bug: 142544519 Change-Id: I8ec0fa1e30bafe097d9dc82991ff786ebf24844b
This commit is contained in:
@@ -115,10 +115,15 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase {
|
||||
|
||||
@Override
|
||||
protected void onStop() {
|
||||
super.onStop();
|
||||
if (mAnimation != null) {
|
||||
mAnimation.pauseAnimation();
|
||||
}
|
||||
super.onStop();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean shouldFinishWhenBackgrounded() {
|
||||
return super.shouldFinishWhenBackgrounded() && !mNextClicked;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -163,26 +168,25 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase {
|
||||
finish();
|
||||
}
|
||||
} else if (requestCode == ENROLL_REQUEST) {
|
||||
if (resultCode == RESULT_FINISHED) {
|
||||
setResult(RESULT_FINISHED);
|
||||
finish();
|
||||
} else if (resultCode == RESULT_SKIP) {
|
||||
setResult(RESULT_SKIP);
|
||||
finish();
|
||||
} else if (resultCode == RESULT_TIMEOUT) {
|
||||
setResult(RESULT_TIMEOUT);
|
||||
finish();
|
||||
} else {
|
||||
FingerprintManager fpm = Utils.getFingerprintManagerOrNull(this);
|
||||
int enrolled = fpm.getEnrolledFingerprints().size();
|
||||
int max = getResources().getInteger(
|
||||
com.android.internal.R.integer.config_fingerprintMaxTemplatesPerUser);
|
||||
if (enrolled >= max) {
|
||||
switch (resultCode) {
|
||||
case RESULT_FINISHED:
|
||||
case RESULT_SKIP:
|
||||
case RESULT_TIMEOUT:
|
||||
setResult(resultCode);
|
||||
finish();
|
||||
} else {
|
||||
// We came back from enrolling but it wasn't completed, start again.
|
||||
startLookingForFingerprint();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
FingerprintManager fpm = Utils.getFingerprintManagerOrNull(this);
|
||||
int enrolled = fpm.getEnrolledFingerprints().size();
|
||||
int max = getResources().getInteger(
|
||||
com.android.internal.R.integer.config_fingerprintMaxTemplatesPerUser);
|
||||
if (enrolled >= max) {
|
||||
finish();
|
||||
} else {
|
||||
// We came back from enrolling but it wasn't completed, start again.
|
||||
startLookingForFingerprint();
|
||||
}
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
|
Reference in New Issue
Block a user