summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
authorAdam Lesinski <adamlesinski@google.com>2016-04-01 16:41:41 -0700
committerAdam Lesinski <adamlesinski@google.com>2016-04-04 15:24:48 -0700
commit3ad1b4899fcf38de92b6ac8d84e55a738f0baad9 (patch)
tree421e00be3405c82394fbb864040262b4c278211d /core/java/android
parentc83ce39a8e22b2df75cdfcb09b032d0b2244a5ca (diff)
Fix issue with overridden configuration in onConfigurationChanged
When using applyOverrideConfiguration, subsequent callbacks to onConfigurationChanged didn't take into account the locally overridden configuration. This patches the incoming configuration to match what is expected by the application. Bug:27644297 Change-Id: I3a090e9862a56470d999aa0aa4d5bae29f533a11
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/app/ActivityThread.java17
-rw-r--r--core/java/android/view/ContextThemeWrapper.java9
2 files changed, 25 insertions, 1 deletions
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 5b94696c1461..14c4fc6451fc 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -91,6 +91,7 @@ import android.util.PrintWriterPrinter;
import android.util.Slog;
import android.util.SparseIntArray;
import android.util.SuperNotCalledException;
+import android.view.ContextThemeWrapper;
import android.view.Display;
import android.view.ThreadedRenderer;
import android.view.View;
@@ -4632,7 +4633,21 @@ public final class ActivityThread {
}
if (reportToActivity) {
- cb.onConfigurationChanged(newConfig);
+ Configuration configToReport = newConfig;
+
+ if (cb instanceof ContextThemeWrapper) {
+ // ContextThemeWrappers may override the configuration for that context.
+ // We must check and apply any overrides defined.
+ ContextThemeWrapper contextThemeWrapper = (ContextThemeWrapper) cb;
+ final Configuration localOverrideConfig =
+ contextThemeWrapper.getOverrideConfiguration();
+ if (localOverrideConfig != null) {
+ configToReport = new Configuration(newConfig);
+ configToReport.updateFrom(localOverrideConfig);
+ }
+ }
+
+ cb.onConfigurationChanged(configToReport);
}
if (activity != null) {
diff --git a/core/java/android/view/ContextThemeWrapper.java b/core/java/android/view/ContextThemeWrapper.java
index 4888877cb28b..86318e91b885 100644
--- a/core/java/android/view/ContextThemeWrapper.java
+++ b/core/java/android/view/ContextThemeWrapper.java
@@ -101,6 +101,15 @@ public class ContextThemeWrapper extends ContextWrapper {
mOverrideConfiguration = new Configuration(overrideConfiguration);
}
+ /**
+ * Used by ActivityThread to apply the overridden configuration to onConfigurationChange
+ * callbacks.
+ * @hide
+ */
+ public Configuration getOverrideConfiguration() {
+ return mOverrideConfiguration;
+ }
+
@Override
public AssetManager getAssets() {
// Ensure we're returning assets with the correct configuration.