diff options
| -rw-r--r-- | core/java/android/app/ActivityThread.java | 17 | ||||
| -rw-r--r-- | core/java/android/view/ContextThemeWrapper.java | 9 |
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. |