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();
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();
return location < mList.length ? mList[location] : null;
}
+ @Nullable
public Locale getPrimary() {
return mList.length == 0 ? null : get(0);
}
}
}
+ @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")
import android.text.format.Time;
import android.util.AtomicFile;
import android.util.EventLog;
+import android.util.LocaleList;
import android.util.Log;
import android.util.Pair;
import android.util.PrintWriterPrinter;
mTrackingAssociations = "1".equals(SystemProperties.get("debug.track-associations"));
mConfiguration.setToDefaults();
- mConfiguration.setLocale(Locale.getDefault());
+ mConfiguration.setLocales(LocaleList.getDefault());
mConfigurationSeq = mConfiguration.seq = 1;
mProcessCpuTracker.init();
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
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++;