summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
authorMaurice Lam <yukl@google.com>2018-12-04 20:21:40 -0800
committerMaurice Lam <yukl@google.com>2019-01-23 18:15:22 -0800
commit522ecbefc9b452188fff1b69f52bcb4f1d7a3429 (patch)
treeafd2258b94ba2d56c3effc47097fc354dab7f203 /core/java
parent40931ce46680a5cc00a0c4dcf15f980e2b472ab5 (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.java33
-rw-r--r--core/java/android/os/LocaleList.java10
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)) {