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();