From 99f1d5448df2d2f28fa9843e5367176d4526f40c Mon Sep 17 00:00:00 2001 From: Becca Hughes Date: Fri, 21 Apr 2023 20:10:03 +0000 Subject: [PATCH] DO NOT MERGE Hide provider from this list if autofill provider Since we are merging the two lists we should hide the provider from this list to avoid duplicates. Test: local & unit Bug: 279205251 Change-Id: I70ec4a4bda13bdcd5fd8f82f6ba6045e94d5daa9 --- ...CredentialManagerPreferenceController.java | 21 +++++++++++++++++++ ...entialManagerPreferenceControllerTest.java | 19 +++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java b/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java index c627df3e198..62768748650 100644 --- a/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java +++ b/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java @@ -348,6 +348,10 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl Map> groupedInfos = new HashMap<>(); for (CredentialProviderInfo cpi : mServices) { String packageName = cpi.getServiceInfo().packageName; + if (isProviderHiddenBecauseOfAutofill(packageName)) { + continue; + } + if (!groupedInfos.containsKey(packageName)) { groupedInfos.put(packageName, new ArrayList<>()); } @@ -551,6 +555,23 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl return new NewProviderConfirmationDialogFragment(host, packageName, appName); } + /** If the provider is also the autofill provider then hide it. */ + @VisibleForTesting + public boolean isProviderHiddenBecauseOfAutofill(String packageName) { + final String autofillService = Settings.Secure.getStringForUser( + mContext.getContentResolver(), + Settings.Secure.AUTOFILL_SERVICE, + getUser()); + if (autofillService == null || TextUtils.isEmpty(autofillService)) { + return false; + } + if (packageName == null || TextUtils.isEmpty(packageName)) { + return false; + } + + return autofillService.startsWith(packageName); + } + @VisibleForTesting void completeEnableProviderDialogBox( int whichButton, String packageName, boolean setActivityResult) { diff --git a/tests/unit/src/com/android/settings/applications/credentials/CredentialManagerPreferenceControllerTest.java b/tests/unit/src/com/android/settings/applications/credentials/CredentialManagerPreferenceControllerTest.java index 2a2aaee9494..3145cce1ac6 100644 --- a/tests/unit/src/com/android/settings/applications/credentials/CredentialManagerPreferenceControllerTest.java +++ b/tests/unit/src/com/android/settings/applications/credentials/CredentialManagerPreferenceControllerTest.java @@ -122,6 +122,25 @@ public class CredentialManagerPreferenceControllerTest { assertThat(controller.getAvailabilityStatus()).isEqualTo(AVAILABLE); } + @Test + public void verifyHiddenIfAutofillSelectedProvider() { + CredentialManagerPreferenceController controller = + createControllerWithServices(Collections.emptyList()); + + // Set the autofill provider. + Settings.Secure.putStringForUser(mContext.getContentResolver(), + Settings.Secure.AUTOFILL_SERVICE, "com.example.test/AutofillClass", + UserHandle.myUserId()); + + // Verify the error cases + assertThat(controller.isProviderHiddenBecauseOfAutofill(null)).isFalse(); + assertThat(controller.isProviderHiddenBecauseOfAutofill("")).isFalse(); + assertThat(controller.isProviderHiddenBecauseOfAutofill("test")).isFalse(); + + // Verify the example. + assertThat(controller.isProviderHiddenBecauseOfAutofill("com.example.test")).isTrue(); + } + @Test public void displayPreference_noServices_noPreferencesAdded_useAutofillUri() { Settings.Secure.putStringForUser(