Properly handle the autofill provider names, making sure place holder
name is properly filtered out.
Bug: 337040395
Test: locally built and tested
Change-Id: I081064c6103f79fe966a36d0eea854ee9893bce3
diff --git a/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java b/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java
index 1adbbaf..f07241a 100644
--- a/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java
+++ b/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java
@@ -521,16 +521,7 @@
// Get the selected autofill provider. If it is the placeholder then replace it with an
// empty string.
String selectedAutofillProvider =
- DefaultCombinedPicker.getSelectedAutofillProvider(mContext, getUser());
- String credentialAutofillService = "";
- if (android.service.autofill.Flags.autofillCredmanDevIntegration()) {
- credentialAutofillService = getCredentialAutofillService(mContext, TAG);
- }
- if (TextUtils.equals(selectedAutofillProvider, credentialAutofillService)
- || TextUtils.equals(
- selectedAutofillProvider, AUTOFILL_CREDMAN_ONLY_PROVIDER_PLACEHOLDER)) {
- selectedAutofillProvider = "";
- }
+ getSelectedAutofillProvider(mContext, getUser(), TAG);
// Get the list of combined providers.
List<CombinedProviderInfo> providers =
@@ -695,6 +686,31 @@
return "";
}
+ /** Gets the selected autofill provider name. This will filter out place holder names. **/
+ public static @Nullable String getSelectedAutofillProvider(
+ Context context, int userId, String tag) {
+ String providerName = Settings.Secure.getStringForUser(
+ context.getContentResolver(), Settings.Secure.AUTOFILL_SERVICE, userId);
+
+ if (TextUtils.isEmpty(providerName)) {
+ return providerName;
+ }
+
+ if (providerName.equals(AUTOFILL_CREDMAN_ONLY_PROVIDER_PLACEHOLDER)) {
+ return "";
+ }
+
+ String credentialAutofillService = "";
+ if (android.service.autofill.Flags.autofillCredmanDevIntegration()) {
+ credentialAutofillService = getCredentialAutofillService(context, tag);
+ }
+ if (providerName.equals(credentialAutofillService)) {
+ return "";
+ }
+
+ return providerName;
+ }
+
private CombiPreference addProviderPreference(
@NonNull Context prefContext,
@NonNull CharSequence title,
diff --git a/src/com/android/settings/applications/credentials/DefaultCombinedPicker.java b/src/com/android/settings/applications/credentials/DefaultCombinedPicker.java
index 8bc0bca..f422411 100644
--- a/src/com/android/settings/applications/credentials/DefaultCombinedPicker.java
+++ b/src/com/android/settings/applications/credentials/DefaultCombinedPicker.java
@@ -275,15 +275,13 @@
CredentialManager.PROVIDER_FILTER_USER_PROVIDERS_INCLUDING_HIDDEN));
}
- final String selectedAutofillProvider = getSelectedAutofillProvider(context, userId);
+ final String selectedAutofillProvider =
+ CredentialManagerPreferenceController
+ .getSelectedAutofillProvider(context, userId, TAG);
return CombinedProviderInfo.buildMergedList(
autofillProviders, credManProviders, selectedAutofillProvider);
}
- public static String getSelectedAutofillProvider(Context context, int userId) {
- return Settings.Secure.getStringForUser(
- context.getContentResolver(), AUTOFILL_SETTING, userId);
- }
protected List<DefaultAppInfo> getCandidates() {
final Context context = getContext();
diff --git a/src/com/android/settings/applications/credentials/DefaultCombinedPreferenceController.java b/src/com/android/settings/applications/credentials/DefaultCombinedPreferenceController.java
index 57cd1d2..33d9067 100644
--- a/src/com/android/settings/applications/credentials/DefaultCombinedPreferenceController.java
+++ b/src/com/android/settings/applications/credentials/DefaultCombinedPreferenceController.java
@@ -183,16 +183,15 @@
final List<AutofillServiceInfo> autofillProviders =
AutofillServiceInfo.getAvailableServices(mContext, userId);
final String selectedAutofillProvider =
- Settings.Secure.getStringForUser(
- mContext.getContentResolver(),
- DefaultCombinedPicker.AUTOFILL_SETTING,
- userId);
+ CredentialManagerPreferenceController
+ .getSelectedAutofillProvider(mContext, userId, TAG);
final List<CredentialProviderInfo> credManProviders = new ArrayList<>();
if (mCredentialManager != null) {
credManProviders.addAll(
mCredentialManager.getCredentialProviderServices(
- userId, CredentialManager.PROVIDER_FILTER_USER_PROVIDERS_ONLY));
+ userId,
+ CredentialManager.PROVIDER_FILTER_USER_PROVIDERS_INCLUDING_HIDDEN));
}
return CombinedProviderInfo.buildMergedList(
@@ -226,6 +225,12 @@
return;
}
+ // Clean the autofill provider settings
+ Settings.Secure.putStringForUser(
+ mContext.getContentResolver(),
+ DefaultCombinedPicker.AUTOFILL_SETTING, null, getUser());
+
+ // Clean the credman provider settings.
mCredentialManager.setEnabledProviders(
List.of(), // empty primary provider.
List.of(), // empty enabled providers.