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

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

Use isPrimary bit to determine top provider

If the cred man provider has the isPrimary
bit set then we should use it as top
provider.

Test: ondevice
Bug: 280454916
Change-Id: I8c5651909d3926f09549c64af68185f1ef633198
parent 69fcc2ba
Loading
Loading
Loading
Loading
+15 −9
Original line number Diff line number Diff line
@@ -43,18 +43,18 @@ public final class CombinedProviderInfo {
    private final List<CredentialProviderInfo> mCredentialProviderInfos;
    private final @Nullable AutofillServiceInfo mAutofillServiceInfo;
    private final boolean mIsDefaultAutofillProvider;
    private final boolean mIsDefaultCredmanProvider;
    private final boolean mIsPrimaryCredmanProvider;

    /** Constructs an information instance from both autofill and credential provider. */
    public CombinedProviderInfo(
            @Nullable List<CredentialProviderInfo> cpis,
            @Nullable AutofillServiceInfo asi,
            boolean isDefaultAutofillProvider,
            boolean isDefaultCredmanProvider) {
            boolean IsPrimaryCredmanProvider) {
        mCredentialProviderInfos = new ArrayList<>(cpis);
        mAutofillServiceInfo = asi;
        mIsDefaultAutofillProvider = isDefaultAutofillProvider;
        mIsDefaultCredmanProvider = isDefaultCredmanProvider;
        mIsPrimaryCredmanProvider = IsPrimaryCredmanProvider;
    }

    /** Returns the credential provider info. */
@@ -149,8 +149,8 @@ public final class CombinedProviderInfo {
    }

    /** Returns whether the provider is the default credman provider. */
    public boolean isDefaultCredmanProvider() {
        return mIsDefaultCredmanProvider;
    public boolean isPrimaryCredmanProvider() {
        return mIsPrimaryCredmanProvider;
    }

    /** Returns the settings subtitle. */
@@ -192,7 +192,13 @@ public final class CombinedProviderInfo {
            }
        }

        // TODO(280454916): Add logic here.
        // If there is a primary cred man provider then return that.
        for (CombinedProviderInfo cpi : providers) {
            if (cpi.isPrimaryCredmanProvider()) {
                return cpi;
            }
        }

        return null;
    }

@@ -250,14 +256,14 @@ public final class CombinedProviderInfo {
            }

            // Check if we have any enabled cred man services.
            boolean isDefaultCredmanProvider = false;
            boolean isPrimaryCredmanProvider = false;
            if (!cpi.isEmpty()) {
                isDefaultCredmanProvider = cpi.get(0).isEnabled();
                isPrimaryCredmanProvider = cpi.get(0).isPrimary();
            }

            cmpi.add(
                    new CombinedProviderInfo(
                            cpi, selectedAsi, isDefaultAutofillProvider, isDefaultCredmanProvider));
                            cpi, selectedAsi, isDefaultAutofillProvider, isPrimaryCredmanProvider));
        }

        return cmpi;
+13 −4
Original line number Diff line number Diff line
@@ -321,7 +321,7 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl

        mEnabledPackageNames.clear();
        for (CredentialProviderInfo cpi : availableServices) {
            if (cpi.isEnabled()) {
            if (cpi.isEnabled() && !cpi.isPrimary()) {
                mEnabledPackageNames.add(cpi.getServiceInfo().packageName);
            }
        }
@@ -560,16 +560,25 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl
            return;
        }

        List<String> enabledServices = getEnabledSettings();
        // Get the existing primary providers since we don't touch them in
        // this part of the UI we should just copy them over.
        Set<String> primaryServices = new HashSet<>();
        for (CredentialProviderInfo service : mServices) {
            if (service.isPrimary()) {
                primaryServices.add(service.getServiceInfo().getComponentName().flattenToString());
            }
        }

        mCredentialManager.setEnabledProviders(
                new ArrayList<String>(), // TODO(240466271): pass down primary providers
                enabledServices,
                new ArrayList<>(primaryServices),
                getEnabledSettings(),
                getUser(),
                mExecutor,
                new OutcomeReceiver<Void, SetEnabledProvidersException>() {
                    @Override
                    public void onResult(Void result) {
                        Log.i(TAG, "setEnabledProviders success");
                        updateFromExternal();
                    }

                    @Override
+18 −4
Original line number Diff line number Diff line
@@ -47,7 +47,9 @@ import com.android.settingslib.utils.ThreadUtils;
import com.android.settingslib.widget.CandidateInfo;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class DefaultCombinedPicker extends DefaultAppPickerFragment {

@@ -338,9 +340,9 @@ public class DefaultCombinedPicker extends DefaultAppPickerFragment {
        return true;
    }

    private void setProviders(String autofillProvider, List<String> credManProviders) {
    private void setProviders(String autofillProvider, List<String> primaryCredManProviders) {
        if (TextUtils.isEmpty(autofillProvider)) {
            if (credManProviders.size() > 0) {
            if (primaryCredManProviders.size() > 0) {
                autofillProvider =
                        CredentialManagerPreferenceController
                                .AUTOFILL_CREDMAN_ONLY_PROVIDER_PLACEHOLDER;
@@ -350,13 +352,25 @@ public class DefaultCombinedPicker extends DefaultAppPickerFragment {
        Settings.Secure.putStringForUser(
                getContext().getContentResolver(), AUTOFILL_SETTING, autofillProvider, mUserId);

        CredentialManager service = getCredentialProviderService();
        final CredentialManager service = getCredentialProviderService();
        if (service == null) {
            return;
        }

        // Get the existing secondary providers since we don't touch them in
        // this part of the UI we should just copy them over.
        final List<String> credManProviders = new ArrayList<>();
        for (CredentialProviderInfo cpi :
                service.getCredentialProviderServices(
                        mUserId, CredentialManager.PROVIDER_FILTER_USER_PROVIDERS_ONLY)) {

            if (cpi.isEnabled()) {
                credManProviders.add(cpi.getServiceInfo().getComponentName().flattenToString());
            }
        }

        service.setEnabledProviders(
                new ArrayList<String>(), // TODO(240466271): pass down primary providers.
                primaryCredManProviders,
                credManProviders,
                mUserId,
                ContextCompat.getMainExecutor(getContext()),
+6 −7
Original line number Diff line number Diff line
@@ -135,12 +135,12 @@ public class DefaultCombinedPreferenceController extends DefaultAppPreferenceCon
    /** Provides Intent to setting activity for the specified autofill service. */
    static final class AutofillSettingIntentProvider {

        private final String mSelectedKey;
        private final String mKey;
        private final Context mContext;
        private final int mUserId;

        public AutofillSettingIntentProvider(Context context, int userId, String key) {
            mSelectedKey = key;
            mKey = key;
            mContext = context;
            mUserId = userId;
        }
@@ -153,10 +153,9 @@ public class DefaultCombinedPreferenceController extends DefaultAppPreferenceCon

            for (ResolveInfo resolveInfo : resolveInfos) {
                final ServiceInfo serviceInfo = resolveInfo.serviceInfo;
                final String flattenKey =
                        new ComponentName(serviceInfo.packageName, serviceInfo.name)
                                .flattenToString();
                if (TextUtils.equals(mSelectedKey, flattenKey)) {

                // If there are multiple autofill services then pick the first one.
                if (mKey.startsWith(serviceInfo.packageName)) {
                    final String settingsActivity;
                    try {
                        settingsActivity =
@@ -164,7 +163,7 @@ public class DefaultCombinedPreferenceController extends DefaultAppPreferenceCon
                                        .getSettingsActivity();
                    } catch (SecurityException e) {
                        // Service does not declare the proper permission, ignore it.
                        Log.w(TAG, "Error getting info for " + serviceInfo + ": " + e);
                        Log.e(TAG, "Error getting info for " + serviceInfo + ": " + e);
                        return null;
                    }
                    if (TextUtils.isEmpty(settingsActivity)) {