diff options
| author | Colin Cross <ccross@android.com> | 2019-09-10 19:18:48 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2019-09-10 19:18:48 +0000 |
| commit | dd67a548b27f171ccabbf47af76075d252cb883e (patch) | |
| tree | f0321c0b9ab43cd0a5634eab5fb808eb4edf6601 | |
| parent | bdfd7d6adbc4fe02adcb1da0fca99f01acb87606 (diff) | |
| parent | 68cdb74d9198dac04c9a5f65f77d685b69673f79 (diff) | |
Merge "Revert "Use language tags to store Configuration's locale list."" into qt-dev
| -rw-r--r-- | core/java/android/content/res/Configuration.java | 11 | ||||
| -rw-r--r-- | core/java/android/os/LocaleList.java | 22 | ||||
| -rw-r--r-- | core/proto/android/content/configuration.proto | 3 | ||||
| -rw-r--r-- | core/proto/android/content/locale.proto | 1 | ||||
| -rw-r--r-- | core/tests/coretests/src/android/content/res/ConfigurationTest.java | 79 |
5 files changed, 24 insertions, 92 deletions
diff --git a/core/java/android/content/res/Configuration.java b/core/java/android/content/res/Configuration.java index ac1cbd4619df..9cf54f41a64b 100644 --- a/core/java/android/content/res/Configuration.java +++ b/core/java/android/content/res/Configuration.java @@ -23,7 +23,6 @@ import static android.content.ConfigurationProto.HARD_KEYBOARD_HIDDEN; import static android.content.ConfigurationProto.KEYBOARD; import static android.content.ConfigurationProto.KEYBOARD_HIDDEN; import static android.content.ConfigurationProto.LOCALES; -import static android.content.ConfigurationProto.LOCALE_LIST; import static android.content.ConfigurationProto.MCC; import static android.content.ConfigurationProto.MNC; import static android.content.ConfigurationProto.NAVIGATION; @@ -1112,7 +1111,7 @@ public final class Configuration implements Parcelable, Comparable<Configuration protoOutputStream.write(MCC, mcc); protoOutputStream.write(MNC, mnc); if (mLocaleList != null) { - protoOutputStream.write(LOCALE_LIST, mLocaleList.toLanguageTags()); + mLocaleList.writeToProto(protoOutputStream, LOCALES); } protoOutputStream.write(SCREEN_LAYOUT, screenLayout); protoOutputStream.write(COLOR_MODE, colorMode); @@ -1284,14 +1283,6 @@ public final class Configuration implements Parcelable, Comparable<Configuration case (int) WINDOW_CONFIGURATION: windowConfiguration.readFromProto(protoInputStream, WINDOW_CONFIGURATION); break; - case (int) LOCALE_LIST: - try { - setLocales(LocaleList.forLanguageTags(protoInputStream.readString( - LOCALE_LIST))); - } catch (Exception e) { - Slog.e(TAG, "error parsing locale list in configuration.", e); - } - break; } } } finally { diff --git a/core/java/android/os/LocaleList.java b/core/java/android/os/LocaleList.java index 0de09efad8ea..7782753e4abc 100644 --- a/core/java/android/os/LocaleList.java +++ b/core/java/android/os/LocaleList.java @@ -21,7 +21,9 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.Size; import android.annotation.UnsupportedAppUsage; +import android.content.LocaleProto; import android.icu.util.ULocale; +import android.util.proto.ProtoOutputStream; import com.android.internal.annotations.GuardedBy; @@ -141,6 +143,26 @@ public final class LocaleList implements Parcelable { } /** + * Helper to write LocaleList to a protocol buffer output stream. Assumes the parent + * protobuf has declared the locale as repeated. + * + * @param protoOutputStream Stream to write the locale to. + * @param fieldId Field Id of the Locale as defined in the parent message. + * @hide + */ + public void writeToProto(ProtoOutputStream protoOutputStream, long fieldId) { + for (int i = 0; i < mList.length; i++) { + final Locale locale = mList[i]; + final long token = protoOutputStream.start(fieldId); + protoOutputStream.write(LocaleProto.LANGUAGE, locale.getLanguage()); + protoOutputStream.write(LocaleProto.COUNTRY, locale.getCountry()); + protoOutputStream.write(LocaleProto.VARIANT, locale.getVariant()); + protoOutputStream.write(LocaleProto.SCRIPT, locale.getScript()); + protoOutputStream.end(token); + } + } + + /** * Retrieves a String representation of the language tags in this list. */ @NonNull diff --git a/core/proto/android/content/configuration.proto b/core/proto/android/content/configuration.proto index 7fa0ff64f8bf..57ced09240f2 100644 --- a/core/proto/android/content/configuration.proto +++ b/core/proto/android/content/configuration.proto @@ -32,7 +32,7 @@ message ConfigurationProto { optional float font_scale = 1; optional uint32 mcc = 2; optional uint32 mnc = 3 [ (.android.privacy).dest = DEST_EXPLICIT ]; - repeated LocaleProto locales = 4 [deprecated = true]; + repeated LocaleProto locales = 4; optional uint32 screen_layout = 5; optional uint32 color_mode = 6; optional uint32 touchscreen = 7; @@ -48,7 +48,6 @@ message ConfigurationProto { optional uint32 smallest_screen_width_dp = 17; optional uint32 density_dpi = 18; optional .android.app.WindowConfigurationProto window_configuration = 19; - optional string locale_list = 20; } /** diff --git a/core/proto/android/content/locale.proto b/core/proto/android/content/locale.proto index a8f2a1334038..bae6ec141981 100644 --- a/core/proto/android/content/locale.proto +++ b/core/proto/android/content/locale.proto @@ -22,7 +22,6 @@ import "frameworks/base/core/proto/android/privacy.proto"; package android.content; message LocaleProto { - option deprecated = true; option (.android.msg_privacy).dest = DEST_AUTOMATIC; optional string language = 1; diff --git a/core/tests/coretests/src/android/content/res/ConfigurationTest.java b/core/tests/coretests/src/android/content/res/ConfigurationTest.java index 4a93f42a0f7c..2fc3e36e7948 100644 --- a/core/tests/coretests/src/android/content/res/ConfigurationTest.java +++ b/core/tests/coretests/src/android/content/res/ConfigurationTest.java @@ -16,29 +16,16 @@ package android.content.res; -import android.content.Context; -import android.os.LocaleList; import android.platform.test.annotations.Presubmit; -import android.util.AtomicFile; -import android.util.proto.ProtoInputStream; -import android.util.proto.ProtoOutputStream; -import androidx.test.InstrumentationRegistry; import androidx.test.filters.SmallTest; -import com.android.server.usage.IntervalStatsProto; - import junit.framework.TestCase; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.util.Locale; - /** * Build/install/run: bit FrameworksCoreTests:android.content.res.ConfigurationTest */ @@ -67,70 +54,4 @@ public class ConfigurationTest extends TestCase { config2.updateFrom(config); assertEquals(config2.screenLayout, Configuration.SCREENLAYOUT_COMPAT_NEEDED); } - - @Test - public void testReadWriteProto() throws Exception { - final Context context = InstrumentationRegistry.getTargetContext(); - final File testDir = new File(context.getFilesDir(), "ConfigurationTest"); - testDir.mkdirs(); - final File proto = new File(testDir, "configs"); - if (proto.exists()) { - proto.delete(); - } - - final Locale arabic = new Locale.Builder().setLocale(new Locale("ar", "AE")).build(); - final Locale urdu = new Locale.Builder().setLocale(new Locale("ur", "IN")).build(); - final Locale urduExtension = new Locale.Builder().setLocale(new Locale("ur", "IN")) - .setExtension('u', "nu-latn").build(); - Configuration write = new Configuration(); - write.setLocales(new LocaleList(arabic, urdu, urduExtension)); - writeToProto(proto, write); - assertTrue("Failed to write configs to proto.", proto.exists()); - - final Configuration read = new Configuration(); - try { - readFromProto(proto, read); - } finally { - proto.delete(); - } - - assertEquals("Missing locales in proto file written to disk.", - read.getLocales().size(), write.getLocales().size()); - assertTrue("Arabic locale not found in Configuration locale list.", - read.getLocales().indexOf(arabic) != -1); - assertTrue("Urdu locale not found in Configuration locale list.", - read.getLocales().indexOf(urdu) != -1); - assertTrue("Urdu locale with extensions not found in Configuration locale list.", - read.getLocales().indexOf(urduExtension) != -1); - } - - private void writeToProto(File f, Configuration config) throws Exception { - final AtomicFile af = new AtomicFile(f); - FileOutputStream fos = af.startWrite(); - try { - final ProtoOutputStream protoOut = new ProtoOutputStream(fos); - final long token = protoOut.start(IntervalStatsProto.CONFIGURATIONS); - config.writeToProto(protoOut, IntervalStatsProto.Configuration.CONFIG, false, false); - protoOut.end(token); - protoOut.flush(); - af.finishWrite(fos); - fos = null; - } finally { - af.failWrite(fos); - } - } - - private void readFromProto(File f, Configuration config) throws Exception { - final AtomicFile afRead = new AtomicFile(f); - try (FileInputStream in = afRead.openRead()) { - final ProtoInputStream protoIn = new ProtoInputStream(in); - if (protoIn.nextField(IntervalStatsProto.CONFIGURATIONS)) { - final long token = protoIn.start(IntervalStatsProto.CONFIGURATIONS); - if (protoIn.nextField(IntervalStatsProto.Configuration.CONFIG)) { - config.readFromProto(protoIn, IntervalStatsProto.Configuration.CONFIG); - protoIn.end(token); - } - } - } - } } |
