diff options
| author | Maurice Lam <yukl@google.com> | 2018-12-04 20:21:40 -0800 |
|---|---|---|
| committer | Maurice Lam <yukl@google.com> | 2019-01-23 18:15:22 -0800 |
| commit | 522ecbefc9b452188fff1b69f52bcb4f1d7a3429 (patch) | |
| tree | afd2258b94ba2d56c3effc47097fc354dab7f203 /core/java | |
| parent | 40931ce46680a5cc00a0c4dcf15f980e2b472ab5 (diff) | |
Add system APIs to implement locale picker
Expose some system APIs to allow setup wizard to implement a locale
picker without using hidden APIs.
Test: Added GTS test
Bug: 114040620
Change-Id: I3793458d62d3131f6e2ef916be65228d75774bda
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/app/ActivityManager.java | 33 | ||||
| -rw-r--r-- | core/java/android/os/LocaleList.java | 10 |
2 files changed, 43 insertions, 0 deletions
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index e0b8d78ebabc..03358eeb59b9 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -54,6 +54,7 @@ import android.os.Bundle; import android.os.Debug; import android.os.Handler; import android.os.IBinder; +import android.os.LocaleList; import android.os.Parcel; import android.os.Parcelable; import android.os.Process; @@ -67,6 +68,7 @@ import android.util.DisplayMetrics; import android.util.Singleton; import android.util.Size; +import com.android.internal.app.LocalePicker; import com.android.internal.app.procstats.ProcessStats; import com.android.internal.os.RoSystemProperties; import com.android.internal.os.TransferPipe; @@ -83,7 +85,9 @@ import java.io.PrintWriter; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; +import java.util.Collection; import java.util.List; +import java.util.Locale; /** * <p> @@ -3427,6 +3431,35 @@ public class ActivityManager { } /** + * Sets the current locales of the device. Calling app must have the permission + * {@code android.permission.CHANGE_CONFIGURATION} and + * {@code android.permission.WRITE_SETTINGS}. + * + * @hide + */ + @SystemApi + public void setDeviceLocales(@NonNull LocaleList locales) { + LocalePicker.updateLocales(locales); + } + + /** + * Returns a list of supported locales by this system. It includes all locales that are + * selectable by the user, potentially including locales that the framework does not have + * translated resources for. To get locales that the framework has translated resources for, use + * {@code Resources.getSystem().getAssets().getLocales()} instead. + * + * @hide + */ + @SystemApi + public @NonNull Collection<Locale> getSupportedLocales() { + ArrayList<Locale> locales = new ArrayList<>(); + for (String localeTag : LocalePicker.getSupportedLocales(mContext)) { + locales.add(Locale.forLanguageTag(localeTag)); + } + return locales; + } + + /** * Get the device configuration attributes. */ public ConfigurationInfo getDeviceConfigurationInfo() { diff --git a/core/java/android/os/LocaleList.java b/core/java/android/os/LocaleList.java index 87e1b7d21f53..1420e2f5ce10 100644 --- a/core/java/android/os/LocaleList.java +++ b/core/java/android/os/LocaleList.java @@ -20,6 +20,7 @@ import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.Size; +import android.annotation.SystemApi; import android.content.LocaleProto; import android.icu.util.ULocale; import android.util.proto.ProtoOutputStream; @@ -324,6 +325,15 @@ public final class LocaleList implements Parcelable { return LOCALE_EN_XA.equals(locale) || LOCALE_AR_XB.equals(locale); } + /** + * Returns true if locale is a pseudo-locale, false otherwise. + * {@hide} + */ + @SystemApi + public static boolean isPseudoLocale(@Nullable ULocale locale) { + return isPseudoLocale(locale != null ? locale.toLocale() : null); + } + @IntRange(from=0, to=1) private static int matchScore(Locale supported, Locale desired) { if (supported.equals(desired)) { |
