diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java index 8def63d2c73..1ad34ba7cfa 100644 --- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java +++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java @@ -46,7 +46,6 @@ import androidx.appcompat.app.AlertDialog; import com.android.settings.R; import com.android.settings.biometrics.BiometricEnrollSidecar; -import com.android.settings.biometrics.BiometricErrorDialog; import com.android.settings.biometrics.BiometricUtils; import com.android.settings.biometrics.BiometricsEnrollEnrolling; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; @@ -111,32 +110,6 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { private boolean mRestoring; private Vibrator mVibrator; - public static class FingerprintErrorDialog extends BiometricErrorDialog { - static FingerprintErrorDialog newInstance(CharSequence msg, int msgId) { - FingerprintErrorDialog dialog = new FingerprintErrorDialog(); - Bundle args = new Bundle(); - args.putCharSequence(KEY_ERROR_MSG, msg); - args.putInt(KEY_ERROR_ID, msgId); - dialog.setArguments(args); - return dialog; - } - - @Override - public int getMetricsCategory() { - return SettingsEnums.DIALOG_FINGERPINT_ERROR; - } - - @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 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -339,19 +312,7 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { @Override public void onEnrollmentError(int errMsgId, CharSequence errString) { - int msgId; - switch (errMsgId) { - case FingerprintManager.FINGERPRINT_ERROR_TIMEOUT: - // This message happens when the underlying crypto layer decides to revoke the - // enrollment auth token. - msgId = R.string.security_settings_fingerprint_enroll_error_timeout_dialog_message; - break; - default: - // There's nothing specific to tell the user about. Ask them to try again. - msgId = R.string.security_settings_fingerprint_enroll_error_generic_dialog_message; - break; - } - showErrorDialog(getText(msgId), errMsgId); + FingerprintErrorDialog.showErrorDialog(this, errMsgId); stopIconAnimation(); if (!mCanAssumeUdfps) { mErrorText.removeCallbacks(mTouchAgainRunnable); @@ -398,11 +359,6 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { return PROGRESS_BAR_MAX * progress / (steps + 1); } - private void showErrorDialog(CharSequence msg, int msgId) { - BiometricErrorDialog dlg = FingerprintErrorDialog.newInstance(msg, msgId); - dlg.show(getSupportFragmentManager(), FingerprintErrorDialog.class.getName()); - } - private void showIconTouchDialog() { mIconTouchCount = 0; new IconTouchDialog().show(getSupportFragmentManager(), null /* tag */); diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java index 8bc03acb4f9..faa0c8414a1 100644 --- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java +++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java @@ -28,7 +28,7 @@ import androidx.annotation.Nullable; import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.biometrics.BiometricEnrollBase; -import com.android.settings.biometrics.BiometricEnrollSidecar.Listener; +import com.android.settings.biometrics.BiometricEnrollSidecar; import com.android.settings.biometrics.BiometricUtils; import com.android.settings.password.ChooseLockSettingsHelper; @@ -40,7 +40,8 @@ import java.util.List; /** * Activity explaining the fingerprint sensor location for fingerprint enrollment. */ -public class FingerprintEnrollFindSensor extends BiometricEnrollBase { +public class FingerprintEnrollFindSensor extends BiometricEnrollBase implements + BiometricEnrollSidecar.Listener { @Nullable private FingerprintFindSensorAnimation mAnimation; @@ -139,25 +140,27 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase { .add(mSidecar, FingerprintEnrollEnrolling.TAG_SIDECAR) .commitAllowingStateLoss(); } - mSidecar.setListener(new Listener() { - @Override - public void onEnrollmentProgressChange(int steps, int remaining) { - mNextClicked = true; - proceedToEnrolling(true /* cancelEnrollment */); - } + mSidecar.setListener(this); + } - @Override - public void onEnrollmentHelp(int helpMsgId, CharSequence helpString) { - } + @Override + public void onEnrollmentProgressChange(int steps, int remaining) { + mNextClicked = true; + proceedToEnrolling(true /* cancelEnrollment */); + } - @Override - public void onEnrollmentError(int errMsgId, CharSequence errString) { - if (mNextClicked && errMsgId == FingerprintManager.FINGERPRINT_ERROR_CANCELED) { - mNextClicked = false; - proceedToEnrolling(false /* cancelEnrollment */); - } - } - }); + @Override + public void onEnrollmentHelp(int helpMsgId, CharSequence helpString) { + } + + @Override + public void onEnrollmentError(int errMsgId, CharSequence errString) { + if (mNextClicked && errMsgId == FingerprintManager.FINGERPRINT_ERROR_CANCELED) { + mNextClicked = false; + proceedToEnrolling(false /* cancelEnrollment */); + } else { + FingerprintErrorDialog.showErrorDialog(this, errMsgId); + } } @Override diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintErrorDialog.java b/src/com/android/settings/biometrics/fingerprint/FingerprintErrorDialog.java new file mode 100644 index 00000000000..3173a347c4e --- /dev/null +++ b/src/com/android/settings/biometrics/fingerprint/FingerprintErrorDialog.java @@ -0,0 +1,72 @@ +/* + * Copyright 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.biometrics.fingerprint; + +import android.app.settings.SettingsEnums; +import android.hardware.fingerprint.FingerprintManager; +import android.os.Bundle; + +import com.android.settings.R; +import com.android.settings.biometrics.BiometricEnrollBase; +import com.android.settings.biometrics.BiometricErrorDialog; + +/** + * 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) { + final CharSequence errMsg = host.getText(getErrorMessage(errMsgId)); + final FingerprintErrorDialog dialog = newInstance(errMsg, errMsgId); + dialog.show(host.getSupportFragmentManager(), FingerprintErrorDialog.class.getName()); + } + + 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. + return R.string.security_settings_fingerprint_enroll_error_timeout_dialog_message; + default: + // There's nothing specific to tell the user about. Ask them to try again. + return R.string.security_settings_fingerprint_enroll_error_generic_dialog_message; + } + } + + private static FingerprintErrorDialog newInstance(CharSequence msg, int msgId) { + FingerprintErrorDialog dialog = new FingerprintErrorDialog(); + Bundle args = new Bundle(); + args.putCharSequence(KEY_ERROR_MSG, msg); + args.putInt(KEY_ERROR_ID, msgId); + dialog.setArguments(args); + 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; + } +}