From 548f6f36c1b3a6558a3dbb99ec451f602fd98238 Mon Sep 17 00:00:00 2001 From: Joshua McCloskey Date: Wed, 8 Jun 2022 01:06:12 +0000 Subject: [PATCH] Add functionality to restart fp enrollment. Test: Tested manually via SUW that restarting enrollment works as expected. Test: Tested manually via settings that restarting enrollment works as expected. Fixes: 234887288 Change-Id: I815392269da786d2dfd157267919a09281af6277 --- res/values/strings.xml | 6 +- .../fingerprint/FingerprintErrorDialog.java | 82 +++++++++++++++---- 2 files changed, 69 insertions(+), 19 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 1ac6437720d..343705fe232 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1121,6 +1121,8 @@ Name OK + + Try again Delete @@ -1277,9 +1279,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;