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