Merge "Do not show 2nd FingerprintErrorDialog" into tm-qpr-dev am: 4fd86cc096 am: 45bab9ddc4

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/20120050

Change-Id: Ia6c96f2c1f1ea869f1fdaebeebd977b0e1612263
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
index d65c8c7..9598019 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
@@ -168,7 +168,8 @@
     private Vibrator mVibrator;
     private boolean mIsSetupWizard;
     private boolean mIsOrientationChanged;
-    private boolean mIsCanceled;
+    @VisibleForTesting
+    boolean mIsCanceled;
     private AccessibilityManager mAccessibilityManager;
     private boolean mIsAccessibilityEnabled;
     private LottieAnimationView mIllustrationLottie;
@@ -196,7 +197,7 @@
 
     @Override
     public void onWindowFocusChanged(boolean hasFocus) {
-        if (hasFocus) {
+        if (hasFocus || mIsCanceled) {
             return;
         }
 
@@ -411,8 +412,10 @@
 
     @VisibleForTesting
     void onCancelEnrollment(@IdRes int errorMsgId) {
-        FingerprintErrorDialog.showErrorDialog(this, errorMsgId);
+        // showErrorDialog() will cause onWindowFocusChanged(false), set mIsCanceled to false
+        // before showErrorDialog() to prevent that another error dialog is triggered again.
         mIsCanceled = true;
+        FingerprintErrorDialog.showErrorDialog(this, errorMsgId);
         mIsOrientationChanged = false;
         cancelEnrollment();
         stopIconAnimation();
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintErrorDialog.java b/src/com/android/settings/biometrics/fingerprint/FingerprintErrorDialog.java
index 9f9efdc..39d35dc 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintErrorDialog.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintErrorDialog.java
@@ -72,6 +72,7 @@
                                     dialog.dismiss();
                                     Activity activity = getActivity();
                                     Intent intent = activity.getIntent();
+                                    intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
                                     intent.putExtra(KEY_STATE_CANCELED, false);
                                     activity.startActivity(intent);
                                     activity.finish();
diff --git a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java
index b808319..a7b7501 100644
--- a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java
@@ -151,6 +151,16 @@
     }
 
     @Test
+    public void fingerprintUdfpsOverlayEnrollment_loseFocusWithCancelFlag_shouldNotCancelAgain() {
+        initializeActivityFor(TYPE_UDFPS_OPTICAL);
+
+        mActivity.mIsCanceled = true;
+        mActivity.onWindowFocusChanged(true);
+
+        verify(mActivity, never()).onCancelEnrollment(anyInt());
+    }
+
+    @Test
     public void fingerprintSfpsEnroll_PlaysAllAnimationsAssetsCorrectly() {
         initializeActivityFor(TYPE_POWER_BUTTON);