From c627cdbdbacf413756e7f6979367de9ac5ea91d8 Mon Sep 17 00:00:00 2001 From: Becca Hughes Date: Tue, 13 Feb 2024 18:47:01 +0000 Subject: [PATCH] Hide "additional services" if there is only a single primary services There is a case where there is a single primary service (e.g. a fresh device) and we should hide additional services in that case. Test: unit + manual Bug: 325077523 Change-Id: I9efb785ac3f7a328fdccd138e585f766d46fa282 --- ...CredentialManagerPreferenceController.java | 13 +++++++++- ...entialManagerPreferenceControllerTest.java | 24 +++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java b/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java index be0658e8c64..e16219b7402 100644 --- a/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java +++ b/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java @@ -166,7 +166,7 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl return CONDITIONALLY_UNAVAILABLE; } - if (mServices.isEmpty()) { + if (!hasNonPrimaryServices()) { return CONDITIONALLY_UNAVAILABLE; } @@ -428,6 +428,17 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl } } + @VisibleForTesting + public boolean hasNonPrimaryServices() { + for (CredentialProviderInfo availableService : mServices) { + if (!availableService.isPrimary()) { + return true; + } + } + + return false; + } + @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); 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 0a04a739b53..c0023ee8afd 100644 --- a/tests/unit/src/com/android/settings/applications/credentials/CredentialManagerPreferenceControllerTest.java +++ b/tests/unit/src/com/android/settings/applications/credentials/CredentialManagerPreferenceControllerTest.java @@ -528,6 +528,23 @@ public class CredentialManagerPreferenceControllerTest { assertThat(thumbnail.getIntrinsicWidth()).isEqualTo(getIconSize()); } + @Test + public void hasNonPrimaryServices_allServicesArePrimary() { + CredentialManagerPreferenceController controller = + createControllerWithServices( + Lists.newArrayList(createCredentialProviderPrimary())); + assertThat(controller.hasNonPrimaryServices()).isFalse(); + } + + @Test + public void hasNonPrimaryServices_mixtureOfServices() { + CredentialManagerPreferenceController controller = + createControllerWithServices( + Lists.newArrayList(createCredentialProviderInfo(), + createCredentialProviderPrimary())); + assertThat(controller.hasNonPrimaryServices()).isTrue(); + } + @Test public void testProviderLimitReached() { // The limit is 5 with one slot reserved for primary. @@ -580,6 +597,13 @@ public class CredentialManagerPreferenceControllerTest { .build(); } + private CredentialProviderInfo createCredentialProviderPrimary() { + return createCredentialProviderInfoBuilder( + "com.android.primary", "CredManProvider", "Service Label", "App Name") + .setPrimary(true) + .build(); + } + private CredentialProviderInfo createCredentialProviderInfoWithSubtitle( String packageName, String className, CharSequence label, CharSequence subtitle) { ServiceInfo si = new ServiceInfo();