Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8bca6985 authored by Roozbeh Pournader's avatar Roozbeh Pournader
Browse files

Support LocaleLists in ActivityManagerService.

Also add a placeholder method for locale negotiation to LocaleList,
to be filled later.

There is no change in behavior expected by this CL yet. But once we
support setting the first locale to something the system doesn't
support, and implement the locale negotiation, this will cause the
system locale to be set to the first supported locale, instead of
just the default from Settings.

Change-Id: Iec983a5707daffb5bf54eac79ff0856a96631960
parent 4d859fdb
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -34407,6 +34407,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();
+1 −0
Original line number Diff line number Diff line
@@ -36728,6 +36728,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();
+7 −0
Original line number Diff line number Diff line
@@ -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")
+12 −5
Original line number Diff line number Diff line
@@ -226,6 +226,7 @@ import android.text.format.DateUtils;
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;
@@ -2385,7 +2386,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();
@@ -17641,6 +17642,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
@@ -17664,11 +17668,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++;