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

Commit d8b74b5c authored by Becca Hughes's avatar Becca Hughes
Browse files

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
parent c205fe95
Loading
Loading
Loading
Loading
+37 −10
Original line number Diff line number Diff line
@@ -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 {
+1 −1
Original line number Diff line number Diff line
@@ -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;
    }