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
This commit is contained in:
Becca Hughes
2023-04-18 17:43:16 +00:00
parent c205fe957a
commit d8b74b5c39
2 changed files with 38 additions and 11 deletions

View File

@@ -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<CredentialProviderInfo> 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 {

View File

@@ -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;
}