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 Original line Diff line number Diff line
@@ -43,18 +43,18 @@ public final class CombinedProviderInfo {
    private final List<CredentialProviderInfo> mCredentialProviderInfos;
    private final List<CredentialProviderInfo> mCredentialProviderInfos;
    private final @Nullable AutofillServiceInfo mAutofillServiceInfo;
    private final @Nullable AutofillServiceInfo mAutofillServiceInfo;
    private final boolean mIsDefaultAutofillProvider;
    private final boolean mIsDefaultAutofillProvider;
    private final boolean mIsDefaultCredmanProvider;
    private final boolean mIsPrimaryCredmanProvider;


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


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


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


    /** Returns the settings subtitle. */
    /** 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;
        return null;
    }
    }


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


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


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


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


        mEnabledPackageNames.clear();
        mEnabledPackageNames.clear();
        for (CredentialProviderInfo cpi : availableServices) {
        for (CredentialProviderInfo cpi : availableServices) {
            if (cpi.isEnabled()) {
            if (cpi.isEnabled() && !cpi.isPrimary()) {
                mEnabledPackageNames.add(cpi.getServiceInfo().packageName);
                mEnabledPackageNames.add(cpi.getServiceInfo().packageName);
            }
            }
        }
        }
@@ -560,16 +560,25 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl
            return;
            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(
        mCredentialManager.setEnabledProviders(
                new ArrayList<String>(), // TODO(240466271): pass down primary providers
                new ArrayList<>(primaryServices),
                enabledServices,
                getEnabledSettings(),
                getUser(),
                getUser(),
                mExecutor,
                mExecutor,
                new OutcomeReceiver<Void, SetEnabledProvidersException>() {
                new OutcomeReceiver<Void, SetEnabledProvidersException>() {
                    @Override
                    @Override
                    public void onResult(Void result) {
                    public void onResult(Void result) {
                        Log.i(TAG, "setEnabledProviders success");
                        Log.i(TAG, "setEnabledProviders success");
                        updateFromExternal();
                    }
                    }


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


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


public class DefaultCombinedPicker extends DefaultAppPickerFragment {
public class DefaultCombinedPicker extends DefaultAppPickerFragment {


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


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


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


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


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


            for (ResolveInfo resolveInfo : resolveInfos) {
            for (ResolveInfo resolveInfo : resolveInfos) {
                final ServiceInfo serviceInfo = resolveInfo.serviceInfo;
                final ServiceInfo serviceInfo = resolveInfo.serviceInfo;
                final String flattenKey =

                        new ComponentName(serviceInfo.packageName, serviceInfo.name)
                // If there are multiple autofill services then pick the first one.
                                .flattenToString();
                if (mKey.startsWith(serviceInfo.packageName)) {
                if (TextUtils.equals(mSelectedKey, flattenKey)) {
                    final String settingsActivity;
                    final String settingsActivity;
                    try {
                    try {
                        settingsActivity =
                        settingsActivity =
@@ -164,7 +163,7 @@ public class DefaultCombinedPreferenceController extends DefaultAppPreferenceCon
                                        .getSettingsActivity();
                                        .getSettingsActivity();
                    } catch (SecurityException e) {
                    } catch (SecurityException e) {
                        // Service does not declare the proper permission, ignore it.
                        // 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;
                        return null;
                    }
                    }
                    if (TextUtils.isEmpty(settingsActivity)) {
                    if (TextUtils.isEmpty(settingsActivity)) {