diff --git a/res/values/strings.xml b/res/values/strings.xml
index 79c1f0e0d33..18835ed289d 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -4048,12 +4048,6 @@
%1$s and %2$s
%1$s, %2$s
-
- %1$s, and %2$s
-
- %1$s, %2$s
-
- %1$s, %2$s
This app may charge you money:
diff --git a/src/com/android/settings/accounts/AccountDashboardFragment.java b/src/com/android/settings/accounts/AccountDashboardFragment.java
index 094390c2e0d..281b1bacdd4 100644
--- a/src/com/android/settings/accounts/AccountDashboardFragment.java
+++ b/src/com/android/settings/accounts/AccountDashboardFragment.java
@@ -19,6 +19,7 @@ import static android.provider.Settings.EXTRA_AUTHORITIES;
import android.app.Activity;
import android.content.Context;
+import android.icu.text.ListFormatter;
import android.os.UserHandle;
import android.provider.SearchIndexableResource;
import android.text.BidiFormatter;
@@ -96,12 +97,11 @@ public class AccountDashboardFragment extends DashboardFragment {
final AuthenticatorHelper authHelper = new AuthenticatorHelper(mContext,
UserHandle.of(UserHandle.myUserId()), null /* OnAccountsUpdateListener */);
final String[] types = authHelper.getEnabledAccountTypes();
-
final BidiFormatter bidiFormatter = BidiFormatter.getInstance();
+ final List summaries = new ArrayList<>();
- CharSequence summary = null;
if (types == null || types.length == 0) {
- summary = mContext.getString(R.string.account_dashboard_default_summary);
+ summaries.add(mContext.getString(R.string.account_dashboard_default_summary));
} else {
// Show up to 3 account types, ignore any null value
int accountToAdd = Math.min(3, types.length);
@@ -111,16 +111,12 @@ public class AccountDashboardFragment extends DashboardFragment {
if (TextUtils.isEmpty(label)) {
continue;
}
- if (summary == null) {
- summary = bidiFormatter.unicodeWrap(label);
- } else {
- summary = mContext.getString(R.string.join_many_items_middle, summary,
- bidiFormatter.unicodeWrap(label));
- }
+
+ summaries.add(bidiFormatter.unicodeWrap(label));
accountToAdd--;
}
}
- mSummaryLoader.setSummary(this, summary);
+ mSummaryLoader.setSummary(this, ListFormatter.getInstance().format(summaries));
}
}
}
diff --git a/src/com/android/settings/applications/AppPermissionsPreferenceController.java b/src/com/android/settings/applications/AppPermissionsPreferenceController.java
index 206ef339122..38a56aff004 100644
--- a/src/com/android/settings/applications/AppPermissionsPreferenceController.java
+++ b/src/com/android/settings/applications/AppPermissionsPreferenceController.java
@@ -19,13 +19,14 @@ import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.PermissionGroupInfo;
import android.content.pm.PermissionInfo;
-import android.text.TextUtils;
+import android.icu.text.ListFormatter;
import android.util.ArraySet;
import android.util.Log;
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
+import java.util.ArrayList;
import java.util.List;
import java.util.Set;
@@ -33,7 +34,7 @@ public class AppPermissionsPreferenceController extends BasePreferenceController
private static final String TAG = "AppPermissionPrefCtrl";
private static final String KEY_APP_PERMISSION_GROUPS = "manage_perms";
- private static final String[] PERMISSION_GROUPS = new String[] {
+ private static final String[] PERMISSION_GROUPS = new String[]{
"android.permission-group.LOCATION",
"android.permission-group.MICROPHONE",
"android.permission-group.CAMERA",
@@ -64,18 +65,20 @@ public class AppPermissionsPreferenceController extends BasePreferenceController
public CharSequence getSummary() {
final Set permissions = getAllPermissionsInGroups();
Set grantedPermissionGroups = getGrantedPermissionGroups(permissions);
- CharSequence summary = null;
int count = 0;
+ final List summaries = new ArrayList<>();
+
for (String group : PERMISSION_GROUPS) {
if (!grantedPermissionGroups.contains(group)) {
continue;
}
- summary = concatSummaryText(summary, group);
+ summaries.add(getPermissionGroupLabel(group).toString().toLowerCase());
if (++count >= NUM_PERMISSION_TO_USE) {
break;
}
}
- return count > 0 ? mContext.getString(R.string.app_permissions_summary, summary) : null;
+ return count > 0 ? mContext.getString(R.string.app_permissions_summary,
+ ListFormatter.getInstance().format(summaries)) : null;
}
private Set getGrantedPermissionGroups(Set permissions) {
@@ -96,14 +99,6 @@ public class AppPermissionsPreferenceController extends BasePreferenceController
return grantedPermissionGroups;
}
- private CharSequence concatSummaryText(CharSequence currentSummary, String permission) {
- final String label = getPermissionGroupLabel(permission).toString().toLowerCase();
- if (TextUtils.isEmpty(currentSummary)) {
- return label;
- }
- return mContext.getString(R.string.join_many_items_middle, currentSummary, label);
- }
-
private CharSequence getPermissionGroupLabel(String group) {
try {
final PermissionGroupInfo groupInfo = mPackageManager.getPermissionGroupInfo(group, 0);
diff --git a/src/com/android/settings/applications/DefaultAppSettings.java b/src/com/android/settings/applications/DefaultAppSettings.java
index 8def0157386..3af5bc2882f 100644
--- a/src/com/android/settings/applications/DefaultAppSettings.java
+++ b/src/com/android/settings/applications/DefaultAppSettings.java
@@ -17,6 +17,7 @@ package com.android.settings.applications;
import android.app.Activity;
import android.content.Context;
+import android.icu.text.ListFormatter;
import android.provider.SearchIndexableResource;
import android.text.TextUtils;
@@ -138,25 +139,22 @@ public class DefaultAppSettings extends DashboardFragment {
if (!listening) {
return;
}
- CharSequence summary = concatSummaryText(
- mDefaultBrowserPreferenceController.getDefaultAppLabel(),
- mDefaultPhonePreferenceController.getDefaultAppLabel());
- summary = concatSummaryText(summary,
- mDefaultSmsPreferenceController.getDefaultAppLabel());
+ final List summaries = new ArrayList<>();
+ if(!TextUtils.isEmpty(mDefaultBrowserPreferenceController.getDefaultAppLabel())) {
+ summaries.add(mDefaultBrowserPreferenceController.getDefaultAppLabel());
+ }
+ if(!TextUtils.isEmpty(mDefaultPhonePreferenceController.getDefaultAppLabel())) {
+ summaries.add(mDefaultPhonePreferenceController.getDefaultAppLabel());
+ }
+ if(!TextUtils.isEmpty(mDefaultSmsPreferenceController.getDefaultAppLabel())) {
+ summaries.add(mDefaultSmsPreferenceController.getDefaultAppLabel());
+ }
+
+ CharSequence summary = ListFormatter.getInstance().format(summaries);
if (!TextUtils.isEmpty(summary)) {
mSummaryLoader.setSummary(this, summary);
}
}
-
- private CharSequence concatSummaryText(CharSequence summary1, CharSequence summary2) {
- if (TextUtils.isEmpty(summary1)) {
- return summary2;
- }
- if (TextUtils.isEmpty(summary2)) {
- return summary1;
- }
- return mContext.getString(R.string.join_many_items_middle, summary1, summary2);
- }
}
public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY =
diff --git a/src/com/android/settings/inputmethod/PhysicalKeyboardPreferenceController.java b/src/com/android/settings/inputmethod/PhysicalKeyboardPreferenceController.java
index 9532fbc3f4c..367ea80e07d 100644
--- a/src/com/android/settings/inputmethod/PhysicalKeyboardPreferenceController.java
+++ b/src/com/android/settings/inputmethod/PhysicalKeyboardPreferenceController.java
@@ -18,6 +18,9 @@ package com.android.settings.inputmethod;
import android.content.Context;
import android.hardware.input.InputManager;
+import android.icu.text.ListFormatter;
+
+import androidx.preference.Preference;
import com.android.settings.R;
import com.android.settings.core.PreferenceControllerMixin;
@@ -28,9 +31,9 @@ import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnPause;
import com.android.settingslib.core.lifecycle.events.OnResume;
+import java.util.ArrayList;
import java.util.List;
-import androidx.preference.Preference;
public class PhysicalKeyboardPreferenceController extends AbstractPreferenceController
implements PreferenceControllerMixin, LifecycleObserver, OnResume, OnPause,
@@ -100,15 +103,10 @@ public class PhysicalKeyboardPreferenceController extends AbstractPreferenceCont
mPreference.setSummary(R.string.keyboard_disconnected);
return;
}
- String summary = null;
+ final List summaries = new ArrayList<>();
for (HardKeyboardDeviceInfo info : keyboards) {
- if (summary == null) {
- summary = info.mDeviceName;
- } else {
- summary = mContext.getString(R.string.join_many_items_middle, summary,
- info.mDeviceName);
- }
+ summaries.add(info.mDeviceName);
}
- mPreference.setSummary(summary);
+ mPreference.setSummary(ListFormatter.getInstance().format(summaries));
}
}
diff --git a/src/com/android/settings/inputmethod/VirtualKeyboardPreferenceController.java b/src/com/android/settings/inputmethod/VirtualKeyboardPreferenceController.java
index 4a046469d9d..61e6a424641 100644
--- a/src/com/android/settings/inputmethod/VirtualKeyboardPreferenceController.java
+++ b/src/com/android/settings/inputmethod/VirtualKeyboardPreferenceController.java
@@ -19,11 +19,13 @@ package com.android.settings.inputmethod;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.content.pm.PackageManager;
-import androidx.preference.Preference;
+import android.icu.text.ListFormatter;
import android.text.BidiFormatter;
import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodManager;
+import androidx.preference.Preference;
+
import com.android.settings.R;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.core.AbstractPreferenceController;
@@ -81,15 +83,10 @@ public class VirtualKeyboardPreferenceController extends AbstractPreferenceContr
final BidiFormatter bidiFormatter = BidiFormatter.getInstance();
- String summary = null;
+ final List summaries = new ArrayList<>();
for (String label : labels) {
- if (summary == null) {
- summary = bidiFormatter.unicodeWrap(label);
- } else {
- summary = mContext.getString(R.string.join_many_items_middle, summary,
- bidiFormatter.unicodeWrap(label));
- }
+ summaries.add(bidiFormatter.unicodeWrap(label));
}
- preference.setSummary(summary);
+ preference.setSummary(ListFormatter.getInstance().format(summaries));
}
}
diff --git a/src/com/android/settings/notification/ZenModeSettings.java b/src/com/android/settings/notification/ZenModeSettings.java
index 706bc637502..ddbfcb64879 100644
--- a/src/com/android/settings/notification/ZenModeSettings.java
+++ b/src/com/android/settings/notification/ZenModeSettings.java
@@ -21,9 +21,11 @@ import android.app.FragmentManager;
import android.app.NotificationManager;
import android.app.NotificationManager.Policy;
import android.content.Context;
+import android.icu.text.ListFormatter;
import android.provider.SearchIndexableResource;
import android.provider.Settings;
import android.service.notification.ZenModeConfig;
+
import androidx.annotation.VisibleForTesting;
import androidx.preference.CheckBoxPreference;
@@ -44,6 +46,7 @@ import java.util.Map.Entry;
@SearchIndexable
public class ZenModeSettings extends ZenModeSettingsBase {
private static final String KEY_SOUND = "zen_effect_sound";
+
@Override
public void onResume() {
super.onResume();
@@ -118,18 +121,21 @@ public class ZenModeSettings extends ZenModeSettingsBase {
} else if (numCategories == 2) {
return mContext.getString(R.string.join_two_items, enabledCategories.get(0),
enabledCategories.get(1).toLowerCase());
- } else if (numCategories == 3){
- String secondaryText = mContext.getString(R.string.join_two_unrelated_items,
- enabledCategories.get(0), enabledCategories.get(1).toLowerCase());
- return mContext.getString(R.string.join_many_items_last, secondaryText,
- enabledCategories.get(2).toLowerCase());
+ } else if (numCategories == 3) {
+ final List summaries = new ArrayList<>();
+ summaries.add(enabledCategories.get(0));
+ summaries.add(enabledCategories.get(1).toLowerCase());
+ summaries.add(enabledCategories.get(2).toLowerCase());
+
+ return ListFormatter.getInstance().format(summaries);
} else {
- String secondaryText = mContext.getString(R.string.join_many_items_middle,
- enabledCategories.get(0), enabledCategories.get(1).toLowerCase());
- secondaryText = mContext.getString(R.string.join_many_items_middle, secondaryText,
- enabledCategories.get(2).toLowerCase());
- return mContext.getString(R.string.join_many_items_last, secondaryText,
- mContext.getString(R.string.zen_mode_other_options));
+ final List summaries = new ArrayList<>();
+ summaries.add(enabledCategories.get(0));
+ summaries.add(enabledCategories.get(1).toLowerCase());
+ summaries.add(enabledCategories.get(2).toLowerCase());
+ summaries.add(mContext.getString(R.string.zen_mode_other_options));
+
+ return ListFormatter.getInstance().format(summaries);
}
}
@@ -175,15 +181,15 @@ public class ZenModeSettings extends ZenModeSettingsBase {
String getAutomaticRulesSummary() {
final int count = getEnabledAutomaticRulesCount();
return count == 0 ? mContext.getString(R.string.zen_mode_settings_summary_off)
- : mContext.getResources().getQuantityString(
- R.plurals.zen_mode_settings_summary_on, count, count);
+ : mContext.getResources().getQuantityString(
+ R.plurals.zen_mode_settings_summary_on, count, count);
}
@VisibleForTesting
int getEnabledAutomaticRulesCount() {
int count = 0;
final Map ruleMap =
- NotificationManager.from(mContext).getAutomaticZenRules();
+ NotificationManager.from(mContext).getAutomaticZenRules();
if (ruleMap != null) {
for (Entry ruleEntry : ruleMap.entrySet()) {
final AutomaticZenRule rule = ruleEntry.getValue();
diff --git a/src/com/android/settings/widget/DonutView.java b/src/com/android/settings/widget/DonutView.java
index 76e687e54da..261c85d2657 100644
--- a/src/com/android/settings/widget/DonutView.java
+++ b/src/com/android/settings/widget/DonutView.java
@@ -25,7 +25,6 @@ import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
import android.graphics.Typeface;
import android.icu.text.DecimalFormatSymbols;
-import androidx.annotation.ColorRes;
import android.text.Layout;
import android.text.Spannable;
import android.text.SpannableString;
@@ -37,6 +36,8 @@ import android.text.style.RelativeSizeSpan;
import android.util.AttributeSet;
import android.view.View;
+import androidx.annotation.ColorRes;
+
import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.R;
import com.android.settings.Utils;
@@ -207,7 +208,7 @@ public class DonutView extends View {
R.dimen.storage_donut_view_shrunken_label_text_size));
}
setContentDescription(getContext().getString(
- R.string.join_many_items_middle, mPercentString, mFullString));
+ R.string.join_two_unrelated_items, mPercentString, mFullString));
invalidate();
}
diff --git a/tests/robotests/src/com/android/settings/accounts/AccountDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/accounts/AccountDashboardFragmentTest.java
index ade7dc94ce5..8c74edbabc8 100644
--- a/tests/robotests/src/com/android/settings/accounts/AccountDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accounts/AccountDashboardFragmentTest.java
@@ -15,9 +15,13 @@
*/
package com.android.settings.accounts;
-import static com.android.settings.accounts.AccountDashboardFragmentTest.ShadowAuthenticationHelper.LABELS;
-import static com.android.settings.accounts.AccountDashboardFragmentTest.ShadowAuthenticationHelper.TYPES;
+import static com.android.settings.accounts.AccountDashboardFragmentTest
+ .ShadowAuthenticationHelper.LABELS;
+import static com.android.settings.accounts.AccountDashboardFragmentTest
+ .ShadowAuthenticationHelper.TYPES;
+
import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
@@ -49,116 +53,119 @@ import java.util.List;
@RunWith(RobolectricTestRunner.class)
public class AccountDashboardFragmentTest {
- private AccountDashboardFragment mFragment;
+ private AccountDashboardFragment mFragment;
- @Before
- public void setUp() {
- mFragment = new AccountDashboardFragment();
- }
-
- @After
- public void tearDown() {
- ShadowAuthenticationHelper.reset();
- }
-
- @Test
- public void testCategory_isAccount() {
- assertThat(mFragment.getCategoryKey()).isEqualTo(CategoryKey.CATEGORY_ACCOUNT);
- }
-
- @Test
- @Config(shadows = {
- ShadowAuthenticationHelper.class
- })
- public void updateSummary_hasAccount_shouldDisplayUpTo3AccountTypes() {
- final SummaryLoader loader = mock(SummaryLoader.class);
- final Activity activity = Robolectric.buildActivity(Activity.class).setup().get();
-
- final SummaryLoader.SummaryProvider provider =
- AccountDashboardFragment.SUMMARY_PROVIDER_FACTORY.createSummaryProvider(activity, loader);
- provider.setListening(true);
-
- verify(loader).setSummary(provider, LABELS[0] + ", " + LABELS[1] + ", " + LABELS[2]);
- }
-
- @Test
- @Config(shadows = ShadowAuthenticationHelper.class)
- public void updateSummary_noAccount_shouldDisplayDefaultSummary() {
- ShadowAuthenticationHelper.setEnabledAccount(null);
- final SummaryLoader loader = mock(SummaryLoader.class);
- final Activity activity = Robolectric.buildActivity(Activity.class).setup().get();
-
- final SummaryLoader.SummaryProvider provider =
- AccountDashboardFragment.SUMMARY_PROVIDER_FACTORY.createSummaryProvider(activity, loader);
- provider.setListening(true);
-
- verify(loader).setSummary(provider,
- activity.getString(R.string.account_dashboard_default_summary));
- }
-
- @Test
- @Config(shadows = ShadowAuthenticationHelper.class)
- public void updateSummary_noAccountTypeLabel_shouldNotDisplayNullEntry() {
- final SummaryLoader loader = mock(SummaryLoader.class);
- final Activity activity = Robolectric.buildActivity(Activity.class).setup().get();
- final String[] enabledAccounts = {TYPES[0], "unlabeled_account_type", TYPES[1]};
- ShadowAuthenticationHelper.setEnabledAccount(enabledAccounts);
-
- final SummaryLoader.SummaryProvider provider =
- AccountDashboardFragment.SUMMARY_PROVIDER_FACTORY.createSummaryProvider(activity, loader);
- provider.setListening(true);
-
- // should only show the 2 accounts with labels
- verify(loader).setSummary(provider, LABELS[0] + ", " + LABELS[1]);
- }
-
- @Test
- public void testSearchIndexProvider_shouldIndexResource() {
- final List indexRes =
- AccountDashboardFragment.SEARCH_INDEX_DATA_PROVIDER
- .getXmlResourcesToIndex(RuntimeEnvironment.application, true /* enabled */);
-
- assertThat(indexRes).isNotNull();
- assertThat(indexRes.get(0).xmlResId).isEqualTo(mFragment.getPreferenceScreenResId());
- }
-
- @Implements(AuthenticatorHelper.class)
- public static class ShadowAuthenticationHelper {
-
- static final String[] TYPES = {"type1", "type2", "type3", "type4"};
- static final String[] LABELS = {"LABEL1", "LABEL2", "LABEL3", "LABEL4"};
- private static String[] sEnabledAccount = TYPES;
-
- public void __constructor__(Context context, UserHandle userHandle,
- AuthenticatorHelper.OnAccountsUpdateListener listener) {
+ @Before
+ public void setUp() {
+ mFragment = new AccountDashboardFragment();
}
- private static void setEnabledAccount(String[] enabledAccount) {
- sEnabledAccount = enabledAccount;
+ @After
+ public void tearDown() {
+ ShadowAuthenticationHelper.reset();
}
- @Resetter
- public static void reset() {
- sEnabledAccount = TYPES;
+ @Test
+ public void testCategory_isAccount() {
+ assertThat(mFragment.getCategoryKey()).isEqualTo(CategoryKey.CATEGORY_ACCOUNT);
}
- @Implementation
- public String[] getEnabledAccountTypes() {
- return sEnabledAccount;
+ @Test
+ @Config(shadows = {
+ ShadowAuthenticationHelper.class
+ })
+ public void updateSummary_hasAccount_shouldDisplayUpTo3AccountTypes() {
+ final SummaryLoader loader = mock(SummaryLoader.class);
+ final Activity activity = Robolectric.buildActivity(Activity.class).setup().get();
+
+ final SummaryLoader.SummaryProvider provider =
+ AccountDashboardFragment.SUMMARY_PROVIDER_FACTORY.createSummaryProvider(activity,
+ loader);
+ provider.setListening(true);
+
+ verify(loader).setSummary(provider, LABELS[0] + ", " + LABELS[1] + ", and " + LABELS[2]);
}
- @Implementation
- public CharSequence getLabelForType(Context context, final String accountType) {
- if (TextUtils.equals(accountType, TYPES[0])) {
- return LABELS[0];
- } else if (TextUtils.equals(accountType, TYPES[1])) {
- return LABELS[1];
- } else if (TextUtils.equals(accountType, TYPES[2])) {
- return LABELS[2];
- } else if (TextUtils.equals(accountType, TYPES[3])) {
- return LABELS[3];
- }
- return null;
+ @Test
+ @Config(shadows = ShadowAuthenticationHelper.class)
+ public void updateSummary_noAccount_shouldDisplayDefaultSummary() {
+ ShadowAuthenticationHelper.setEnabledAccount(null);
+ final SummaryLoader loader = mock(SummaryLoader.class);
+ final Activity activity = Robolectric.buildActivity(Activity.class).setup().get();
+
+ final SummaryLoader.SummaryProvider provider =
+ AccountDashboardFragment.SUMMARY_PROVIDER_FACTORY.createSummaryProvider(activity,
+ loader);
+ provider.setListening(true);
+
+ verify(loader).setSummary(provider,
+ activity.getString(R.string.account_dashboard_default_summary));
+ }
+
+ @Test
+ @Config(shadows = ShadowAuthenticationHelper.class)
+ public void updateSummary_noAccountTypeLabel_shouldNotDisplayNullEntry() {
+ final SummaryLoader loader = mock(SummaryLoader.class);
+ final Activity activity = Robolectric.buildActivity(Activity.class).setup().get();
+ final String[] enabledAccounts = {TYPES[0], "unlabeled_account_type", TYPES[1]};
+ ShadowAuthenticationHelper.setEnabledAccount(enabledAccounts);
+
+ final SummaryLoader.SummaryProvider provider =
+ AccountDashboardFragment.SUMMARY_PROVIDER_FACTORY.createSummaryProvider(activity,
+ loader);
+ provider.setListening(true);
+
+ // should only show the 2 accounts with labels
+ verify(loader).setSummary(provider, LABELS[0] + " and " + LABELS[1]);
+ }
+
+ @Test
+ public void testSearchIndexProvider_shouldIndexResource() {
+ final List indexRes =
+ AccountDashboardFragment.SEARCH_INDEX_DATA_PROVIDER
+ .getXmlResourcesToIndex(RuntimeEnvironment.application, true /* enabled */);
+
+ assertThat(indexRes).isNotNull();
+ assertThat(indexRes.get(0).xmlResId).isEqualTo(mFragment.getPreferenceScreenResId());
+ }
+
+ @Implements(AuthenticatorHelper.class)
+ public static class ShadowAuthenticationHelper {
+
+ static final String[] TYPES = {"type1", "type2", "type3", "type4"};
+ static final String[] LABELS = {"LABEL1", "LABEL2", "LABEL3", "LABEL4"};
+ private static String[] sEnabledAccount = TYPES;
+
+ public void __constructor__(Context context, UserHandle userHandle,
+ AuthenticatorHelper.OnAccountsUpdateListener listener) {
+ }
+
+ private static void setEnabledAccount(String[] enabledAccount) {
+ sEnabledAccount = enabledAccount;
+ }
+
+ @Resetter
+ public static void reset() {
+ sEnabledAccount = TYPES;
+ }
+
+ @Implementation
+ public String[] getEnabledAccountTypes() {
+ return sEnabledAccount;
+ }
+
+ @Implementation
+ public CharSequence getLabelForType(Context context, final String accountType) {
+ if (TextUtils.equals(accountType, TYPES[0])) {
+ return LABELS[0];
+ } else if (TextUtils.equals(accountType, TYPES[1])) {
+ return LABELS[1];
+ } else if (TextUtils.equals(accountType, TYPES[2])) {
+ return LABELS[2];
+ } else if (TextUtils.equals(accountType, TYPES[3])) {
+ return LABELS[3];
+ }
+ return null;
+ }
}
- }
}
diff --git a/tests/robotests/src/com/android/settings/applications/AppPermissionsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/AppPermissionsPreferenceControllerTest.java
index 581b30015fd..cb3d3ad7e18 100644
--- a/tests/robotests/src/com/android/settings/applications/AppPermissionsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/AppPermissionsPreferenceControllerTest.java
@@ -17,6 +17,7 @@
package com.android.settings.applications;
import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
@@ -31,6 +32,7 @@ import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.PermissionGroupInfo;
import android.content.pm.PermissionInfo;
+
import androidx.preference.Preference;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
@@ -95,21 +97,21 @@ public class AppPermissionsPreferenceControllerTest {
// create permission groups
when(mPackageManager.getPermissionGroupInfo(eq(PERM_LOCATION), anyInt()))
- .thenReturn(mGroupLocation);
+ .thenReturn(mGroupLocation);
when(mGroupLocation.loadLabel(mPackageManager)).thenReturn(LABEL_LOCATION);
when(mPackageManager.getPermissionGroupInfo(eq(PERM_MICROPHONE), anyInt()))
- .thenReturn(mGroupMic);
+ .thenReturn(mGroupMic);
when(mGroupMic.loadLabel(mPackageManager)).thenReturn(LABEL_MICROPHONE);
when(mPackageManager.getPermissionGroupInfo(eq(PERM_CAMERA), anyInt()))
- .thenReturn(mGroupCamera);
+ .thenReturn(mGroupCamera);
when(mGroupCamera.loadLabel(mPackageManager)).thenReturn(LABEL_CAMERA);
when(mPackageManager.getPermissionGroupInfo(eq(PERM_SMS), anyInt())).thenReturn(mGroupSms);
when(mGroupSms.loadLabel(mPackageManager)).thenReturn(LABEL_SMS);
when(mPackageManager.getPermissionGroupInfo(eq(PERM_CONTACTS), anyInt()))
- .thenReturn(mGroupContacts);
+ .thenReturn(mGroupContacts);
when(mGroupContacts.loadLabel(mPackageManager)).thenReturn(LABEL_CONTACTS);
when(mPackageManager.getPermissionGroupInfo(eq(PERM_PHONE), anyInt()))
- .thenReturn(mGroupPhone);
+ .thenReturn(mGroupPhone);
when(mGroupPhone.loadLabel(mPackageManager)).thenReturn(LABEL_PHONE);
// create permissions
@@ -139,7 +141,7 @@ public class AppPermissionsPreferenceControllerTest {
permissions.add(mPermContacts);
permissions.add(mPermPhone);
when(mPackageManager.queryPermissionsByGroup(anyString(), anyInt()))
- .thenReturn(permissions);
+ .thenReturn(permissions);
mController = spy(new AppPermissionsPreferenceController(mContext));
}
@@ -155,7 +157,7 @@ public class AppPermissionsPreferenceControllerTest {
final PackageInfo info = new PackageInfo();
installedPackages.add(info);
when(mPackageManager.getInstalledPackages(PackageManager.GET_PERMISSIONS))
- .thenReturn(installedPackages);
+ .thenReturn(installedPackages);
mController.updateState(mPreference);
@@ -168,7 +170,7 @@ public class AppPermissionsPreferenceControllerTest {
final PackageInfo info = new PackageInfo();
installedPackages.add(info);
when(mPackageManager.getInstalledPackages(PackageManager.GET_PERMISSIONS))
- .thenReturn(installedPackages);
+ .thenReturn(installedPackages);
PermissionInfo[] permissions = new PermissionInfo[4];
info.permissions = permissions;
@@ -177,33 +179,38 @@ public class AppPermissionsPreferenceControllerTest {
permissions[2] = mPermCamera;
permissions[3] = mPermSms;
mController.updateState(mPreference);
- verify(mPreference).setSummary("Apps using location, microphone, camera");
+
+ verify(mPreference).setSummary("Apps using location, microphone, and camera");
permissions[0] = mPermPhone;
permissions[1] = mPermMic;
permissions[2] = mPermCamera;
permissions[3] = mPermSms;
mController.updateState(mPreference);
- verify(mPreference).setSummary("Apps using microphone, camera, sms");
+
+ verify(mPreference).setSummary("Apps using microphone, camera, and sms");
permissions[0] = mPermPhone;
permissions[1] = mPermMic;
permissions[2] = mPermContacts;
permissions[3] = mPermSms;
mController.updateState(mPreference);
- verify(mPreference).setSummary("Apps using microphone, sms, contacts");
+
+ verify(mPreference).setSummary("Apps using microphone, sms, and contacts");
permissions = new PermissionInfo[2];
info.permissions = permissions;
permissions[0] = mPermLocation;
permissions[1] = mPermCamera;
mController.updateState(mPreference);
- verify(mPreference).setSummary("Apps using location, camera");
+
+ verify(mPreference).setSummary("Apps using location and camera");
permissions = new PermissionInfo[1];
info.permissions = permissions;
permissions[0] = mPermCamera;
mController.updateState(mPreference);
+
verify(mPreference).setSummary("Apps using camera");
}
}
diff --git a/tests/robotests/src/com/android/settings/applications/DefaultAppSettingsTest.java b/tests/robotests/src/com/android/settings/applications/DefaultAppSettingsTest.java
index d17fc87156a..fef8eefee69 100644
--- a/tests/robotests/src/com/android/settings/applications/DefaultAppSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/applications/DefaultAppSettingsTest.java
@@ -91,44 +91,51 @@ public class DefaultAppSettingsTest {
when(defaultBrowser.getDefaultAppLabel()).thenReturn("Browser1");
when(defaultPhone.getDefaultAppLabel()).thenReturn("Phone1");
summaryProvider.setListening(true);
- verify(summaryLoader).setSummary(summaryProvider, "Browser1, Phone1, Sms1");
+
+ verify(summaryLoader).setSummary(summaryProvider, "Browser1, Phone1, and Sms1");
// 2 available
when(defaultSms.getDefaultAppLabel()).thenReturn(null);
when(defaultBrowser.getDefaultAppLabel()).thenReturn("Browser1");
when(defaultPhone.getDefaultAppLabel()).thenReturn("Phone1");
summaryProvider.setListening(true);
- verify(summaryLoader).setSummary(summaryProvider, "Browser1, Phone1");
+
+ verify(summaryLoader).setSummary(summaryProvider, "Browser1 and Phone1");
when(defaultSms.getDefaultAppLabel()).thenReturn("Sms1");
when(defaultBrowser.getDefaultAppLabel()).thenReturn(null);
when(defaultPhone.getDefaultAppLabel()).thenReturn("Phone1");
summaryProvider.setListening(true);
- verify(summaryLoader).setSummary(summaryProvider, "Phone1, Sms1");
+
+ verify(summaryLoader).setSummary(summaryProvider, "Phone1 and Sms1");
when(defaultSms.getDefaultAppLabel()).thenReturn("Sms1");
when(defaultBrowser.getDefaultAppLabel()).thenReturn("Browser1");
when(defaultPhone.getDefaultAppLabel()).thenReturn(null);
summaryProvider.setListening(true);
- verify(summaryLoader).setSummary(summaryProvider, "Phone1, Sms1");
+
+ verify(summaryLoader).setSummary(summaryProvider, "Browser1 and Sms1");
// 1 available
when(defaultSms.getDefaultAppLabel()).thenReturn(null);
when(defaultBrowser.getDefaultAppLabel()).thenReturn("Browser1");
when(defaultPhone.getDefaultAppLabel()).thenReturn(null);
summaryProvider.setListening(true);
+
verify(summaryLoader).setSummary(summaryProvider, "Browser1");
when(defaultSms.getDefaultAppLabel()).thenReturn("Sms1");
when(defaultBrowser.getDefaultAppLabel()).thenReturn(null);
when(defaultPhone.getDefaultAppLabel()).thenReturn(null);
summaryProvider.setListening(true);
+
verify(summaryLoader).setSummary(summaryProvider, "Sms1");
when(defaultSms.getDefaultAppLabel()).thenReturn(null);
when(defaultBrowser.getDefaultAppLabel()).thenReturn(null);
when(defaultPhone.getDefaultAppLabel()).thenReturn("Phone1");
summaryProvider.setListening(true);
+
verify(summaryLoader).setSummary(summaryProvider, "Phone1");
// None available
@@ -136,6 +143,7 @@ public class DefaultAppSettingsTest {
when(defaultBrowser.getDefaultAppLabel()).thenReturn(null);
when(defaultPhone.getDefaultAppLabel()).thenReturn(null);
summaryProvider.setListening(true);
+
verify(summaryLoader, never()).setSummary(summaryProvider, eq(anyString()));
}
diff --git a/tests/robotests/src/com/android/settings/inputmethod/VirtualKeyboardPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/inputmethod/VirtualKeyboardPreferenceControllerTest.java
index c1a963cc678..43e89ffe05c 100644
--- a/tests/robotests/src/com/android/settings/inputmethod/VirtualKeyboardPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/inputmethod/VirtualKeyboardPreferenceControllerTest.java
@@ -17,8 +17,7 @@
package com.android.settings.inputmethod;
import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Matchers.eq;
+
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
@@ -28,11 +27,12 @@ import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.pm.PackageManager;
-import androidx.core.text.BidiFormatter;
-import androidx.preference.Preference;
import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodManager;
+import androidx.core.text.BidiFormatter;
+import androidx.preference.Preference;
+
import com.android.settings.R;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
@@ -125,18 +125,9 @@ public class VirtualKeyboardPreferenceControllerTest {
when(imis.get(0).loadLabel(mPm)).thenReturn(label1);
when(imis.get(1).getPackageName()).thenReturn(componentName.getPackageName());
when(imis.get(1).loadLabel(mPm)).thenReturn(label2);
- when(mContext.getString(eq(R.string.join_many_items_middle), anyString(), anyString()))
- .thenAnswer(invocation -> {
- final Object[] args = invocation.getArguments();
- final String str1 = (String) args[1];
- final String str2 = (String) args[2];
- return RuntimeEnvironment.application.getString(R.string.join_many_items_middle,
- str1, str2);
- });
mController.updateState(mPreference);
- verify(mPreference).setSummary(
- formatter.unicodeWrap(label1) + ", " + formatter.unicodeWrap(label2));
+ verify(mPreference).setSummary(formatter.unicodeWrap(label1) + " and " + formatter.unicodeWrap(label2));
}
}