[Fingerprint] Send RESULT_CANCELED when back from Add another
Forward the result in the enrolling screen from the finish screen,
so that if the user presses back in "Add another" after enrolling
the first fingerprint, it will return RESULT_CANCELED instead of
RESULT_FINISHED, and go back to find sensor screen.
This results in the following behavioral changes:
- RESULT_FINISHED will only be sent if the user presses "Done" in
FingerprintEnrollFinish. If the user clicks back in
FingerprintEnrollEnrolling, they will always go back to the
previous screen with RESULT_CANCELED, which would either be
FindSensor or FingerprintSettings.
- If the user presses back in FingerprintEnrollFinish, which is only
possible outside of Setup Wizard, they will be back in Find Sensor,
and pressing next will enroll an additional fingerprint.
- Edge case: if the user enrolled the maximum number of
fingerprints, and presses back, they will be bounced all the way
back to Settings > Security.
Bug: 22552741
Change-Id: Ifc5e8a9150491b4303e01ebd0fc17b6d39dd372d
diff --git a/src/com/android/settings/fingerprint/FingerprintEnrollEnrolling.java b/src/com/android/settings/fingerprint/FingerprintEnrollEnrolling.java
index b8ac040..5d4edbd 100644
--- a/src/com/android/settings/fingerprint/FingerprintEnrollEnrolling.java
+++ b/src/com/android/settings/fingerprint/FingerprintEnrollEnrolling.java
@@ -214,9 +214,9 @@
private void launchFinish(byte[] token) {
Intent intent = getFinishIntent();
+ intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, token);
startActivity(intent);
- setResult(RESULT_FINISHED);
finish();
}
diff --git a/src/com/android/settings/fingerprint/FingerprintEnrollFindSensor.java b/src/com/android/settings/fingerprint/FingerprintEnrollFindSensor.java
index 552ed71..1d9d1c5 100644
--- a/src/com/android/settings/fingerprint/FingerprintEnrollFindSensor.java
+++ b/src/com/android/settings/fingerprint/FingerprintEnrollFindSensor.java
@@ -16,6 +16,7 @@
package com.android.settings.fingerprint;
+import android.content.Context;
import android.content.Intent;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Bundle;
@@ -75,6 +76,14 @@
if (resultCode == RESULT_FINISHED) {
setResult(RESULT_FINISHED);
finish();
+ } else {
+ FingerprintManager fpm = getSystemService(FingerprintManager.class);
+ int enrolled = fpm.getEnrolledFingerprints().size();
+ int max = getResources().getInteger(
+ com.android.internal.R.integer.config_fingerprintMaxTemplatesPerUser);
+ if (enrolled >= max) {
+ finish();
+ }
}
} else {
super.onActivityResult(requestCode, resultCode, data);
diff --git a/src/com/android/settings/fingerprint/FingerprintEnrollFinish.java b/src/com/android/settings/fingerprint/FingerprintEnrollFinish.java
index 7e4d656..7ce340d 100644
--- a/src/com/android/settings/fingerprint/FingerprintEnrollFinish.java
+++ b/src/com/android/settings/fingerprint/FingerprintEnrollFinish.java
@@ -55,6 +55,7 @@
@Override
protected void onNextButtonClick() {
+ setResult(RESULT_FINISHED);
finish();
}