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
This commit is contained in:
@@ -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;
|
||||
|
@@ -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
|
||||
|
@@ -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()),
|
||||
|
@@ -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)) {
|
||||
|
Reference in New Issue
Block a user