Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6bd41f20 authored by Becca Hughes's avatar Becca Hughes
Browse files

Fix settings bug (pt 2)

Follow on from ag/20862879 to keep track of prefs
so if the list of enabled providers is updated
we update the UI.

Bug: 253157366
Test: make & manual test
Change-Id: Ibf3c83fd445ced51a8cbea0113f12fc04002c23a
parent 7b9bce32
Loading
Loading
Loading
Loading
+23 −11
Original line number Diff line number Diff line
@@ -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<String, SwitchPreference> mPrefs = new HashMap<>(); // key is package name

    private @Nullable DashboardFragment mParentFragment = null;

@@ -125,6 +128,13 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl
            return;
        }

        List<ServiceInfo> 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<ServiceInfo> 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<ServiceInfo> availableServices,
            Set<String> enabledPackages) {
    void init(LifecycleOwner lifecycleOwner, List<ServiceInfo> availableServices) {
        mServices.clear();
        mServices.addAll(availableServices);
    }

    @VisibleForTesting
    void setEnabledPackageNames(Set<String> 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));
+1 −2
Original line number Diff line number Diff line
@@ -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;
    }