Merge "Use right theme for drawable inflation." into lmp-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
92a52142fd
@ -163,7 +163,7 @@ public final class BridgeResources extends Resources {
|
|||||||
Pair<String, ResourceValue> value = getResourceValue(id, mPlatformResourceFlag);
|
Pair<String, ResourceValue> value = getResourceValue(id, mPlatformResourceFlag);
|
||||||
|
|
||||||
if (value != null) {
|
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.
|
// id was not found or not resolved. Throw a NotFoundException.
|
||||||
|
@ -32,6 +32,7 @@ import com.android.resources.ResourceType;
|
|||||||
import org.xmlpull.v1.XmlPullParser;
|
import org.xmlpull.v1.XmlPullParser;
|
||||||
import org.xmlpull.v1.XmlPullParserException;
|
import org.xmlpull.v1.XmlPullParserException;
|
||||||
|
|
||||||
|
import android.content.res.Resources.Theme;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.util.DisplayMetrics;
|
import android.util.DisplayMetrics;
|
||||||
import android.util.TypedValue;
|
import android.util.TypedValue;
|
||||||
@ -115,6 +116,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.
|
* Return the number of values in this array.
|
||||||
*/
|
*/
|
||||||
@ -663,7 +671,7 @@ public final class BridgeTypedArray extends TypedArray {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ResourceValue value = mResourceData[index];
|
ResourceValue value = mResourceData[index];
|
||||||
return ResourceHelper.getDrawable(value, mContext);
|
return ResourceHelper.getDrawable(value, mContext, mTheme);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -58,7 +58,8 @@ public class Resources_Theme_Delegate {
|
|||||||
Resources thisResources, Theme thisTheme,
|
Resources thisResources, Theme thisTheme,
|
||||||
int[] attrs) {
|
int[] attrs) {
|
||||||
boolean changed = setupResources(thisTheme);
|
boolean changed = setupResources(thisTheme);
|
||||||
TypedArray ta = RenderSessionImpl.getCurrentContext().obtainStyledAttributes(attrs);
|
BridgeTypedArray ta = RenderSessionImpl.getCurrentContext().obtainStyledAttributes(attrs);
|
||||||
|
ta.setTheme(thisTheme);
|
||||||
restoreResources(changed);
|
restoreResources(changed);
|
||||||
return ta;
|
return ta;
|
||||||
}
|
}
|
||||||
@ -69,7 +70,9 @@ public class Resources_Theme_Delegate {
|
|||||||
int resid, int[] attrs)
|
int resid, int[] attrs)
|
||||||
throws NotFoundException {
|
throws NotFoundException {
|
||||||
boolean changed = setupResources(thisTheme);
|
boolean changed = setupResources(thisTheme);
|
||||||
TypedArray ta = RenderSessionImpl.getCurrentContext().obtainStyledAttributes(resid, attrs);
|
BridgeTypedArray ta = RenderSessionImpl.getCurrentContext().obtainStyledAttributes(resid,
|
||||||
|
attrs);
|
||||||
|
ta.setTheme(thisTheme);
|
||||||
restoreResources(changed);
|
restoreResources(changed);
|
||||||
return ta;
|
return ta;
|
||||||
}
|
}
|
||||||
@ -79,8 +82,9 @@ public class Resources_Theme_Delegate {
|
|||||||
Resources thisResources, Theme thisTheme,
|
Resources thisResources, Theme thisTheme,
|
||||||
AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes) {
|
AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes) {
|
||||||
boolean changed = setupResources(thisTheme);
|
boolean changed = setupResources(thisTheme);
|
||||||
TypedArray ta = RenderSessionImpl.getCurrentContext().obtainStyledAttributes(set, attrs,
|
BridgeTypedArray ta = RenderSessionImpl.getCurrentContext().obtainStyledAttributes(set,
|
||||||
defStyleAttr, defStyleRes);
|
attrs, defStyleAttr, defStyleRes);
|
||||||
|
ta.setTheme(thisTheme);
|
||||||
restoreResources(changed);
|
restoreResources(changed);
|
||||||
return ta;
|
return ta;
|
||||||
}
|
}
|
||||||
@ -91,8 +95,8 @@ public class Resources_Theme_Delegate {
|
|||||||
int resid, TypedValue outValue,
|
int resid, TypedValue outValue,
|
||||||
boolean resolveRefs) {
|
boolean resolveRefs) {
|
||||||
boolean changed = setupResources(thisTheme);
|
boolean changed = setupResources(thisTheme);
|
||||||
boolean found = RenderSessionImpl.getCurrentContext().resolveThemeAttribute(
|
boolean found = RenderSessionImpl.getCurrentContext().resolveThemeAttribute(resid,
|
||||||
resid, outValue, resolveRefs);
|
outValue, resolveRefs);
|
||||||
restoreResources(changed);
|
restoreResources(changed);
|
||||||
return found;
|
return found;
|
||||||
}
|
}
|
||||||
|
@ -115,7 +115,7 @@ public final class BridgeContext extends Context {
|
|||||||
private int mDynamicIdGenerator = 0x02030000; // Base id for R.style in custom namespace
|
private int mDynamicIdGenerator = 0x02030000; // Base id for R.style in custom namespace
|
||||||
|
|
||||||
// cache for TypedArray generated from IStyleResourceValue object
|
// 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 BridgeInflater mBridgeInflater;
|
||||||
|
|
||||||
private BridgeContentResolver mContentResolver;
|
private BridgeContentResolver mContentResolver;
|
||||||
@ -467,7 +467,7 @@ public final class BridgeContext extends Context {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@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
|
// 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
|
// and the styles already applied to it. A null value of style indicates that the default
|
||||||
// theme should be used.
|
// theme should be used.
|
||||||
@ -475,7 +475,7 @@ public final class BridgeContext extends Context {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final TypedArray obtainStyledAttributes(int resid, int[] attrs)
|
public final BridgeTypedArray obtainStyledAttributes(int resid, int[] attrs)
|
||||||
throws Resources.NotFoundException {
|
throws Resources.NotFoundException {
|
||||||
// get the StyleResourceValue based on the resId;
|
// get the StyleResourceValue based on the resId;
|
||||||
StyleResourceValue style = getStyleByDynamicId(resid);
|
StyleResourceValue style = getStyleByDynamicId(resid);
|
||||||
@ -485,9 +485,9 @@ public final class BridgeContext extends Context {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (mTypedArrayCache == null) {
|
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);
|
mTypedArrayCache.put(attrs, map);
|
||||||
|
|
||||||
BridgeTypedArray ta = createStyleBasedTypedArray(style, attrs);
|
BridgeTypedArray ta = createStyleBasedTypedArray(style, attrs);
|
||||||
@ -497,14 +497,14 @@ public final class BridgeContext extends Context {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// get the 2nd map
|
// get the 2nd map
|
||||||
Map<Integer, TypedArray> map = mTypedArrayCache.get(attrs);
|
Map<Integer, BridgeTypedArray> map = mTypedArrayCache.get(attrs);
|
||||||
if (map == null) {
|
if (map == null) {
|
||||||
map = new HashMap<Integer, TypedArray>();
|
map = new HashMap<Integer, BridgeTypedArray>();
|
||||||
mTypedArrayCache.put(attrs, map);
|
mTypedArrayCache.put(attrs, map);
|
||||||
}
|
}
|
||||||
|
|
||||||
// get the array from the 2nd map
|
// get the array from the 2nd map
|
||||||
TypedArray ta = map.get(resid);
|
BridgeTypedArray ta = map.get(resid);
|
||||||
|
|
||||||
if (ta == null) {
|
if (ta == null) {
|
||||||
ta = createStyleBasedTypedArray(style, attrs);
|
ta = createStyleBasedTypedArray(style, attrs);
|
||||||
@ -515,12 +515,12 @@ public final class BridgeContext extends Context {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final TypedArray obtainStyledAttributes(AttributeSet set, int[] attrs) {
|
public final BridgeTypedArray obtainStyledAttributes(AttributeSet set, int[] attrs) {
|
||||||
return obtainStyledAttributes(set, attrs, 0, 0);
|
return obtainStyledAttributes(set, attrs, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TypedArray obtainStyledAttributes(AttributeSet set, int[] attrs,
|
public BridgeTypedArray obtainStyledAttributes(AttributeSet set, int[] attrs,
|
||||||
int defStyleAttr, int defStyleRes) {
|
int defStyleAttr, int defStyleRes) {
|
||||||
|
|
||||||
Map<String, String> defaultPropMap = null;
|
Map<String, String> defaultPropMap = null;
|
||||||
|
@ -32,6 +32,7 @@ import org.xmlpull.v1.XmlPullParser;
|
|||||||
import org.xmlpull.v1.XmlPullParserException;
|
import org.xmlpull.v1.XmlPullParserException;
|
||||||
|
|
||||||
import android.content.res.ColorStateList;
|
import android.content.res.ColorStateList;
|
||||||
|
import android.content.res.Resources.Theme;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.Bitmap_Delegate;
|
import android.graphics.Bitmap_Delegate;
|
||||||
import android.graphics.NinePatch_Delegate;
|
import android.graphics.NinePatch_Delegate;
|
||||||
@ -166,6 +167,17 @@ public final class ResourceHelper {
|
|||||||
* @param context the current context
|
* @param context the current context
|
||||||
*/
|
*/
|
||||||
public static Drawable getDrawable(ResourceValue value, BridgeContext 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) {
|
if (value == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -209,7 +221,7 @@ public final class ResourceHelper {
|
|||||||
BridgeXmlBlockParser blockParser = new BridgeXmlBlockParser(
|
BridgeXmlBlockParser blockParser = new BridgeXmlBlockParser(
|
||||||
parser, context, value.isFramework());
|
parser, context, value.isFramework());
|
||||||
try {
|
try {
|
||||||
return Drawable.createFromXml(context.getResources(), blockParser);
|
return Drawable.createFromXml(context.getResources(), blockParser, theme);
|
||||||
} finally {
|
} finally {
|
||||||
blockParser.ensurePopped();
|
blockParser.ensurePopped();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user