From f1c709783449a7a801e80a300835996831d55eb0 Mon Sep 17 00:00:00 2001 From: Varun Shah Date: Wed, 4 Sep 2019 12:04:02 -0700 Subject: Fix bootloop issue with UsageStatsService. When the configurations are being read from the proto file, if a duplicate locale is found in the list, an exception is thrown from LocaleList which causes the UsageStatsService to crash. Instead, we'll now log a WTF if duplicate locales are found when parsing the configuration proto and not add the duplicate locale to the list. Bug: 140197723 Test: atest UsageStatsDatabaseTest Change-Id: Ie178b3cfdd45e6771a7c0e4bb42e47f79b5c30cc (cherry picked from commit 5d9031dbee2fad9b29e6477f5d7af8b622f2b456) (cherry picked from commit 669d886cdc8b577f318152712c6b3b10c8a82599) --- core/java/android/content/res/Configuration.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/core/java/android/content/res/Configuration.java b/core/java/android/content/res/Configuration.java index 861ae7ba122e..9cf54f41a64b 100644 --- a/core/java/android/content/res/Configuration.java +++ b/core/java/android/content/res/Configuration.java @@ -1222,7 +1222,15 @@ public final class Configuration implements Parcelable, Comparable Date: Tue, 10 Sep 2019 14:41:00 -0400 Subject: Use language tags to store Configuration's locale list. Instead of storing each Locale within a Configuration object's locale list by its language, country, variant, and script to proto, store the entire locale list by its language tags representation which accurately describes each locale. Bug: 140197723 Test: atest ConfigurationTest Test: atest UsageStatsDatabaseTest Test: manually with bad data Merged-In: I53946ed4e31de0ffe9c84875c391a7dec6f5375a Change-Id: Idaae690f79a5c680ad0059a52be62160d9dfb5e7 (cherry picked from commit 5e67462971695e302d0ac9ffc4158d8e08385592) --- core/java/android/content/res/Configuration.java | 11 ++- core/java/android/os/LocaleList.java | 22 ------ core/proto/android/content/configuration.proto | 3 +- core/proto/android/content/locale.proto | 1 + .../src/android/content/res/ConfigurationTest.java | 79 ++++++++++++++++++++++ 5 files changed, 92 insertions(+), 24 deletions(-) diff --git a/core/java/android/content/res/Configuration.java b/core/java/android/content/res/Configuration.java index 9cf54f41a64b..ac1cbd4619df 100644 --- a/core/java/android/content/res/Configuration.java +++ b/core/java/android/content/res/Configuration.java @@ -23,6 +23,7 @@ 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; @@ -1111,7 +1112,7 @@ public final class Configuration implements Parcelable, Comparable