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);