diff options
author | Deepanshu Gupta <deepanshu@google.com> | 2014-10-28 10:50:00 -0700 |
---|---|---|
committer | Deepanshu Gupta <deepanshu@google.com> | 2014-10-28 11:11:09 -0700 |
commit | 4a605c6fa0027ee116beb29fbc9625721f0441f0 (patch) | |
tree | c235c26bcfc9de4a59f5e787663a5dbbaa252a86 /tools | |
parent | 908a4f9a4372a9627e821b5800936095b0f0b5b0 (diff) | |
download | frameworks_base-4a605c6fa0027ee116beb29fbc9625721f0441f0.zip frameworks_base-4a605c6fa0027ee116beb29fbc9625721f0441f0.tar.gz frameworks_base-4a605c6fa0027ee116beb29fbc9625721f0441f0.tar.bz2 |
Use right theme for drawable inflation.
The theme information was lost when inflating drawables. As a result,
drawables inflated in the ActionBar did not have the right tint.
Change-Id: I13d5c78039e35085ed4902289fcb735bb15d972e
Diffstat (limited to 'tools')
5 files changed, 43 insertions, 19 deletions
diff --git a/tools/layoutlib/bridge/src/android/content/res/BridgeResources.java b/tools/layoutlib/bridge/src/android/content/res/BridgeResources.java index dd573be..66126af 100644 --- a/tools/layoutlib/bridge/src/android/content/res/BridgeResources.java +++ b/tools/layoutlib/bridge/src/android/content/res/BridgeResources.java @@ -163,7 +163,7 @@ public final class BridgeResources extends Resources { Pair<String, ResourceValue> value = getResourceValue(id, mPlatformResourceFlag); if (value != null) { - return ResourceHelper.getDrawable(value.getSecond(), mContext); + return ResourceHelper.getDrawable(value.getSecond(), mContext, theme); } // id was not found or not resolved. Throw a NotFoundException. diff --git a/tools/layoutlib/bridge/src/android/content/res/BridgeTypedArray.java b/tools/layoutlib/bridge/src/android/content/res/BridgeTypedArray.java index 28a109d..a2bd6d7 100644 --- a/tools/layoutlib/bridge/src/android/content/res/BridgeTypedArray.java +++ b/tools/layoutlib/bridge/src/android/content/res/BridgeTypedArray.java @@ -32,6 +32,7 @@ import com.android.resources.ResourceType; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; +import android.content.res.Resources.Theme; import android.graphics.drawable.Drawable; import android.util.DisplayMetrics; import android.util.TypedValue; @@ -116,6 +117,13 @@ public final class BridgeTypedArray extends TypedArray { } /** + * Set the theme to be used for inflating drawables. + */ + public void setTheme(Theme theme) { + mTheme = theme; + } + + /** * Return the number of values in this array. */ @Override @@ -663,7 +671,7 @@ public final class BridgeTypedArray extends TypedArray { } ResourceValue value = mResourceData[index]; - return ResourceHelper.getDrawable(value, mContext); + return ResourceHelper.getDrawable(value, mContext, mTheme); } diff --git a/tools/layoutlib/bridge/src/android/content/res/Resources_Theme_Delegate.java b/tools/layoutlib/bridge/src/android/content/res/Resources_Theme_Delegate.java index f4a9f52..6946ee8 100644 --- a/tools/layoutlib/bridge/src/android/content/res/Resources_Theme_Delegate.java +++ b/tools/layoutlib/bridge/src/android/content/res/Resources_Theme_Delegate.java @@ -58,7 +58,8 @@ public class Resources_Theme_Delegate { Resources thisResources, Theme thisTheme, int[] attrs) { boolean changed = setupResources(thisTheme); - TypedArray ta = RenderSessionImpl.getCurrentContext().obtainStyledAttributes(attrs); + BridgeTypedArray ta = RenderSessionImpl.getCurrentContext().obtainStyledAttributes(attrs); + ta.setTheme(thisTheme); restoreResources(changed); return ta; } @@ -69,7 +70,9 @@ public class Resources_Theme_Delegate { int resid, int[] attrs) throws NotFoundException { boolean changed = setupResources(thisTheme); - TypedArray ta = RenderSessionImpl.getCurrentContext().obtainStyledAttributes(resid, attrs); + BridgeTypedArray ta = RenderSessionImpl.getCurrentContext().obtainStyledAttributes(resid, + attrs); + ta.setTheme(thisTheme); restoreResources(changed); return ta; } @@ -79,8 +82,9 @@ public class Resources_Theme_Delegate { Resources thisResources, Theme thisTheme, AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes) { boolean changed = setupResources(thisTheme); - TypedArray ta = RenderSessionImpl.getCurrentContext().obtainStyledAttributes(set, attrs, - defStyleAttr, defStyleRes); + BridgeTypedArray ta = RenderSessionImpl.getCurrentContext().obtainStyledAttributes(set, + attrs, defStyleAttr, defStyleRes); + ta.setTheme(thisTheme); restoreResources(changed); return ta; } @@ -91,8 +95,8 @@ public class Resources_Theme_Delegate { int resid, TypedValue outValue, boolean resolveRefs) { boolean changed = setupResources(thisTheme); - boolean found = RenderSessionImpl.getCurrentContext().resolveThemeAttribute( - resid, outValue, resolveRefs); + boolean found = RenderSessionImpl.getCurrentContext().resolveThemeAttribute(resid, + outValue, resolveRefs); restoreResources(changed); return found; } diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java index 04a52ea..d804230 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java @@ -115,7 +115,7 @@ public final class BridgeContext extends Context { private int mDynamicIdGenerator = 0x02030000; // Base id for R.style in custom namespace // cache for TypedArray generated from IStyleResourceValue object - private Map<int[], Map<Integer, TypedArray>> mTypedArrayCache; + private Map<int[], Map<Integer, BridgeTypedArray>> mTypedArrayCache; private BridgeInflater mBridgeInflater; private BridgeContentResolver mContentResolver; @@ -467,7 +467,7 @@ public final class BridgeContext extends Context { @Override - public final TypedArray obtainStyledAttributes(int[] attrs) { + public final BridgeTypedArray obtainStyledAttributes(int[] attrs) { // No style is specified here, so create the typed array based on the default theme // and the styles already applied to it. A null value of style indicates that the default // theme should be used. @@ -475,7 +475,7 @@ public final class BridgeContext extends Context { } @Override - public final TypedArray obtainStyledAttributes(int resid, int[] attrs) + public final BridgeTypedArray obtainStyledAttributes(int resid, int[] attrs) throws Resources.NotFoundException { // get the StyleResourceValue based on the resId; StyleResourceValue style = getStyleByDynamicId(resid); @@ -485,9 +485,9 @@ public final class BridgeContext extends Context { } if (mTypedArrayCache == null) { - mTypedArrayCache = new HashMap<int[], Map<Integer,TypedArray>>(); + mTypedArrayCache = new HashMap<int[], Map<Integer,BridgeTypedArray>>(); - Map<Integer, TypedArray> map = new HashMap<Integer, TypedArray>(); + Map<Integer, BridgeTypedArray> map = new HashMap<Integer, BridgeTypedArray>(); mTypedArrayCache.put(attrs, map); BridgeTypedArray ta = createStyleBasedTypedArray(style, attrs); @@ -497,14 +497,14 @@ public final class BridgeContext extends Context { } // get the 2nd map - Map<Integer, TypedArray> map = mTypedArrayCache.get(attrs); + Map<Integer, BridgeTypedArray> map = mTypedArrayCache.get(attrs); if (map == null) { - map = new HashMap<Integer, TypedArray>(); + map = new HashMap<Integer, BridgeTypedArray>(); mTypedArrayCache.put(attrs, map); } // get the array from the 2nd map - TypedArray ta = map.get(resid); + BridgeTypedArray ta = map.get(resid); if (ta == null) { ta = createStyleBasedTypedArray(style, attrs); @@ -515,12 +515,12 @@ public final class BridgeContext extends Context { } @Override - public final TypedArray obtainStyledAttributes(AttributeSet set, int[] attrs) { + public final BridgeTypedArray obtainStyledAttributes(AttributeSet set, int[] attrs) { return obtainStyledAttributes(set, attrs, 0, 0); } @Override - public TypedArray obtainStyledAttributes(AttributeSet set, int[] attrs, + public BridgeTypedArray obtainStyledAttributes(AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes) { Map<String, String> defaultPropMap = null; diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/ResourceHelper.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/ResourceHelper.java index 22f8e1c..677c744 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/ResourceHelper.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/ResourceHelper.java @@ -32,6 +32,7 @@ import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import android.content.res.ColorStateList; +import android.content.res.Resources.Theme; import android.graphics.Bitmap; import android.graphics.Bitmap_Delegate; import android.graphics.NinePatch_Delegate; @@ -166,6 +167,17 @@ public final class ResourceHelper { * @param context the current context */ public static Drawable getDrawable(ResourceValue value, BridgeContext context) { + return getDrawable(value, context, null); + } + + /** + * Returns a drawable from the given value. + * @param value The value that contains a path to a 9 patch, a bitmap or a xml based drawable, + * or an hexadecimal color + * @param context the current context + * @param theme the theme to be used to inflate the drawable. + */ + public static Drawable getDrawable(ResourceValue value, BridgeContext context, Theme theme) { if (value == null) { return null; } @@ -209,7 +221,7 @@ public final class ResourceHelper { BridgeXmlBlockParser blockParser = new BridgeXmlBlockParser( parser, context, value.isFramework()); try { - return Drawable.createFromXml(context.getResources(), blockParser); + return Drawable.createFromXml(context.getResources(), blockParser, theme); } finally { blockParser.ensurePopped(); } |