summaryrefslogtreecommitdiffstats
path: root/core/java/android/view/ContextThemeWrapper.java
diff options
context:
space:
mode:
Diffstat (limited to 'core/java/android/view/ContextThemeWrapper.java')
-rw-r--r--core/java/android/view/ContextThemeWrapper.java38
1 files changed, 38 insertions, 0 deletions
diff --git a/core/java/android/view/ContextThemeWrapper.java b/core/java/android/view/ContextThemeWrapper.java
index 626f385..6c733f9 100644
--- a/core/java/android/view/ContextThemeWrapper.java
+++ b/core/java/android/view/ContextThemeWrapper.java
@@ -18,6 +18,7 @@ package android.view;
import android.content.Context;
import android.content.ContextWrapper;
+import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Build;
@@ -30,6 +31,8 @@ public class ContextThemeWrapper extends ContextWrapper {
private int mThemeResource;
private Resources.Theme mTheme;
private LayoutInflater mInflater;
+ private Configuration mOverrideConfiguration;
+ private Resources mResources;
public ContextThemeWrapper() {
super(null);
@@ -45,6 +48,41 @@ public class ContextThemeWrapper extends ContextWrapper {
super.attachBaseContext(newBase);
mBase = newBase;
}
+
+ /**
+ * Call to set an "override configuration" on this context -- this is
+ * a configuration that replies one or more values of the standard
+ * configuration that is applied to the context. See
+ * {@link Context#createConfigurationContext(Configuration)} for more
+ * information.
+ *
+ * <p>This method can only be called once, and must be called before any
+ * calls to {@link #getResources()} are made.
+ */
+ public void applyOverrideConfiguration(Configuration overrideConfiguration) {
+ if (mResources != null) {
+ throw new IllegalStateException("getResources() has already been called");
+ }
+ if (mOverrideConfiguration != null) {
+ throw new IllegalStateException("Override configuration has already been set");
+ }
+ mOverrideConfiguration = new Configuration(overrideConfiguration);
+ }
+
+ @Override
+ public Resources getResources() {
+ if (mResources != null) {
+ return mResources;
+ }
+ if (mOverrideConfiguration == null) {
+ mResources = super.getResources();
+ return mResources;
+ } else {
+ Context resc = createConfigurationContext(mOverrideConfiguration);
+ mResources = resc.getResources();
+ return mResources;
+ }
+ }
@Override public void setTheme(int resid) {
mThemeResource = resid;