diff --git a/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java b/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java index b1ca9605ecf..c6e545e2226 100644 --- a/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java +++ b/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java @@ -58,8 +58,10 @@ import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import com.android.settings.dashboard.DashboardFragment; import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.concurrent.Executor; @@ -76,6 +78,7 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl private final @Nullable CredentialManager mCredentialManager; private final CancellationSignal mCancellationSignal = new CancellationSignal(); private final Executor mExecutor; + private final Map mPrefs = new HashMap<>(); // key is package name private @Nullable DashboardFragment mParentFragment = null; @@ -125,6 +128,13 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl return; } + List services = new ArrayList<>(); + for (CredentialProviderInfo cpi : + CredentialProviderInfo.getAvailableServices(mContext, getUser())) { + services.add(cpi.getServiceInfo()); + } + init(lifecycleOwner, services); + mCredentialManager.listEnabledProviders( mCancellationSignal, mExecutor, @@ -140,13 +150,7 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl } } - List services = new ArrayList<>(); - for (CredentialProviderInfo cpi : - CredentialProviderInfo.getAvailableServices(mContext, getUser())) { - services.add(cpi.getServiceInfo()); - } - - init(lifecycleOwner, services, enabledPackages); + setEnabledPackageNames(enabledPackages); } @Override @@ -157,15 +161,19 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl } @VisibleForTesting - void init( - LifecycleOwner lifecycleOwner, - List availableServices, - Set enabledPackages) { + void init(LifecycleOwner lifecycleOwner, List availableServices) { mServices.clear(); mServices.addAll(availableServices); + } + @VisibleForTesting + void setEnabledPackageNames(Set enabledPackages) { mEnabledPackageNames.clear(); mEnabledPackageNames.addAll(enabledPackages); + + for (String packageName : mPrefs.keySet()) { + mPrefs.get(packageName).setChecked(mEnabledPackageNames.contains(packageName)); + } } @Override @@ -177,6 +185,9 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); + // Since the UI is being cleared, clear any refs. + mPrefs.clear(); + PreferenceGroup group = screen.findPreference(getPreferenceKey()); Context context = screen.getContext(); @@ -254,6 +265,7 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl final SwitchPreference pref = new SwitchPreference(prefContext); pref.setTitle(title); pref.setChecked(mEnabledPackageNames.contains(packageName)); + mPrefs.put(packageName, pref); if (icon != null) { pref.setIcon(Utils.getSafeIcon(icon)); 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 584832686ab..035b4e5485d 100644 --- a/tests/unit/src/com/android/settings/applications/credentials/CredentialManagerPreferenceControllerTest.java +++ b/tests/unit/src/com/android/settings/applications/credentials/CredentialManagerPreferenceControllerTest.java @@ -43,7 +43,6 @@ import org.junit.Test; import org.junit.runner.RunWith; import java.util.Collections; -import java.util.HashSet; import java.util.List; import java.util.Set; @@ -183,7 +182,7 @@ public class CredentialManagerPreferenceControllerTest { CredentialManagerPreferenceController controller = new CredentialManagerPreferenceController( mContext, mCredentialsPreferenceCategory.getKey()); - controller.init(() -> mock(Lifecycle.class), availableServices, new HashSet<>()); + controller.init(() -> mock(Lifecycle.class), availableServices); return controller; }