diff --git a/src/com/android/settings/TrustedCredentialsDialogBuilder.java b/src/com/android/settings/TrustedCredentialsDialogBuilder.java
index 2508d8c..da557fe 100644
--- a/src/com/android/settings/TrustedCredentialsDialogBuilder.java
+++ b/src/com/android/settings/TrustedCredentialsDialogBuilder.java
@@ -38,12 +38,14 @@
 import java.security.cert.X509Certificate;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.function.IntConsumer;
 
 class TrustedCredentialsDialogBuilder extends AlertDialog.Builder {
     public interface DelegateInterface {
         List<X509Certificate> getX509CertsFromCertHolder(CertHolder certHolder);
         void removeOrInstallCert(CertHolder certHolder);
-        boolean startConfirmCredentialIfNotConfirmed(int userId);
+        boolean startConfirmCredentialIfNotConfirmed(int userId,
+                IntConsumer onCredentialConfirmedListener);
     }
 
     private final DialogEventHandler mDialogEventHandler;
@@ -145,7 +147,8 @@
 
         private void onClickTrust() {
             CertHolder certHolder = getCurrentCertInfo();
-            if (!mDelegate.startConfirmCredentialIfNotConfirmed(certHolder.getUserId())) {
+            if (!mDelegate.startConfirmCredentialIfNotConfirmed(certHolder.getUserId(),
+                    this::onCredentialConfirmed)) {
                 mDpm.approveCaCert(certHolder.getAlias(), certHolder.getUserId(), true);
                 nextOrDismiss();
             }
@@ -168,6 +171,14 @@
                     .show();
         }
 
+        private void onCredentialConfirmed(int userId) {
+            if (mDialog.isShowing() && mNeedsApproval && getCurrentCertInfo() != null
+                    && getCurrentCertInfo().getUserId() == userId) {
+                // Treat it as user just clicks "trust" for this cert
+                onClickTrust();
+            }
+        }
+
         private CertHolder getCurrentCertInfo() {
             return mCurrentCertIndex < mCertHolders.length ? mCertHolders[mCurrentCertIndex] : null;
         }
diff --git a/src/com/android/settings/TrustedCredentialsSettings.java b/src/com/android/settings/TrustedCredentialsSettings.java
index 4100e75..92b7f6b 100644
--- a/src/com/android/settings/TrustedCredentialsSettings.java
+++ b/src/com/android/settings/TrustedCredentialsSettings.java
@@ -68,6 +68,7 @@
 import java.util.Collections;
 import java.util.List;
 import java.util.Set;
+import java.util.function.IntConsumer;
 
 public class TrustedCredentialsSettings extends OptionsMenuFragment
         implements TrustedCredentialsDialogBuilder.DelegateInterface {
@@ -159,6 +160,7 @@
     private AliasOperation mAliasOperation;
     private ArraySet<Integer> mConfirmedCredentialUsers;
     private int mConfirmingCredentialUser;
+    private IntConsumer mConfirmingCredentialListener;
     private Set<AdapterData.AliasLoader> mAliasLoaders = new ArraySet<AdapterData.AliasLoader>(2);
     private final SparseArray<KeyChainConnection>
             mKeyChainConnectionByProfileId = new SparseArray<KeyChainConnection>();
@@ -199,6 +201,8 @@
             }
         }
 
+        mConfirmingCredentialListener = null;
+
         IntentFilter filter = new IntentFilter();
         filter.addAction(Intent.ACTION_MANAGED_PROFILE_AVAILABLE);
         filter.addAction(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE);
@@ -246,10 +250,18 @@
     @Override
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
         if (requestCode == REQUEST_CONFIRM_CREDENTIALS) {
-            if (resultCode == Activity.RESULT_OK) {
-                mConfirmedCredentialUsers.add(mConfirmingCredentialUser);
-            }
+            int userId = mConfirmingCredentialUser;
+            IntConsumer listener = mConfirmingCredentialListener;
+            // reset them before calling the listener because the listener may call back to start
+            // activity again. (though it should never happen.)
             mConfirmingCredentialUser = UserHandle.USER_NULL;
+            mConfirmingCredentialListener = null;
+            if (resultCode == Activity.RESULT_OK) {
+                mConfirmedCredentialUsers.add(userId);
+                if (listener != null) {
+                    listener.accept(userId);
+                }
+            }
         }
     }
 
@@ -942,12 +954,18 @@
     }
 
     @Override
-    public boolean startConfirmCredentialIfNotConfirmed(int userId) {
+    public boolean startConfirmCredentialIfNotConfirmed(int userId,
+            IntConsumer onCredentialConfirmedListener) {
         if (mConfirmedCredentialUsers.contains(userId)) {
             // Credential has been confirmed. Don't start activity.
             return false;
         }
-        return startConfirmCredential(userId);
+
+        boolean result = startConfirmCredential(userId);
+        if (result) {
+            mConfirmingCredentialListener = onCredentialConfirmedListener;
+        }
+        return result;
     }
 
     private class AliasOperation extends AsyncTask<Void, Void, Boolean> {
