From d8b74b5c39543f3b388da3ae87cf87fb8be56f80 Mon Sep 17 00:00:00 2001 From: Becca Hughes Date: Tue, 18 Apr 2023 17:43:16 +0000 Subject: [PATCH] DO NOT MERGE Live update cred man settings This CL will enable live update of credential providers if any are added/removed. Test: atest Bug: 264420106 Change-Id: I14804bac17a4efe5eccd3c5824558eace18da186 --- ...CredentialManagerPreferenceController.java | 47 +++++++++++++++---- ...entialManagerPreferenceControllerTest.java | 2 +- 2 files changed, 38 insertions(+), 11 deletions(-) diff --git a/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java b/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java index 43c46474557..c627df3e198 100644 --- a/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java +++ b/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java @@ -41,6 +41,8 @@ import android.os.UserHandle; import android.provider.DeviceConfig; import android.provider.Settings; import android.text.TextUtils; +import com.android.settingslib.utils.ThreadUtils; +import com.android.internal.content.PackageMonitor; import android.util.IconDrawableFactory; import android.util.Log; @@ -236,20 +238,11 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl @OnLifecycleEvent(ON_CREATE) void onCreate(LifecycleOwner lifecycleOwner) { - if (mCredentialManager == null) { - return; - } - - setAvailableServices( - lifecycleOwner, - mCredentialManager.getCredentialProviderServices( - getUser(), CredentialManager.PROVIDER_FILTER_USER_PROVIDERS_ONLY), - null); + update(); } @VisibleForTesting void setAvailableServices( - LifecycleOwner lifecycleOwner, List availableServices, String flagOverrideForTest) { mFlagOverrideForTest = flagOverrideForTest; @@ -642,6 +635,40 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl void setActivityResult(int resultCode); } + /** + * Monitor coming and going credman services and calls {@link #update()} when necessary + */ + private final PackageMonitor mSettingsPackageMonitor = new PackageMonitor() { + @Override + public void onPackageAdded(String packageName, int uid) { + ThreadUtils.postOnMainThread(() -> update()); + } + + @Override + public void onPackageModified(String packageName) { + ThreadUtils.postOnMainThread(() -> update()); + } + + @Override + public void onPackageRemoved(String packageName, int uid) { + ThreadUtils.postOnMainThread(() -> update()); + } + }; + + /** + * Update the data in this UI. + */ + private void update() { + if (mCredentialManager == null) { + return; + } + + setAvailableServices( + mCredentialManager.getCredentialProviderServices( + getUser(), CredentialManager.PROVIDER_FILTER_USER_PROVIDERS_ONLY), + null); + } + /** Dialog fragment parent class. */ private abstract static class CredentialManagerDialogFragment extends DialogFragment implements DialogInterface.OnClickListener { diff --git a/tests/unit/src/com/android/settings/applications/credentials/CredentialManagerPreferenceControllerTest.java b/tests/unit/src/com/android/settings/applications/credentials/CredentialManagerPreferenceControllerTest.java index b02cf1c50b5..2a2aaee9494 100644 --- a/tests/unit/src/com/android/settings/applications/credentials/CredentialManagerPreferenceControllerTest.java +++ b/tests/unit/src/com/android/settings/applications/credentials/CredentialManagerPreferenceControllerTest.java @@ -484,7 +484,7 @@ public class CredentialManagerPreferenceControllerTest { CredentialManagerPreferenceController controller = new CredentialManagerPreferenceController( mContext, mCredentialsPreferenceCategory.getKey()); - controller.setAvailableServices(() -> mock(Lifecycle.class), availableServices, addServiceOverride); + controller.setAvailableServices(availableServices, addServiceOverride); controller.setDelegate(mDelegate); return controller; }