From 6469518bf33e414a942c01e4dc9d152c5a84fb1e Mon Sep 17 00:00:00 2001 From: Alex Johnston Date: Mon, 15 Mar 2021 10:11:39 +0000 Subject: [PATCH] Cred mng app settings - close onRemove Remove credential management app and close settings screen when remove button is selected Manual testing steps: * Set app as creg mng app * Remove cred mng app via Settings * Verify screen is closed on remove Bug: 177909523 Test: manual testing Change-Id: Ie38a5340a4985fb4997f353556f49e9589e8da5f --- ...dentialManagementAppButtonsController.java | 47 +++++++------------ .../CredentialManagementAppFragment.java | 7 +++ 2 files changed, 25 insertions(+), 29 deletions(-) diff --git a/src/com/android/settings/security/CredentialManagementAppButtonsController.java b/src/com/android/settings/security/CredentialManagementAppButtonsController.java index c6afdedd2e3..fe5e45b5622 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.security.KeyChain; 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 @@ public class CredentialManagementAppButtonsController extends BasePreferenceCont 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 @@ public class CredentialManagementAppButtonsController extends BasePreferenceCont 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 @@ public class CredentialManagementAppButtonsController extends BasePreferenceCont } 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 5544ee6cc7e..74ce0030690 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 @@ public class CredentialManagementAppFragment extends DashboardFragment { 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); }