diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java index 26a661a6fbd..ca79a246b06 100644 --- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java +++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java @@ -76,6 +76,7 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { private static final String TAG = "FingerprintEnrollEnrolling"; static final String TAG_SIDECAR = "sidecar"; + static final String KEY_STATE_CANCELED = "is_canceled"; private static final int PROGRESS_BAR_MAX = 10000; @@ -130,6 +131,7 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { private boolean mRestoring; private Vibrator mVibrator; private boolean mIsSetupWizard; + private boolean mIsCanceled; private AccessibilityManager mAccessibilityManager; private boolean mIsAccessibilityEnabled; private LottieAnimationView mIllustrationLottie; @@ -154,6 +156,9 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + if (savedInstanceState != null) { + restoreSavedState(savedInstanceState); + } mFingerprintManager = getSystemService(FingerprintManager.class); final List props = mFingerprintManager.getSensorPropertiesInternal(); @@ -240,7 +245,6 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { return true; }); } - mRestoring = savedInstanceState != null; } @Override @@ -255,11 +259,22 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { if (mCanAssumeUdfps) { // Continue enrollment if restoring (e.g. configuration changed). Otherwise, wait // for the entry animation to complete before starting. - return mRestoring; + return mRestoring && !mIsCanceled; } return true; } + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putBoolean(KEY_STATE_CANCELED, mIsCanceled); + } + + private void restoreSavedState(Bundle savedInstanceState) { + mRestoring = true; + mIsCanceled = savedInstanceState.getBoolean(KEY_STATE_CANCELED, false); + } + @Override protected void onStart() { super.onStart(); @@ -500,7 +515,10 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { @Override public void onEnrollmentError(int errMsgId, CharSequence errString) { FingerprintErrorDialog.showErrorDialog(this, errMsgId); + mIsCanceled = true; + cancelEnrollment(); stopIconAnimation(); + stopListenOrientationEvent(); if (!mCanAssumeUdfps) { mErrorText.removeCallbacks(mTouchAgainRunnable); } diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintErrorDialog.java b/src/com/android/settings/biometrics/fingerprint/FingerprintErrorDialog.java index cea44ba9720..9f9efdc6995 100644 --- a/src/com/android/settings/biometrics/fingerprint/FingerprintErrorDialog.java +++ b/src/com/android/settings/biometrics/fingerprint/FingerprintErrorDialog.java @@ -18,11 +18,13 @@ 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 static com.android.settings.biometrics.fingerprint.FingerprintEnrollEnrolling.KEY_STATE_CANCELED; import android.app.Activity; import android.app.Dialog; import android.app.settings.SettingsEnums; import android.content.DialogInterface; +import android.content.Intent; import android.hardware.biometrics.BiometricConstants; import android.hardware.fingerprint.FingerprintManager; import android.os.Bundle; @@ -68,7 +70,11 @@ public class FingerprintErrorDialog extends InstrumentedDialogFragment { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); - getActivity().recreate(); + Activity activity = getActivity(); + Intent intent = activity.getIntent(); + intent.putExtra(KEY_STATE_CANCELED, false); + activity.startActivity(intent); + activity.finish(); } }) .setNegativeButton(