summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Raph Levien <raph@google.com> 2016-01-20 12:16:50 -0800
committer Raph Levien <raph@google.com> 2016-01-20 20:18:57 +0000
commit1f0945e9f6fc81f5c58da24a29c86e1efa2714ef (patch)
tree01e6aa85223a5642491f88a2960d887ff7bb72c5
parent770e437d30a5059cad3238d864ef016a04b23b33 (diff)
Update mResolvedLocale more aggressively
A client that mutates the locale of the Configuration being updated can cause failure of the test that mResolvedLocale needs to be recomputed. This patch stashes the previous locale list privately so that updates can be detected even in this case. Bug: 25993843 Change-Id: I1ea17dffd722177fb5b65ee77b9f5ce9a943f15b
-rw-r--r--core/java/android/content/res/Resources.java11
1 files changed, 7 insertions, 4 deletions
diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java
index 7b56eebf34ac..ed64eade0351 100644
--- a/core/java/android/content/res/Resources.java
+++ b/core/java/android/content/res/Resources.java
@@ -161,7 +161,11 @@ public class Resources {
final DisplayMetrics mMetrics = new DisplayMetrics();
private final Configuration mConfiguration = new Configuration();
+
+ // Invariant: mResolvedLocale is the resolved locale of mLocalesForResolved
+ private LocaleList mLocalesForResolved = null;
private Locale mResolvedLocale = null;
+
private PluralRules mPluralRule;
private CompatibilityInfo mCompatibilityInfo = CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO;
@@ -1950,8 +1954,7 @@ public class Resources {
final int configChanges = calcConfigChanges(config);
LocaleList locales = mConfiguration.getLocales();
- final boolean setLocalesToDefault = locales.isEmpty();
- if (setLocalesToDefault) {
+ if (locales.isEmpty()) {
locales = LocaleList.getDefault();
mConfiguration.setLocales(locales);
}
@@ -1980,8 +1983,7 @@ public class Resources {
keyboardHidden = mConfiguration.keyboardHidden;
}
- if (setLocalesToDefault || mResolvedLocale == null
- || (configChanges & Configuration.NATIVE_CONFIG_LOCALE) != 0) {
+ if (locales != mLocalesForResolved) {
if (locales.size() == 1) {
// This is an optimization to avoid the JNI call(s) when the result of
// getFirstMatchWithEnglishSupported() does not depend on the supported locales.
@@ -1997,6 +1999,7 @@ public class Resources {
}
mResolvedLocale = locales.getFirstMatchWithEnglishSupported(supportedLocales);
}
+ mLocalesForResolved = locales;
}
mAssets.setConfiguration(mConfiguration.mcc, mConfiguration.mnc,
adjustLanguageTag(mResolvedLocale.toLanguageTag()),