summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/text/TextUtils.java3
-rw-r--r--core/java/com/android/internal/app/LocaleHelper.java26
2 files changed, 25 insertions, 4 deletions
diff --git a/core/java/android/text/TextUtils.java b/core/java/android/text/TextUtils.java
index 1c13962c7dfd..b8fd2ffc8e5e 100644
--- a/core/java/android/text/TextUtils.java
+++ b/core/java/android/text/TextUtils.java
@@ -67,7 +67,8 @@ public class TextUtils {
private static final String TAG = "TextUtils";
/* package */ static final char[] ELLIPSIS_NORMAL = { '\u2026' }; // this is "..."
- private static final String ELLIPSIS_STRING = new String(ELLIPSIS_NORMAL);
+ /** {@hide} */
+ public static final String ELLIPSIS_STRING = new String(ELLIPSIS_NORMAL);
/* package */ static final char[] ELLIPSIS_TWO_DOTS = { '\u2025' }; // this is ".."
private static final String ELLIPSIS_TWO_DOTS_STRING = new String(ELLIPSIS_TWO_DOTS);
diff --git a/core/java/com/android/internal/app/LocaleHelper.java b/core/java/com/android/internal/app/LocaleHelper.java
index 106999bd592c..d26be9195825 100644
--- a/core/java/com/android/internal/app/LocaleHelper.java
+++ b/core/java/com/android/internal/app/LocaleHelper.java
@@ -16,9 +16,11 @@
package com.android.internal.app;
+import android.annotation.IntRange;
import android.icu.text.ListFormatter;
import android.icu.util.ULocale;
import android.os.LocaleList;
+import android.text.TextUtils;
import java.text.Collator;
import java.util.Comparator;
@@ -153,16 +155,34 @@ public class LocaleHelper {
* @param locales the list of locales whose names is to be displayed.
* @param displayLocale the locale in which to display the names.
* If this is null, it will use the default locale.
+ * @param maxLocales maximum number of locales to display. Generates ellipsis after that.
* @return the locale aware list of locale names
*/
- public static String getDisplayLocaleList(LocaleList locales, Locale displayLocale) {
+ public static String getDisplayLocaleList(
+ LocaleList locales, Locale displayLocale, @IntRange(from=1) int maxLocales) {
+
final Locale dispLocale = displayLocale == null ? Locale.getDefault() : displayLocale;
- int localeCount = locales.size();
- final String[] localeNames = new String[localeCount];
+ final boolean ellipsisNeeded = locales.size() > maxLocales;
+ final int localeCount, listCount;
+ if (ellipsisNeeded) {
+ localeCount = maxLocales;
+ listCount = maxLocales + 1; // One extra slot for the ellipsis
+ } else {
+ listCount = localeCount = locales.size();
+ }
+ final String[] localeNames = new String[listCount];
for (int i = 0; i < localeCount; i++) {
localeNames[i] = LocaleHelper.getDisplayName(locales.get(i), dispLocale, false);
}
+ if (ellipsisNeeded) {
+ // Theoretically, we want to extract this from ICU's Resource Bundle for
+ // "Ellipsis/final", which seems to have different strings than the normal ellipsis for
+ // Hong Kong Traditional Chinese (zh_Hant_HK) and Dzongkha (dz). But that has two
+ // problems: it's expensive to extract it, and in case the output string becomes
+ // automatically ellipsized, it can result in weird output.
+ localeNames[maxLocales] = TextUtils.ELLIPSIS_STRING;
+ }
ListFormatter lfn = ListFormatter.getInstance(dispLocale);
return lfn.format((Object[]) localeNames);