diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java index bf04d5ffa3d..4cba1878004 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; @@ -129,6 +130,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; @@ -153,6 +155,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(); @@ -238,7 +243,6 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { return true; }); } - mRestoring = savedInstanceState != null; } @Override @@ -253,11 +257,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(); @@ -498,7 +513,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(