diff --git a/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java b/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java index 7635f0607c4..8c93612699b 100644 --- a/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java +++ b/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java @@ -22,11 +22,9 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.app.Activity; import android.app.Dialog; -import android.content.ComponentName; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; -import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.ServiceInfo; import android.content.res.Resources; @@ -81,10 +79,10 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl private final PackageManager mPm; private final IconDrawableFactory mIconFactory; private final List mServices; - private final Set mEnabledPackageNames; + private final Set mEnabledServiceInfos; private final @Nullable CredentialManager mCredentialManager; private final Executor mExecutor; - private final Map mPrefs = new HashMap<>(); // key is package name + private final Map mPrefs = new HashMap<>(); private final List mPendingServiceInfos = new ArrayList<>(); private @Nullable FragmentManager mFragmentManager = null; @@ -96,7 +94,7 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl mPm = context.getPackageManager(); mIconFactory = IconDrawableFactory.newInstance(mContext); mServices = new ArrayList<>(); - mEnabledPackageNames = new HashSet<>(); + mEnabledServiceInfos = new HashSet<>(); mExecutor = ContextCompat.getMainExecutor(mContext); mCredentialManager = getCredentialManager(context, preferenceKey.equals("credentials_test")); @@ -213,20 +211,18 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl } ServiceInfo serviceInfo = pendingServiceInfos.get(0); - ApplicationInfo appInfo = serviceInfo.applicationInfo; - CharSequence appName = ""; - if (appInfo.nonLocalizedLabel != null) { - appName = appInfo.loadLabel(mPm); + CharSequence serviceLabel = ""; + if (serviceInfo.nonLocalizedLabel != null) { + serviceLabel = serviceInfo.loadLabel(mPm); } - // Stop if there is no name. - if (TextUtils.isEmpty(appName)) { + // Stop if there is no service label. + if (TextUtils.isEmpty(serviceLabel)) { return; } NewProviderConfirmationDialogFragment fragment = - newNewProviderConfirmationDialogFragment( - serviceInfo.packageName, appName, /* setActivityResult= */ true); + newNewProviderConfirmationDialogFragment(serviceInfo, serviceLabel, /* setActivityResult= */ true); if (fragment == null || mFragmentManager == null) { return; } @@ -259,15 +255,15 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl // If there is a pending dialog then show it. handleIntent(); - mEnabledPackageNames.clear(); + mEnabledServiceInfos.clear(); for (CredentialProviderInfo cpi : availableServices) { if (cpi.isEnabled()) { - mEnabledPackageNames.add(cpi.getServiceInfo().packageName); + mEnabledServiceInfos.add(cpi.getServiceInfo()); } } - for (String packageName : mPrefs.keySet()) { - mPrefs.get(packageName).setChecked(mEnabledPackageNames.contains(packageName)); + for (ServiceInfo serviceInfo : mPrefs.keySet()) { + mPrefs.get(serviceInfo).setChecked(mEnabledServiceInfos.contains(serviceInfo)); } } @@ -349,28 +345,15 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl /** Aggregates the list of services and builds a list of UI prefs to show. */ @VisibleForTesting - public Map buildPreferenceList( + public Map buildPreferenceList( Context context, PreferenceGroup group) { - // Group the services by package name. - Map> groupedInfos = new HashMap<>(); - for (CredentialProviderInfo cpi : mServices) { - String packageName = cpi.getServiceInfo().packageName; - if (!groupedInfos.containsKey(packageName)) { - groupedInfos.put(packageName, new ArrayList<>()); - } - - groupedInfos.get(packageName).add(cpi); - } - // Build the pref list. - Map output = new HashMap<>(); - for (String packageName : groupedInfos.keySet()) { - List infos = groupedInfos.get(packageName); - SwitchPreference pref = createPreference(context, groupedInfos.get(packageName)); - if (pref != null) { - output.put(packageName, pref); - group.addPreference(pref); - } + Map output = new HashMap<>(); + for (CredentialProviderInfo service : mServices) { + // Build the pref and add it to the output & group. + SwitchPreference pref = createPreference(mContext, service); + output.put(service.getServiceInfo(), pref); + group.addPreference(pref); } return output; @@ -378,63 +361,55 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl /** Creates a preference object based on the provider info. */ @VisibleForTesting - public @Nullable SwitchPreference createPreference( - Context context, List infos) { - final CredentialProviderInfo firstInfo = infos.get(0); - final ServiceInfo firstServiceInfo = firstInfo.getServiceInfo(); - final String packageName = firstServiceInfo.packageName; - CharSequence title = firstInfo.getLabel(context); - Drawable icon = firstInfo.getServiceIcon(context); + public SwitchPreference createPreference(Context context, CredentialProviderInfo service) { + final String packageName = service.getServiceInfo().packageName; + CharSequence label = service.getLabel(context); - if (infos.size() > 1) { - // If there is more than one then group them under the package. - ApplicationInfo appInfo = firstServiceInfo.applicationInfo; - if (appInfo.nonLocalizedLabel != null) { - title = appInfo.loadLabel(mPm); - } - icon = mIconFactory.getBadgedIcon(appInfo, getUser()); - } - - // If there is no title then show the package manager. - if (TextUtils.isEmpty(title)) { - title = firstServiceInfo.packageName; + // If there is no label then show the package name. + if (label == null || TextUtils.isEmpty(label)) { + label = packageName; } return addProviderPreference( - context, title, icon, packageName, firstInfo.getSettingsSubtitle()); + context, + label, + service.getServiceIcon(mContext), + packageName, + service.getSettingsSubtitle(), + service.getServiceInfo()); } /** - * Enables the package name as an enabled credential manager provider. + * Enables the service as an enabled credential manager provider. * - * @param packageName the package name to enable + * @param service the service to enable */ @VisibleForTesting - public boolean togglePackageNameEnabled(String packageName) { - if (mEnabledPackageNames.size() >= MAX_SELECTABLE_PROVIDERS) { + public boolean toggleServiceInfoEnabled(ServiceInfo service) { + if (mEnabledServiceInfos.size() >= MAX_SELECTABLE_PROVIDERS) { return false; } else { - mEnabledPackageNames.add(packageName); - commitEnabledPackages(); + mEnabledServiceInfos.add(service); + commitEnabledServices(); return true; } } /** - * Disables the package name as a credential manager provider. + * Disables the service as a credential manager provider. * - * @param packageName the package name to disable + * @param service the service to disable */ @VisibleForTesting - public void togglePackageNameDisabled(String packageName) { - mEnabledPackageNames.remove(packageName); - commitEnabledPackages(); + public void toggleServiceInfoDisabled(ServiceInfo service) { + mEnabledServiceInfos.remove(service); + commitEnabledServices(); } /** Returns the enabled credential manager provider package names. */ @VisibleForTesting - public Set getEnabledProviders() { - return mEnabledPackageNames; + public Set getEnabledProviders() { + return mEnabledServiceInfos; } /** @@ -445,11 +420,8 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl public List getEnabledSettings() { // Get all the component names that match the enabled package names. List enabledServices = new ArrayList<>(); - for (CredentialProviderInfo service : mServices) { - ComponentName cn = service.getServiceInfo().getComponentName(); - if (mEnabledPackageNames.contains(service.getServiceInfo().packageName)) { - enabledServices.add(cn.flattenToString()); - } + for (ServiceInfo service : mEnabledServiceInfos) { + enabledServices.add(service.getComponentName().flattenToString()); } return enabledServices; @@ -460,10 +432,11 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl @NonNull CharSequence title, @Nullable Drawable icon, @NonNull String packageName, - @Nullable CharSequence subtitle) { + @Nullable CharSequence subtitle, + @NonNull ServiceInfo service) { final SwitchPreference pref = new SwitchPreference(prefContext); pref.setTitle(title); - pref.setChecked(mEnabledPackageNames.contains(packageName)); + pref.setChecked(mEnabledServiceInfos.contains(service)); if (icon != null) { pref.setIcon(Utils.getSafeIcon(icon)); @@ -482,7 +455,7 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl // dialog box. NewProviderConfirmationDialogFragment fragment = newNewProviderConfirmationDialogFragment( - packageName, title, /* setActivityResult= */ false); + service, title, /* setActivityResult= */ false); if (fragment == null || mFragmentManager == null) { return true; } @@ -492,9 +465,9 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl return true; } else { // If we are disabling the last enabled provider then show a warning. - if (mEnabledPackageNames.size() <= 1) { + if (mEnabledServiceInfos.size() <= 1) { final DialogFragment fragment = - newConfirmationDialogFragment(packageName, title, pref); + newConfirmationDialogFragment(service, title, pref); if (fragment == null || mFragmentManager == null) { return true; @@ -502,7 +475,7 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl fragment.show(mFragmentManager, ConfirmationDialogFragment.TAG); } else { - togglePackageNameDisabled(packageName); + toggleServiceInfoDisabled(service); } } @@ -512,7 +485,7 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl return pref; } - private void commitEnabledPackages() { + private void commitEnabledServices() { // Commit using the CredMan API. if (mCredentialManager == null) { return; @@ -539,30 +512,28 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl /** Create the new provider confirmation dialog. */ private @Nullable NewProviderConfirmationDialogFragment newNewProviderConfirmationDialogFragment( - @NonNull String packageName, + @NonNull ServiceInfo service, @NonNull CharSequence appName, boolean setActivityResult) { DialogHost host = new DialogHost() { @Override public void onDialogClick(int whichButton) { - completeEnableProviderDialogBox( - whichButton, packageName, setActivityResult); + completeEnableProviderDialogBox(whichButton, service, setActivityResult); } }; - return new NewProviderConfirmationDialogFragment(host, packageName, appName); + return new NewProviderConfirmationDialogFragment(host, service, appName); } @VisibleForTesting - void completeEnableProviderDialogBox( - int whichButton, String packageName, boolean setActivityResult) { + void completeEnableProviderDialogBox(int whichButton, ServiceInfo service, boolean setActivityResult) { int activityResult = -1; if (whichButton == DialogInterface.BUTTON_POSITIVE) { - if (togglePackageNameEnabled(packageName)) { + if (toggleServiceInfoEnabled(service)) { // Enable all prefs. - if (mPrefs.containsKey(packageName)) { - mPrefs.get(packageName).setChecked(true); + if (mPrefs.containsKey(service)) { + mPrefs.get(service).setChecked(true); } activityResult = Activity.RESULT_OK; } else { @@ -601,7 +572,7 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl } private @Nullable ConfirmationDialogFragment newConfirmationDialogFragment( - @NonNull String packageName, + @NonNull ServiceInfo service, @NonNull CharSequence appName, @NonNull SwitchPreference pref) { DialogHost host = @@ -611,7 +582,7 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl if (whichButton == DialogInterface.BUTTON_POSITIVE) { // Since the package is now enabled then we // should remove it from the enabled list. - togglePackageNameDisabled(packageName); + toggleServiceInfoDisabled(service); } else if (whichButton == DialogInterface.BUTTON_NEGATIVE) { // Set the checked back to true because we // backed out of turning this off. @@ -620,7 +591,7 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl } }; - return new ConfirmationDialogFragment(host, packageName, appName); + return new ConfirmationDialogFragment(host, service, appName); } private int getUser() { @@ -685,11 +656,13 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl public static class ConfirmationDialogFragment extends CredentialManagerDialogFragment { ConfirmationDialogFragment( - DialogHost dialogHost, @NonNull String packageName, @NonNull CharSequence appName) { + DialogHost dialogHost, + @NonNull ServiceInfo serviceInfo, + @NonNull CharSequence appName) { super(dialogHost); final Bundle argument = new Bundle(); - argument.putString(PACKAGE_NAME_KEY, packageName); + argument.putString(PACKAGE_NAME_KEY, serviceInfo.packageName); argument.putCharSequence(APP_NAME_KEY, appName); setArguments(argument); } @@ -726,11 +699,13 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl extends CredentialManagerDialogFragment { NewProviderConfirmationDialogFragment( - DialogHost dialogHost, @NonNull String packageName, @NonNull CharSequence appName) { + DialogHost dialogHost, + @NonNull ServiceInfo service, + @NonNull CharSequence appName) { super(dialogHost); final Bundle argument = new Bundle(); - argument.putString(PACKAGE_NAME_KEY, packageName); + argument.putString(PACKAGE_NAME_KEY, service.packageName); argument.putCharSequence(APP_NAME_KEY, appName); setArguments(argument); } 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 f3877d5a174..f1fc50c7e85 100644 --- a/tests/unit/src/com/android/settings/applications/credentials/CredentialManagerPreferenceControllerTest.java +++ b/tests/unit/src/com/android/settings/applications/credentials/CredentialManagerPreferenceControllerTest.java @@ -54,7 +54,6 @@ import org.junit.runner.RunWith; import java.util.Arrays; import java.util.Collections; import java.util.List; -import java.util.Map; import java.util.Optional; import java.util.Set; @@ -191,20 +190,20 @@ public class CredentialManagerPreferenceControllerTest { assertThat(controller.getEnabledProviders().size()).isEqualTo(0); // Toggle one provider and make sure it worked. - assertThat(controller.togglePackageNameEnabled("com.android.provider1")).isTrue(); - Set enabledProviders = controller.getEnabledProviders(); + assertThat(controller.toggleServiceInfoEnabled(providerInfo1.getServiceInfo())).isTrue(); + Set enabledProviders = controller.getEnabledProviders(); assertThat(enabledProviders.size()).isEqualTo(1); - assertThat(enabledProviders.contains("com.android.provider1")).isTrue(); + assertThat(enabledProviders.contains(providerInfo1.getServiceInfo())).isTrue(); // Create the pref (checked). - SwitchPreference pref = controller.createPreference(mContext, Arrays.asList(providerInfo1)); + SwitchPreference pref = controller.createPreference(mContext, providerInfo1); assertThat(pref.getTitle().toString()).isEqualTo("Service Title"); assertThat(pref.isChecked()).isTrue(); assertThat(pref.getSummary()).isNull(); // Create the pref (not checked). SwitchPreference pref2 = - controller.createPreference(mContext, Arrays.asList(providerInfo2)); + controller.createPreference(mContext, providerInfo2); assertThat(pref2.getTitle().toString()).isEqualTo("Service Title"); assertThat(pref2.isChecked()).isFalse(); assertThat(pref2.getSummary().toString()).isEqualTo("Summary Text"); @@ -212,6 +211,14 @@ public class CredentialManagerPreferenceControllerTest { @Test public void getAvailabilityStatus_handlesToggleAndSave() { + ServiceInfo providerService1a = createServiceInfo("com.android.provider1", "ClassA"); + ServiceInfo providerService1b = createServiceInfo("com.android.provider1", "ClassB"); + ServiceInfo providerService2 = createServiceInfo("com.android.provider2", "ClassA"); + ServiceInfo providerService3 = createServiceInfo("com.android.provider3", "ClassA"); + ServiceInfo providerService4 = createServiceInfo("com.android.provider4", "ClassA"); + ServiceInfo providerService5 = createServiceInfo("com.android.provider5", "ClassA"); + ServiceInfo providerService6 = createServiceInfo("com.android.provider6", "ClassA"); + CredentialManagerPreferenceController controller = createControllerWithServices( Lists.newArrayList( @@ -226,28 +233,28 @@ public class CredentialManagerPreferenceControllerTest { assertThat(controller.isConnected()).isFalse(); // Ensure that we stay under 5 providers. - assertThat(controller.togglePackageNameEnabled("com.android.provider1")).isTrue(); - assertThat(controller.togglePackageNameEnabled("com.android.provider2")).isTrue(); - assertThat(controller.togglePackageNameEnabled("com.android.provider3")).isTrue(); - assertThat(controller.togglePackageNameEnabled("com.android.provider4")).isTrue(); - assertThat(controller.togglePackageNameEnabled("com.android.provider5")).isTrue(); - assertThat(controller.togglePackageNameEnabled("com.android.provider6")).isFalse(); + assertThat(controller.toggleServiceInfoEnabled(providerService1a)).isTrue(); + assertThat(controller.toggleServiceInfoEnabled(providerService2)).isTrue(); + assertThat(controller.toggleServiceInfoEnabled(providerService3)).isTrue(); + assertThat(controller.toggleServiceInfoEnabled(providerService4)).isTrue(); + assertThat(controller.toggleServiceInfoEnabled(providerService5)).isTrue(); + assertThat(controller.toggleServiceInfoEnabled(providerService6)).isFalse(); // Check that they are all actually registered. - Set enabledProviders = controller.getEnabledProviders(); + Set enabledProviders = controller.getEnabledProviders(); assertThat(enabledProviders.size()).isEqualTo(5); - assertThat(enabledProviders.contains("com.android.provider1")).isTrue(); - assertThat(enabledProviders.contains("com.android.provider2")).isTrue(); - assertThat(enabledProviders.contains("com.android.provider3")).isTrue(); - assertThat(enabledProviders.contains("com.android.provider4")).isTrue(); - assertThat(enabledProviders.contains("com.android.provider5")).isTrue(); - assertThat(enabledProviders.contains("com.android.provider6")).isFalse(); + assertThat(enabledProviders.contains(providerService1a)).isTrue(); + assertThat(enabledProviders.contains(providerService2)).isTrue(); + assertThat(enabledProviders.contains(providerService3)).isTrue(); + assertThat(enabledProviders.contains(providerService4)).isTrue(); + assertThat(enabledProviders.contains(providerService5)).isTrue(); + assertThat(enabledProviders.contains(providerService6)).isFalse(); // Check that the settings string has the right component names. List enabledServices = controller.getEnabledSettings(); - assertThat(enabledServices.size()).isEqualTo(6); + assertThat(enabledServices.size()).isEqualTo(5); assertThat(enabledServices.contains("com.android.provider1/ClassA")).isTrue(); - assertThat(enabledServices.contains("com.android.provider1/ClassB")).isTrue(); + assertThat(enabledServices.contains("com.android.provider1/ClassB")).isFalse(); assertThat(enabledServices.contains("com.android.provider2/ClassA")).isTrue(); assertThat(enabledServices.contains("com.android.provider3/ClassA")).isTrue(); assertThat(enabledServices.contains("com.android.provider4/ClassA")).isTrue(); @@ -255,23 +262,24 @@ public class CredentialManagerPreferenceControllerTest { assertThat(enabledServices.contains("com.android.provider6/ClassA")).isFalse(); // Toggle the provider disabled. - controller.togglePackageNameDisabled("com.android.provider2"); + controller.toggleServiceInfoDisabled(providerService2); // Check that the provider was removed from the list of providers. - Set currentlyEnabledProviders = controller.getEnabledProviders(); + Set currentlyEnabledProviders = controller.getEnabledProviders(); assertThat(currentlyEnabledProviders.size()).isEqualTo(4); - assertThat(currentlyEnabledProviders.contains("com.android.provider1")).isTrue(); - assertThat(currentlyEnabledProviders.contains("com.android.provider2")).isFalse(); - assertThat(currentlyEnabledProviders.contains("com.android.provider3")).isTrue(); - assertThat(currentlyEnabledProviders.contains("com.android.provider4")).isTrue(); - assertThat(currentlyEnabledProviders.contains("com.android.provider5")).isTrue(); - assertThat(currentlyEnabledProviders.contains("com.android.provider6")).isFalse(); + assertThat(enabledProviders.contains(providerService1a)).isTrue(); + assertThat(enabledProviders.contains(providerService2)).isFalse(); + assertThat(enabledProviders.contains(providerService3)).isTrue(); + assertThat(enabledProviders.contains(providerService4)).isTrue(); + assertThat(enabledProviders.contains(providerService5)).isTrue(); + assertThat(enabledProviders.contains(providerService6)).isFalse(); // Check that the provider was removed from the list of services stored in the setting. List currentlyEnabledServices = controller.getEnabledSettings(); - assertThat(currentlyEnabledServices.size()).isEqualTo(5); + assertThat(currentlyEnabledServices.size()).isEqualTo(4); assertThat(currentlyEnabledServices.contains("com.android.provider1/ClassA")).isTrue(); - assertThat(currentlyEnabledServices.contains("com.android.provider1/ClassB")).isTrue(); + assertThat(currentlyEnabledServices.contains("com.android.provider1/ClassB")).isFalse(); + assertThat(currentlyEnabledServices.contains("com.android.provider2/ClassA")).isFalse(); assertThat(currentlyEnabledServices.contains("com.android.provider3/ClassA")).isTrue(); assertThat(currentlyEnabledServices.contains("com.android.provider4/ClassA")).isTrue(); assertThat(currentlyEnabledServices.contains("com.android.provider5/ClassA")).isTrue(); @@ -280,6 +288,8 @@ public class CredentialManagerPreferenceControllerTest { @Test public void handlesCredentialProviderInfoEnabledDisabled() { + ServiceInfo providerService1 = createServiceInfo("com.android.provider1", "ClassA"); + ServiceInfo providerService2 = createServiceInfo("com.android.provider2", "ClassA"); CredentialProviderInfo providerInfo1 = createCredentialProviderInfoWithIsEnabled( "com.android.provider1", "ClassA", "Service Title", false); @@ -296,10 +306,10 @@ public class CredentialManagerPreferenceControllerTest { assertThat(providerInfo2.isEnabled()).isTrue(); // Check that they are all actually registered. - Set enabledProviders = controller.getEnabledProviders(); + Set enabledProviders = controller.getEnabledProviders(); assertThat(enabledProviders.size()).isEqualTo(1); - assertThat(enabledProviders.contains("com.android.provider1")).isFalse(); - assertThat(enabledProviders.contains("com.android.provider2")).isTrue(); + assertThat(enabledProviders.contains(providerInfo1.getServiceInfo())).isFalse(); + assertThat(enabledProviders.contains(providerInfo2.getServiceInfo())).isTrue(); // Check that the settings string has the right component names. List enabledServices = controller.getEnabledSettings(); @@ -308,66 +318,6 @@ public class CredentialManagerPreferenceControllerTest { assertThat(enabledServices.contains("com.android.provider2/ClassA")).isTrue(); } - @Test - public void displayPreference_withServices_preferencesAdded_sameAppShouldBeMerged() { - CredentialProviderInfo serviceA1 = - createCredentialProviderInfoWithAppLabel( - TEST_PACKAGE_NAME_A, - "CredManProviderA1", - TEST_TITLE_APP_A, - "test service A1"); - CredentialProviderInfo serviceB1 = - createCredentialProviderInfoWithAppLabel( - TEST_PACKAGE_NAME_B, - "CredManProviderB1", - TEST_TITLE_APP_B, - "test service B"); - CredentialProviderInfo serviceC1 = - createCredentialProviderInfoWithAppLabel( - TEST_PACKAGE_NAME_C, - "CredManProviderC1", - "test app C1", - TEST_TITLE_SERVICE_C); - CredentialProviderInfo serviceC2 = - createCredentialProviderInfoWithAppLabel( - TEST_PACKAGE_NAME_C, - "CredManProviderC2", - "test app C2", - TEST_TITLE_SERVICE_C); - CredentialProviderInfo serviceC3 = - createCredentialProviderInfoBuilder( - TEST_PACKAGE_NAME_C, - "CredManProviderC3", - "test app C3", - TEST_TITLE_SERVICE_C) - .setEnabled(true) - .build(); - - CredentialManagerPreferenceController controller = - createControllerWithServices( - Lists.newArrayList(serviceA1, serviceB1, serviceC1, serviceC2, serviceC3)); - controller.displayPreference(mScreen); - - assertThat(controller.isConnected()).isFalse(); - assertThat(mCredentialsPreferenceCategory.getPreferenceCount()).isEqualTo(3); - - Map prefs = - controller.buildPreferenceList(mContext, mCredentialsPreferenceCategory); - assertThat(prefs.size()).isEqualTo(3); - SwitchPreference pref1 = prefs.get(TEST_PACKAGE_NAME_A); - assertThat(pref1).isNotNull(); - assertThat(pref1.getTitle()).isEqualTo(TEST_TITLE_APP_A); - assertThat(pref1.isChecked()).isFalse(); - SwitchPreference pref2 = prefs.get(TEST_PACKAGE_NAME_B); - assertThat(pref2).isNotNull(); - assertThat(pref2.getTitle()).isEqualTo(TEST_TITLE_APP_B); - assertThat(pref2.isChecked()).isFalse(); - SwitchPreference pref3 = prefs.get(TEST_PACKAGE_NAME_C); - assertThat(pref3).isNotNull(); - assertThat(pref3.getTitle()).isEqualTo(TEST_TITLE_SERVICE_C); - assertThat(pref3.isChecked()).isTrue(); - } - @Test public void handleIntentWithProviderServiceInfo_handleBadIntent_missingData() { CredentialProviderInfo cpi = createCredentialProviderInfo(); @@ -390,7 +340,8 @@ public class CredentialManagerPreferenceControllerTest { Intent intent = new Intent(Settings.ACTION_CREDENTIAL_PROVIDER); intent.setData(Uri.parse("package:" + packageName)); assertThat(controller.verifyReceivedIntent(intent)).isTrue(); - controller.completeEnableProviderDialogBox(DialogInterface.BUTTON_POSITIVE, packageName, true); + controller.completeEnableProviderDialogBox( + DialogInterface.BUTTON_POSITIVE, cpi.getServiceInfo(), true); assertThat(mReceivedResultCode.get()).isEqualTo(Activity.RESULT_OK); } @@ -405,7 +356,7 @@ public class CredentialManagerPreferenceControllerTest { Intent intent = new Intent(Settings.ACTION_CREDENTIAL_PROVIDER); intent.setData(Uri.parse("package:" + packageName)); assertThat(controller.verifyReceivedIntent(intent)).isTrue(); - controller.completeEnableProviderDialogBox(DialogInterface.BUTTON_NEGATIVE, packageName, true); + controller.completeEnableProviderDialogBox(DialogInterface.BUTTON_NEGATIVE, cpi.getServiceInfo(), true); assertThat(mReceivedResultCode.get()).isEqualTo(Activity.RESULT_CANCELED); } @@ -444,7 +395,8 @@ public class CredentialManagerPreferenceControllerTest { CredentialManagerPreferenceController controller = new CredentialManagerPreferenceController( mContext, mCredentialsPreferenceCategory.getKey()); - controller.setAvailableServices(() -> mock(Lifecycle.class), availableServices, addServiceOverride); + controller.setAvailableServices( + () -> mock(Lifecycle.class), availableServices, addServiceOverride); controller.setDelegate(mDelegate); return controller; } @@ -518,4 +470,14 @@ public class CredentialManagerPreferenceControllerTest { return new CredentialProviderInfo.Builder(si).setOverrideLabel(serviceLabel); } + + private ServiceInfo createServiceInfo(String packageName, String className) { + ServiceInfo si = new ServiceInfo(); + si.packageName = packageName; + si.name = className; + + si.applicationInfo = new ApplicationInfo(); + si.applicationInfo.packageName = packageName; + return si; + } }