Merge cherrypicks of [9007561, 9007562, 9007563, 9007600, 9007801, 9007895, 9007389] into qt-release

Change-Id: Ib68db973c7a9b5875ecd65bcb683793978020065
diff --git a/src/com/android/settings/password/BiometricFragment.java b/src/com/android/settings/password/BiometricFragment.java
index bd5a10d..66b665b 100644
--- a/src/com/android/settings/password/BiometricFragment.java
+++ b/src/com/android/settings/password/BiometricFragment.java
@@ -58,11 +58,13 @@
     private Bundle mBundle;
     private BiometricPrompt mBiometricPrompt;
     private CancellationSignal mCancellationSignal;
+    private boolean mAuthenticating;
 
     private AuthenticationCallback mAuthenticationCallback =
             new AuthenticationCallback() {
         @Override
         public void onAuthenticationError(int error, @NonNull CharSequence message) {
+            mAuthenticating = false;
             mClientExecutor.execute(() -> {
                 mClientCallback.onAuthenticationError(error, message);
             });
@@ -71,6 +73,7 @@
 
         @Override
         public void onAuthenticationSucceeded(AuthenticationResult result) {
+            mAuthenticating = false;
             mClientExecutor.execute(() -> {
                 mClientCallback.onAuthenticationSucceeded(result);
             });
@@ -134,6 +137,10 @@
         }
     }
 
+    boolean isAuthenticating() {
+        return mAuthenticating;
+    }
+
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -180,6 +187,7 @@
         mCancellationSignal = new CancellationSignal();
 
         // TODO: CC doesn't use crypto for now
+        mAuthenticating = true;
         mBiometricPrompt.authenticateUser(mCancellationSignal, mClientExecutor,
                 mAuthenticationCallback, mUserId, mCancelCallback);
     }
diff --git a/src/com/android/settings/password/ConfirmDeviceCredentialActivity.java b/src/com/android/settings/password/ConfirmDeviceCredentialActivity.java
index 53841e8..8476f92 100644
--- a/src/com/android/settings/password/ConfirmDeviceCredentialActivity.java
+++ b/src/com/android/settings/password/ConfirmDeviceCredentialActivity.java
@@ -251,7 +251,10 @@
         if (!isChangingConfigurations()) {
             mGoingToBackground = true;
             if (mBiometricFragment != null) {
-                mBiometricFragment.cancel();
+                Log.d(TAG, "Authenticating: " + mBiometricFragment.isAuthenticating());
+                if (mBiometricFragment.isAuthenticating()) {
+                    mBiometricFragment.cancel();
+                }
             }
 
             if (mIsFallback && !mCCLaunched) {