summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/util/LocaleList.java63
1 files changed, 3 insertions, 60 deletions
diff --git a/core/java/android/util/LocaleList.java b/core/java/android/util/LocaleList.java
index 1becfb4a0e23..b2ee045db451 100644
--- a/core/java/android/util/LocaleList.java
+++ b/core/java/android/util/LocaleList.java
@@ -19,7 +19,6 @@ package android.util;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.Size;
-import android.icu.util.ULocale;
import android.os.Parcel;
import android.os.Parcelable;
@@ -209,66 +208,10 @@ public final class LocaleList implements Parcelable {
}
}
- private static String getLikelyScript(Locale locale) {
- final String script = locale.getScript();
- if (!script.isEmpty()) {
- return script;
- } else {
- // TODO: Cache the results if this proves to be too slow
- return ULocale.addLikelySubtags(ULocale.forLocale(locale)).getScript();
- }
- }
-
- private static int matchScore(Locale supported, Locale desired) {
- if (supported.equals(desired)) {
- return 1; // return early so we don't do unnecessary computation
- }
- if (!supported.getLanguage().equals(desired.getLanguage())) {
- return 0;
- }
- // There is no match if the two locales use different scripts. This will most imporantly
- // take care of traditional vs simplified Chinese.
- final String supportedScr = getLikelyScript(supported);
- final String desiredScr = getLikelyScript(desired);
- return supportedScr.equals(desiredScr) ? 1 : 0;
- }
-
- /**
- * Returns the first match in the locale list given an unordered array of supported locales
- * in BCP47 format.
- *
- * If the locale list is empty, null would be returned.
- */
@Nullable
- public Locale getFirstMatch(String[] supportedLocales) {
- if (mList.length == 1) { // just one locale, perhaps the most common scenario
- return mList[0];
- }
- if (mList.length == 0) { // empty locale list
- return null;
- }
- // TODO: Figure out what to if en-XA or ar-XB are in the locale list
- int bestIndex = Integer.MAX_VALUE;
- for (String tag : supportedLocales) {
- final Locale supportedLocale = Locale.forLanguageTag(tag);
- // We expect the average length of locale lists used for locale resolution to be
- // smaller than three, so it's OK to do this as an O(mn) algorithm.
- for (int idx = 0; idx < mList.length; idx++) {
- final int score = matchScore(supportedLocale, mList[idx]);
- if (score > 0) {
- if (idx == 0) { // We have a match on the first locale, which is good enough
- return mList[0];
- } else if (idx < bestIndex) {
- bestIndex = idx;
- }
- }
- }
- }
- if (bestIndex == Integer.MAX_VALUE) { // no match was found
- return mList[0];
- } else {
- return mList[bestIndex];
- }
+ public Locale getBestMatch(String[] locales) {
+ // TODO: Fix this to actually do locale negotiation and choose the best match
+ return getPrimary();
}
private final static Object sLock = new Object();