summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
authorMihai Niță <mnita@google.com>2016-03-31 00:53:41 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2016-03-31 00:53:42 +0000
commitaeaa8d62563da3b615f54b564e01aba3a98f29da (patch)
treeaa3a744a8ffba6b57bae4f3c172278b5742249c4 /core/java
parentd847b511d3828fa6cb7a740ecd8876f16524f684 (diff)
parent4de75e9fa22e5937ff7f9ad206bb71ac95beb881 (diff)
Merge "Ignore stopwords in the Arabic locale sort" into nyc-dev
Diffstat (limited to 'core/java')
-rw-r--r--core/java/com/android/internal/app/LocaleHelper.java19
1 files changed, 18 insertions, 1 deletions
diff --git a/core/java/com/android/internal/app/LocaleHelper.java b/core/java/com/android/internal/app/LocaleHelper.java
index d8d6e56ac69a..36db5d742b4a 100644
--- a/core/java/com/android/internal/app/LocaleHelper.java
+++ b/core/java/com/android/internal/app/LocaleHelper.java
@@ -181,6 +181,7 @@ public class LocaleHelper {
public static final class LocaleInfoComparator implements Comparator<LocaleStore.LocaleInfo> {
private final Collator mCollator;
private final boolean mCountryMode;
+ private static final String PREFIX_ARABIC = "\u0627\u0644"; // ALEF-LAM, ال
/**
* Constructor.
@@ -192,6 +193,20 @@ public class LocaleHelper {
mCountryMode = countryMode;
}
+ /*
+ * The Arabic collation should ignore Alef-Lam at the beginning (b/26277596)
+ *
+ * We look at the label's locale, not the current system locale.
+ * This is because the name of the Arabic language itself is in Arabic,
+ * and starts with Alef-Lam, no matter what the system locale is.
+ */
+ private String removePrefixForCompare(Locale locale, String str) {
+ if ("ar".equals(locale.getLanguage()) && str.startsWith(PREFIX_ARABIC)) {
+ return str.substring(PREFIX_ARABIC.length());
+ }
+ return str;
+ }
+
/**
* Compares its two arguments for order.
*
@@ -206,7 +221,9 @@ public class LocaleHelper {
// and "all others" (== 0)
if (mCountryMode || (lhs.isSuggested() == rhs.isSuggested())) {
// They are in the same "bucket" (suggested / others), so we compare the text
- return mCollator.compare(lhs.getLabel(mCountryMode), rhs.getLabel(mCountryMode));
+ return mCollator.compare(
+ removePrefixForCompare(lhs.getLocale(), lhs.getLabel(mCountryMode)),
+ removePrefixForCompare(rhs.getLocale(), rhs.getLabel(mCountryMode)));
} else {
// One locale is suggested and one is not, so we put them in different "buckets"
return lhs.isSuggested() ? -1 : 1;