diff --git a/core/java/android/content/res/TypedArray.java b/core/java/android/content/res/TypedArray.java index 20dcf83a354d8..d2146acd7cfca 100644 --- a/core/java/android/content/res/TypedArray.java +++ b/core/java/android/content/res/TypedArray.java @@ -885,9 +885,9 @@ public class TypedArray { /** * Extracts theme attributes from a typed array for later resolution using - * {@link Theme#resolveAttributes(int[], int[])}. Removes the entries from - * the typed array so that subsequent calls to typed getters will return the - * default value without crashing. + * {@link android.content.res.Resources.Theme#resolveAttributes(int[], int[])}. + * Removes the entries from the typed array so that subsequent calls to typed + * getters will return the default value without crashing. * * @return an array of length {@link #getIndexCount()} populated with theme * attributes, or null if there are no theme attributes in the typed diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index f74a356f0523c..43145454d4a1c 100644 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -4978,6 +4978,16 @@ + + + + + + + + diff --git a/graphics/java/android/graphics/drawable/VectorDrawable.java b/graphics/java/android/graphics/drawable/VectorDrawable.java index b4d1fdc298284..05b6ea64ad7ba 100644 --- a/graphics/java/android/graphics/drawable/VectorDrawable.java +++ b/graphics/java/android/graphics/drawable/VectorDrawable.java @@ -378,6 +378,8 @@ public class VectorDrawable extends Drawable { mVGTargetsMap.put(newChildGroup.getGroupName(), newChildGroup); } noGroupTag = false; + } else if (SHAPE_VECTOR.equals(tagName)) { + parseVector(res, attrs); } } else if (eventType == XmlPullParser.END_TAG) { final String tagName = parser.getName(); @@ -417,9 +419,31 @@ public class VectorDrawable extends Drawable { throw new XmlPullParserException("no " + tag + " defined"); } + mTintFilter = updateTintFilter(mTintFilter, mVectorState.mTint, mVectorState.mTintMode); + mVectorState.mVPathRenderer.setColorFilter(mTintFilter); + return pathRenderer; } + private void parseVector(Resources r, AttributeSet attrs) throws XmlPullParserException { + final TypedArray a = r.obtainAttributes(attrs, R.styleable.VectorDrawable); + final VectorDrawableState state = mVectorState; + + state.mThemeAttrs = a.extractThemeAttrs(); + + final int tintMode = a.getInt(R.styleable.BitmapDrawable_tintMode, -1); + if (tintMode != -1) { + state.mTintMode = Drawable.parseTintMode(tintMode, Mode.SRC_IN); + } + + final ColorStateList tint = a.getColorStateList(R.styleable.BitmapDrawable_tint); + if (tint != null) { + state.mTint = tint; + } + + a.recycle(); + } + private void printGroupTree(VGroup currentGroup, int level) { String indent = ""; for (int i = 0 ; i < level ; i++) { @@ -440,6 +464,7 @@ public class VectorDrawable extends Drawable { } private static class VectorDrawableState extends ConstantState { + int[] mThemeAttrs; int mChangingConfigurations; VPathRenderer mVPathRenderer; Rect mPadding; @@ -448,6 +473,7 @@ public class VectorDrawable extends Drawable { public VectorDrawableState(VectorDrawableState copy) { if (copy != null) { + mThemeAttrs = copy.mThemeAttrs; mChangingConfigurations = copy.mChangingConfigurations; // TODO: Make sure the constant state are handled correctly. mVPathRenderer = new VPathRenderer(copy.mVPathRenderer);