Merge "Cred mng app settings - close onRemove" into sc-dev
diff --git a/src/com/android/settings/security/CredentialManagementAppButtonsController.java b/src/com/android/settings/security/CredentialManagementAppButtonsController.java
index c6afded..fe5e45b 100644
--- a/src/com/android/settings/security/CredentialManagementAppButtonsController.java
+++ b/src/com/android/settings/security/CredentialManagementAppButtonsController.java
@@ -16,11 +16,8 @@
 
 package com.android.settings.security;
 
-import android.app.AppOpsManager;
 import android.app.admin.DevicePolicyEventLogger;
 import android.content.Context;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager;
 import android.os.Handler;
 import android.os.Looper;
 import android.os.RemoteException;
@@ -29,6 +26,7 @@
 import android.stats.devicepolicy.DevicePolicyEnums;
 import android.util.Log;
 
+import androidx.fragment.app.Fragment;
 import androidx.preference.PreferenceScreen;
 
 import com.android.settings.R;
@@ -48,16 +46,15 @@
 
     private final ExecutorService mExecutor = Executors.newSingleThreadExecutor();
     private final Handler mHandler = new Handler(Looper.getMainLooper());
-
-    private final PackageManager mPackageManager;
-    private final AppOpsManager mAppOpsManager;
     private boolean mHasCredentialManagerPackage;
-    private String mCredentialManagerPackageName;
+    private Fragment mFragment;
 
     public CredentialManagementAppButtonsController(Context context, String preferenceKey) {
         super(context, preferenceKey);
-        mPackageManager = context.getPackageManager();
-        mAppOpsManager = context.getSystemService(AppOpsManager.class);
+    }
+
+    public void setParentFragment(Fragment fragment) {
+        mFragment = fragment;
     }
 
     @Override
@@ -73,7 +70,6 @@
             try {
                 IKeyChainService service = KeyChain.bind(mContext).getService();
                 mHasCredentialManagerPackage = service.hasCredentialManagementApp();
-                mCredentialManagerPackageName = service.getCredentialManagementAppPackageName();
             } catch (InterruptedException | RemoteException e) {
                 Log.e(TAG, "Unable to display credential management app buttons");
             }
@@ -91,24 +87,17 @@
     }
 
     private void removeCredentialManagementApp() {
-        try {
-            ApplicationInfo appInfo = mPackageManager.getApplicationInfo(
-                    mCredentialManagerPackageName, 0);
-            mAppOpsManager.setMode(AppOpsManager.OP_MANAGE_CREDENTIALS,
-                    appInfo.uid, mCredentialManagerPackageName, AppOpsManager.MODE_DEFAULT);
-            mExecutor.execute(() -> {
-                try {
-                    IKeyChainService service = KeyChain.bind(mContext).getService();
-                    service.removeCredentialManagementApp();
-                    DevicePolicyEventLogger
-                            .createEvent(DevicePolicyEnums.CREDENTIAL_MANAGEMENT_APP_REMOVED)
-                            .write();
-                } catch (InterruptedException | RemoteException e) {
-                    Log.e(TAG, "Unable to remove the credential management app");
-                }
-            });
-        } catch (PackageManager.NameNotFoundException e) {
-            Log.e(TAG, "Unable to remove the credential management app");
-        }
+        mExecutor.execute(() -> {
+            try {
+                IKeyChainService service = KeyChain.bind(mContext).getService();
+                service.removeCredentialManagementApp();
+                DevicePolicyEventLogger
+                        .createEvent(DevicePolicyEnums.CREDENTIAL_MANAGEMENT_APP_REMOVED)
+                        .write();
+                mFragment.getActivity().finish();
+            } catch (InterruptedException | RemoteException e) {
+                Log.e(TAG, "Unable to remove the credential management app");
+            }
+        });
     }
 }
diff --git a/src/com/android/settings/security/CredentialManagementAppFragment.java b/src/com/android/settings/security/CredentialManagementAppFragment.java
index 5544ee6..74ce003 100644
--- a/src/com/android/settings/security/CredentialManagementAppFragment.java
+++ b/src/com/android/settings/security/CredentialManagementAppFragment.java
@@ -17,6 +17,7 @@
 package com.android.settings.security;
 
 import android.app.settings.SettingsEnums;
+import android.content.Context;
 
 import com.android.settings.R;
 import com.android.settings.dashboard.DashboardFragment;
@@ -47,6 +48,12 @@
         return SettingsEnums.CREDENTIAL_MANAGEMENT_APP;
     }
 
+    @Override
+    public void onAttach(Context context) {
+        super.onAttach(context);
+        use(CredentialManagementAppButtonsController.class).setParentFragment(this);
+    }
+
     public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
             new BaseSearchIndexProvider(R.xml.credential_management_app_fragment);
 }