diff --git a/res/values/strings.xml b/res/values/strings.xml
index e065fbdfd69..d938611fc19 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1126,6 +1126,8 @@
Name
OK
+
+ Try again
Delete
@@ -1282,9 +1284,9 @@
Touch the sensor on the back of your phone. Use your index finger.
- Enrollment was not completed
+ Fingerprint setup timed out
- Fingerprint enrollment time limit reached. Try again.
+ Try again now or set up your fingerprint later in Settings
Fingerprint enrollment didn\'t work. Try again or use a different finger.
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintErrorDialog.java b/src/com/android/settings/biometrics/fingerprint/FingerprintErrorDialog.java
index a238119de87..cea44ba9720 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintErrorDialog.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintErrorDialog.java
@@ -16,20 +16,78 @@
package com.android.settings.biometrics.fingerprint;
+import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_FINISHED;
+import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_TIMEOUT;
+
+import android.app.Activity;
+import android.app.Dialog;
import android.app.settings.SettingsEnums;
+import android.content.DialogInterface;
+import android.hardware.biometrics.BiometricConstants;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Bundle;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.FragmentManager;
import com.android.settings.R;
import com.android.settings.biometrics.BiometricEnrollBase;
-import com.android.settings.biometrics.BiometricErrorDialog;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+
+/** Fingerprint error dialog, will be shown when an error occurs during fingerprint enrollment. */
+public class FingerprintErrorDialog extends InstrumentedDialogFragment {
+
+ public static final String KEY_ERROR_MSG = "error_msg";
+ public static final String KEY_ERROR_ID = "error_id";
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ CharSequence errorString = getArguments().getCharSequence(KEY_ERROR_MSG);
+ final int errMsgId = getArguments().getInt(KEY_ERROR_ID);
+ boolean wasTimeout = errMsgId == BiometricConstants.BIOMETRIC_ERROR_TIMEOUT;
+
+ builder.setTitle(R.string.security_settings_fingerprint_enroll_error_dialog_title)
+ .setMessage(errorString)
+ .setCancelable(false)
+ .setPositiveButton(
+ R.string.security_settings_fingerprint_enroll_dialog_ok,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ Activity activity = getActivity();
+ activity.setResult(RESULT_FINISHED);
+ activity.finish();
+ }
+ });
+ if (wasTimeout) {
+ builder.setPositiveButton(
+ R.string.security_settings_fingerprint_enroll_dialog_try_again,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ getActivity().recreate();
+ }
+ })
+ .setNegativeButton(
+ R.string.security_settings_fingerprint_enroll_dialog_ok,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ Activity activity = getActivity();
+ activity.setResult(RESULT_TIMEOUT);
+ activity.finish();
+ }
+ });
+ }
+ AlertDialog dialog = builder.create();
+ dialog.setCanceledOnTouchOutside(false);
+ return dialog;
+ }
-/**
- * Fingerprint error dialog, will be shown when an error occurs during fingerprint enrollment.
- */
-public class FingerprintErrorDialog extends BiometricErrorDialog {
public static void showErrorDialog(BiometricEnrollBase host, int errMsgId) {
if (host.isFinishing()) {
return;
@@ -48,8 +106,8 @@ public class FingerprintErrorDialog extends BiometricErrorDialog {
private static int getErrorMessage(int errMsgId) {
switch (errMsgId) {
case FingerprintManager.FINGERPRINT_ERROR_TIMEOUT:
- // This message happens when the underlying crypto layer decides to revoke the
- // enrollment auth token.
+ // This message happens when the underlying crypto layer decides to revoke
+ // the enrollment auth token.
return R.string.security_settings_fingerprint_enroll_error_timeout_dialog_message;
case FingerprintManager.FINGERPRINT_ERROR_BAD_CALIBRATION:
return R.string.security_settings_fingerprint_bad_calibration;
@@ -68,16 +126,6 @@ public class FingerprintErrorDialog extends BiometricErrorDialog {
return dialog;
}
- @Override
- public int getTitleResId() {
- return R.string.security_settings_fingerprint_enroll_error_dialog_title;
- }
-
- @Override
- public int getOkButtonTextResId() {
- return R.string.security_settings_fingerprint_enroll_dialog_ok;
- }
-
@Override
public int getMetricsCategory() {
return SettingsEnums.DIALOG_FINGERPINT_ERROR;