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

Commit 9884f1cc authored by Jerry Shi's avatar Jerry Shi
Browse files

Fix the issue the if primary provider is disabled by work admin, it

should be removed from the settings' storage.

Test: locally built and tested
Bug: 337040395
Change-Id: Ic572cd87f571d93ee0e7fa29157172444c7c36ce
parent 4c02f298
Loading
Loading
Loading
Loading
+34 −0
Original line number Diff line number Diff line
@@ -20,16 +20,20 @@ import android.content.Context;
import android.content.Intent;
import android.credentials.CredentialManager;
import android.credentials.CredentialProviderInfo;
import android.credentials.SetEnabledProvidersException;
import android.graphics.drawable.Drawable;
import android.os.OutcomeReceiver;
import android.os.UserHandle;
import android.provider.Settings;
import android.service.autofill.AutofillService;
import android.service.autofill.AutofillServiceInfo;
import android.text.TextUtils;
import android.util.Log;
import android.view.autofill.AutofillManager;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.preference.Preference;

import com.android.internal.annotations.VisibleForTesting;
@@ -41,6 +45,7 @@ import com.android.settingslib.widget.TwoTargetPreference;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executor;

public class DefaultCombinedPreferenceController extends DefaultAppPreferenceController {

@@ -49,10 +54,12 @@ public class DefaultCombinedPreferenceController extends DefaultAppPreferenceCon

    private final AutofillManager mAutofillManager;
    private final CredentialManager mCredentialManager;
    private final Executor mExecutor;

    public DefaultCombinedPreferenceController(Context context) {
        super(context);

        mExecutor = ContextCompat.getMainExecutor(context);
        mAutofillManager = mContext.getSystemService(AutofillManager.class);

        if (CredentialManager.isServiceEnabled(context)) {
@@ -158,6 +165,9 @@ public class DefaultCombinedPreferenceController extends DefaultAppPreferenceCon
        // Apply device admin restrictions to top provider.
        if (topProvider != null
                && topProvider.getDeviceAdminRestrictions(mContext, userId) != null) {
            // This case means, the provider is blocked by device admin, but settings' storage has
            // not be cleared correctly. So clean the storage here.
            removePrimaryProvider();
            return null;
        }

@@ -209,4 +219,28 @@ public class DefaultCombinedPreferenceController extends DefaultAppPreferenceCon
                mContext.createContextAsUser(UserHandle.of(getUser()), /* flags= */ 0);
        return new Intent(context, CredentialsPickerActivity.class);
    }

    private void removePrimaryProvider() {
        // Commit using the CredMan API.
        if (mCredentialManager == null) {
            return;
        }

        mCredentialManager.setEnabledProviders(
                List.of(), // empty primary provider.
                List.of(), // empty enabled providers.
                getUser(),
                mExecutor,
                new OutcomeReceiver<Void, SetEnabledProvidersException>() {
                    @Override
                    public void onResult(Void result) {
                        Log.i(TAG, "setEnabledProviders success");
                    }

                    @Override
                    public void onError(SetEnabledProvidersException e) {
                        Log.e(TAG, "setEnabledProviders error: " + e.toString());
                    }
                });
    }
}