Merge "Hide IKEv2 VPN options if not supported" into rvc-dev
diff --git a/src/com/android/settings/dashboard/DashboardFragmentRegistry.java b/src/com/android/settings/dashboard/DashboardFragmentRegistry.java
index f719494..f8a4f39 100644
--- a/src/com/android/settings/dashboard/DashboardFragmentRegistry.java
+++ b/src/com/android/settings/dashboard/DashboardFragmentRegistry.java
@@ -125,5 +125,9 @@
         for (Map.Entry<String, String> parentToKey : PARENT_TO_CATEGORY_KEY_MAP.entrySet()) {
             CATEGORY_KEY_TO_PARENT_MAP.put(parentToKey.getValue(), parentToKey.getKey());
         }
+
+        // For injection index, redirect CATEGORY_ACCOUNT_DETAIL to AccountDashboardFragment.
+        CATEGORY_KEY_TO_PARENT_MAP.put(CategoryKey.CATEGORY_ACCOUNT_DETAIL,
+                AccountDashboardFragment.class.getName());
     }
 }
diff --git a/src/com/android/settings/password/ConfirmDeviceCredentialActivity.java b/src/com/android/settings/password/ConfirmDeviceCredentialActivity.java
index 3c81eb8..64812fd 100644
--- a/src/com/android/settings/password/ConfirmDeviceCredentialActivity.java
+++ b/src/com/android/settings/password/ConfirmDeviceCredentialActivity.java
@@ -107,6 +107,7 @@
     private int mUserId;
     private int mCredentialMode;
     private boolean mGoingToBackground;
+    private boolean mWaitingForBiometricCallback;
 
     private Executor mExecutor = (runnable -> {
         mHandler.post(runnable);
@@ -116,6 +117,7 @@
         @Override
         public void onAuthenticationError(int errorCode, @NonNull CharSequence errString) {
             if (!mGoingToBackground) {
+                mWaitingForBiometricCallback = false;
                 if (errorCode == BiometricPrompt.BIOMETRIC_ERROR_USER_CANCELED
                         || errorCode == BiometricPrompt.BIOMETRIC_ERROR_CANCELED) {
                     finish();
@@ -123,11 +125,15 @@
                     // All other errors go to some version of CC
                     showConfirmCredentials();
                 }
+            } else if (mWaitingForBiometricCallback) { // mGoingToBackground is true
+                mWaitingForBiometricCallback = false;
+                finish();
             }
         }
 
         @Override
         public void onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result) {
+            mWaitingForBiometricCallback = false;
             mTrustManager.setDeviceLockedForUser(mUserId, false);
             final boolean isStrongAuth = result.getAuthenticationType()
                     == BiometricPrompt.AUTHENTICATION_RESULT_TYPE_DEVICE_CREDENTIAL;
@@ -142,6 +148,7 @@
 
         @Override
         public void onAuthenticationFailed() {
+            mWaitingForBiometricCallback = false;
             mDevicePolicyManager.reportFailedBiometricAttempt(mUserId);
         }
 
@@ -262,6 +269,7 @@
             finish();
         } else if (launchedBiometric) {
             // Keep this activity alive until BiometricPrompt goes away
+            mWaitingForBiometricCallback = true;
         } else {
             Log.d(TAG, "No pattern, password or PIN set.");
             setResult(Activity.RESULT_OK);
@@ -320,7 +328,9 @@
         super.onPause();
         if (!isChangingConfigurations()) {
             mGoingToBackground = true;
-            finish();
+            if (!mWaitingForBiometricCallback) {
+                finish();
+            }
         } else {
             mGoingToBackground = false;
         }
diff --git a/src/com/android/settings/users/MultiUserSwitchBarController.java b/src/com/android/settings/users/MultiUserSwitchBarController.java
index a5fdf9b..58de149 100644
--- a/src/com/android/settings/users/MultiUserSwitchBarController.java
+++ b/src/com/android/settings/users/MultiUserSwitchBarController.java
@@ -52,8 +52,6 @@
         mListener = listener;
         mUserCapabilities = UserCapabilities.create(context);
         mSwitchBar.setChecked(mUserCapabilities.mUserSwitcherEnabled);
-        Settings.Global.putInt(mContext.getContentResolver(),
-                Settings.Global.USER_SWITCHER_ENABLED, mSwitchBar.isChecked() ? 1 : 0);
 
         if (mUserCapabilities.mDisallowSwitchUser) {
             mSwitchBar.setDisabledByAdmin(RestrictedLockUtilsInternal
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentRegistryTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentRegistryTest.java
index c6b2465..10aaad8 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentRegistryTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentRegistryTest.java
@@ -18,6 +18,9 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import com.android.settings.accounts.AccountDashboardFragment;
+import com.android.settingslib.drawer.CategoryKey;
+
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.robolectric.RobolectricTestRunner;
@@ -29,4 +32,12 @@
         assertThat(DashboardFragmentRegistry.CATEGORY_KEY_TO_PARENT_MAP.size())
                 .isEqualTo(DashboardFragmentRegistry.PARENT_TO_CATEGORY_KEY_MAP.size());
     }
+
+    @Test
+    public void accountDetailCategoryShouldRedirectToAccountDashboardFragment() {
+        final String fragment = DashboardFragmentRegistry.CATEGORY_KEY_TO_PARENT_MAP.get(
+                CategoryKey.CATEGORY_ACCOUNT_DETAIL);
+
+        assertThat(fragment).isEqualTo(AccountDashboardFragment.class.getName());
+    }
 }