diff options
| -rw-r--r-- | api/current.txt | 1 | ||||
| -rw-r--r-- | api/system-current.txt | 1 | ||||
| -rw-r--r-- | core/java/android/util/LocaleList.java | 7 | ||||
| -rw-r--r-- | services/core/java/com/android/server/am/ActivityManagerService.java | 17 |
4 files changed, 21 insertions, 5 deletions
diff --git a/api/current.txt b/api/current.txt index a5b7fa82e517..fd2e0384deb2 100644 --- a/api/current.txt +++ b/api/current.txt @@ -34445,6 +34445,7 @@ package android.util { ctor public LocaleList(java.util.Locale[]); method public static android.util.LocaleList forLanguageTags(java.lang.String); method public java.util.Locale get(int); + method public java.util.Locale getBestMatch(java.lang.String[]); method public static android.util.LocaleList getDefault(); method public static android.util.LocaleList getEmptyLocaleList(); method public java.util.Locale getPrimary(); diff --git a/api/system-current.txt b/api/system-current.txt index ac13222270a9..0d5cde459ef8 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -36768,6 +36768,7 @@ package android.util { ctor public LocaleList(java.util.Locale[]); method public static android.util.LocaleList forLanguageTags(java.lang.String); method public java.util.Locale get(int); + method public java.util.Locale getBestMatch(java.lang.String[]); method public static android.util.LocaleList getDefault(); method public static android.util.LocaleList getEmptyLocaleList(); method public java.util.Locale getPrimary(); diff --git a/core/java/android/util/LocaleList.java b/core/java/android/util/LocaleList.java index 0d5c135044dd..c1d23bb9d7e7 100644 --- a/core/java/android/util/LocaleList.java +++ b/core/java/android/util/LocaleList.java @@ -49,6 +49,7 @@ public final class LocaleList { return location < mList.length ? mList[location] : null; } + @Nullable public Locale getPrimary() { return mList.length == 0 ? null : get(0); } @@ -179,6 +180,12 @@ public final class LocaleList { } } + @Nullable + 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(); @GuardedBy("sLock") diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 3a0d80b6945a..0a67f2b42240 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -192,6 +192,7 @@ import android.util.ArraySet; import android.util.AtomicFile; import android.util.DebugUtils; import android.util.EventLog; +import android.util.LocaleList; import android.util.Log; import android.util.Pair; import android.util.PrintWriterPrinter; @@ -2445,7 +2446,7 @@ public final class ActivityManagerService extends ActivityManagerNative mTrackingAssociations = "1".equals(SystemProperties.get("debug.track-associations")); mConfiguration.setToDefaults(); - mConfiguration.setLocale(Locale.getDefault()); + mConfiguration.setLocales(LocaleList.getDefault()); mConfigurationSeq = mConfiguration.seq = 1; mProcessCpuTracker.init(); @@ -17709,6 +17710,9 @@ public final class ActivityManagerService extends ActivityManagerNative UserHandle.USER_NULL); } + // To cache the list of supported system locales + private String[] mSupportedSystemLocales = null; + /** * Do either or both things: (1) change the current configuration, and (2) * make sure the given activity is running with the (now) current @@ -17732,11 +17736,14 @@ public final class ActivityManagerService extends ActivityManagerNative EventLog.writeEvent(EventLogTags.CONFIGURATION_CHANGED, changes); - if (!initLocale && values.locale != null && values.userSetLocale) { - final String languageTag = values.locale.toLanguageTag(); - SystemProperties.set("persist.sys.locale", languageTag); + if (!initLocale && !values.getLocales().isEmpty() && values.userSetLocale) { + if (mSupportedSystemLocales == null) { + mSupportedSystemLocales = Resources.getSystem().getAssets().getLocales(); + } + final Locale locale = values.getLocales().getBestMatch(mSupportedSystemLocales); + SystemProperties.set("persist.sys.locale", locale.toLanguageTag()); mHandler.sendMessage(mHandler.obtainMessage(SEND_LOCALE_TO_MOUNT_DAEMON_MSG, - values.locale)); + locale)); } mConfigurationSeq++; |