package androidx.vectordrawable.graphics.drawable; import android.content.res.ColorStateList; import android.content.res.Resources; import android.content.res.TypedArray; import android.content.res.XmlResourceParser; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.ColorFilter; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Path; import android.graphics.PathMeasure; import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; import android.graphics.Rect; import android.graphics.Region; import android.graphics.Shader; import android.graphics.drawable.Drawable; import android.graphics.drawable.VectorDrawable; import android.os.Build; import android.util.AttributeSet; import android.util.Log; import android.util.Xml; import androidx.annotation.ColorInt; import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import androidx.annotation.RestrictTo; import androidx.collection.ArrayMap; import androidx.core.content.res.ComplexColorCompat; import androidx.core.content.res.ResourcesCompat; import androidx.core.content.res.TypedArrayUtils; import androidx.core.graphics.PathParser; import androidx.core.graphics.drawable.DrawableCompat; import c.d.b.a.a; import java.io.IOException; import java.util.ArrayDeque; import java.util.ArrayList; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; public class VectorDrawableCompat extends VectorDrawableCommon { private static final boolean DBG_VECTOR_DRAWABLE = false; public static final PorterDuff.Mode DEFAULT_TINT_MODE = PorterDuff.Mode.SRC_IN; private static final int LINECAP_BUTT = 0; private static final int LINECAP_ROUND = 1; private static final int LINECAP_SQUARE = 2; private static final int LINEJOIN_BEVEL = 2; private static final int LINEJOIN_MITER = 0; private static final int LINEJOIN_ROUND = 1; public static final String LOGTAG = "VectorDrawableCompat"; private static final int MAX_CACHED_BITMAP_SIZE = 2048; private static final String SHAPE_CLIP_PATH = "clip-path"; private static final String SHAPE_GROUP = "group"; private static final String SHAPE_PATH = "path"; private static final String SHAPE_VECTOR = "vector"; private boolean mAllowCaching; private Drawable.ConstantState mCachedConstantStateDelegate; private ColorFilter mColorFilter; private boolean mMutated; private PorterDuffColorFilter mTintFilter; private final Rect mTmpBounds; private final float[] mTmpFloats; private final Matrix mTmpMatrix; private VectorDrawableCompatState mVectorState; public static class VClipPath extends VPath { public VClipPath() { } public VClipPath(VClipPath vClipPath) { super(vClipPath); } private void updateStateFromTypedArray(TypedArray typedArray, XmlPullParser xmlPullParser) { String string = typedArray.getString(0); if (string != null) { this.mPathName = string; } String string2 = typedArray.getString(1); if (string2 != null) { this.mNodes = PathParser.createNodesFromPathData(string2); } this.mFillRule = TypedArrayUtils.getNamedInt(typedArray, xmlPullParser, "fillType", 2, 0); } public void inflate(Resources resources, AttributeSet attributeSet, Resources.Theme theme, XmlPullParser xmlPullParser) { if (TypedArrayUtils.hasAttribute(xmlPullParser, "pathData")) { TypedArray obtainAttributes = TypedArrayUtils.obtainAttributes(resources, theme, attributeSet, AndroidResources.STYLEABLE_VECTOR_DRAWABLE_CLIP_PATH); updateStateFromTypedArray(obtainAttributes, xmlPullParser); obtainAttributes.recycle(); } } @Override // androidx.vectordrawable.graphics.drawable.VectorDrawableCompat.VPath public boolean isClipPath() { return true; } } public static class VFullPath extends VPath { public float mFillAlpha = 1.0f; public ComplexColorCompat mFillColor; public float mStrokeAlpha = 1.0f; public ComplexColorCompat mStrokeColor; public Paint.Cap mStrokeLineCap = Paint.Cap.BUTT; public Paint.Join mStrokeLineJoin = Paint.Join.MITER; public float mStrokeMiterlimit = 4.0f; public float mStrokeWidth = 0.0f; private int[] mThemeAttrs; public float mTrimPathEnd = 1.0f; public float mTrimPathOffset = 0.0f; public float mTrimPathStart = 0.0f; public VFullPath() { } public VFullPath(VFullPath vFullPath) { super(vFullPath); this.mThemeAttrs = vFullPath.mThemeAttrs; this.mStrokeColor = vFullPath.mStrokeColor; this.mStrokeWidth = vFullPath.mStrokeWidth; this.mStrokeAlpha = vFullPath.mStrokeAlpha; this.mFillColor = vFullPath.mFillColor; this.mFillRule = vFullPath.mFillRule; this.mFillAlpha = vFullPath.mFillAlpha; this.mTrimPathStart = vFullPath.mTrimPathStart; this.mTrimPathEnd = vFullPath.mTrimPathEnd; this.mTrimPathOffset = vFullPath.mTrimPathOffset; this.mStrokeLineCap = vFullPath.mStrokeLineCap; this.mStrokeLineJoin = vFullPath.mStrokeLineJoin; this.mStrokeMiterlimit = vFullPath.mStrokeMiterlimit; } private Paint.Cap getStrokeLineCap(int i, Paint.Cap cap) { return i != 0 ? i != 1 ? i != 2 ? cap : Paint.Cap.SQUARE : Paint.Cap.ROUND : Paint.Cap.BUTT; } private Paint.Join getStrokeLineJoin(int i, Paint.Join join) { return i != 0 ? i != 1 ? i != 2 ? join : Paint.Join.BEVEL : Paint.Join.ROUND : Paint.Join.MITER; } private void updateStateFromTypedArray(TypedArray typedArray, XmlPullParser xmlPullParser, Resources.Theme theme) { this.mThemeAttrs = null; if (TypedArrayUtils.hasAttribute(xmlPullParser, "pathData")) { String string = typedArray.getString(0); if (string != null) { this.mPathName = string; } String string2 = typedArray.getString(2); if (string2 != null) { this.mNodes = PathParser.createNodesFromPathData(string2); } this.mFillColor = TypedArrayUtils.getNamedComplexColor(typedArray, xmlPullParser, theme, "fillColor", 1, 0); this.mFillAlpha = TypedArrayUtils.getNamedFloat(typedArray, xmlPullParser, "fillAlpha", 12, this.mFillAlpha); this.mStrokeLineCap = getStrokeLineCap(TypedArrayUtils.getNamedInt(typedArray, xmlPullParser, "strokeLineCap", 8, -1), this.mStrokeLineCap); this.mStrokeLineJoin = getStrokeLineJoin(TypedArrayUtils.getNamedInt(typedArray, xmlPullParser, "strokeLineJoin", 9, -1), this.mStrokeLineJoin); this.mStrokeMiterlimit = TypedArrayUtils.getNamedFloat(typedArray, xmlPullParser, "strokeMiterLimit", 10, this.mStrokeMiterlimit); this.mStrokeColor = TypedArrayUtils.getNamedComplexColor(typedArray, xmlPullParser, theme, "strokeColor", 3, 0); this.mStrokeAlpha = TypedArrayUtils.getNamedFloat(typedArray, xmlPullParser, "strokeAlpha", 11, this.mStrokeAlpha); this.mStrokeWidth = TypedArrayUtils.getNamedFloat(typedArray, xmlPullParser, "strokeWidth", 4, this.mStrokeWidth); this.mTrimPathEnd = TypedArrayUtils.getNamedFloat(typedArray, xmlPullParser, "trimPathEnd", 6, this.mTrimPathEnd); this.mTrimPathOffset = TypedArrayUtils.getNamedFloat(typedArray, xmlPullParser, "trimPathOffset", 7, this.mTrimPathOffset); this.mTrimPathStart = TypedArrayUtils.getNamedFloat(typedArray, xmlPullParser, "trimPathStart", 5, this.mTrimPathStart); this.mFillRule = TypedArrayUtils.getNamedInt(typedArray, xmlPullParser, "fillType", 13, this.mFillRule); } } @Override // androidx.vectordrawable.graphics.drawable.VectorDrawableCompat.VPath public void applyTheme(Resources.Theme theme) { if (this.mThemeAttrs == null) { } } @Override // androidx.vectordrawable.graphics.drawable.VectorDrawableCompat.VPath public boolean canApplyTheme() { return this.mThemeAttrs != null; } public float getFillAlpha() { return this.mFillAlpha; } @ColorInt public int getFillColor() { return this.mFillColor.getColor(); } public float getStrokeAlpha() { return this.mStrokeAlpha; } @ColorInt public int getStrokeColor() { return this.mStrokeColor.getColor(); } public float getStrokeWidth() { return this.mStrokeWidth; } public float getTrimPathEnd() { return this.mTrimPathEnd; } public float getTrimPathOffset() { return this.mTrimPathOffset; } public float getTrimPathStart() { return this.mTrimPathStart; } public void inflate(Resources resources, AttributeSet attributeSet, Resources.Theme theme, XmlPullParser xmlPullParser) { TypedArray obtainAttributes = TypedArrayUtils.obtainAttributes(resources, theme, attributeSet, AndroidResources.STYLEABLE_VECTOR_DRAWABLE_PATH); updateStateFromTypedArray(obtainAttributes, xmlPullParser, theme); obtainAttributes.recycle(); } @Override // androidx.vectordrawable.graphics.drawable.VectorDrawableCompat.VObject public boolean isStateful() { return this.mFillColor.isStateful() || this.mStrokeColor.isStateful(); } @Override // androidx.vectordrawable.graphics.drawable.VectorDrawableCompat.VObject public boolean onStateChanged(int[] iArr) { return this.mStrokeColor.onStateChanged(iArr) | this.mFillColor.onStateChanged(iArr); } public void setFillAlpha(float f) { this.mFillAlpha = f; } public void setFillColor(int i) { this.mFillColor.setColor(i); } public void setStrokeAlpha(float f) { this.mStrokeAlpha = f; } public void setStrokeColor(int i) { this.mStrokeColor.setColor(i); } public void setStrokeWidth(float f) { this.mStrokeWidth = f; } public void setTrimPathEnd(float f) { this.mTrimPathEnd = f; } public void setTrimPathOffset(float f) { this.mTrimPathOffset = f; } public void setTrimPathStart(float f) { this.mTrimPathStart = f; } } public static class VGroup extends VObject { public int mChangingConfigurations; public final ArrayList mChildren; private String mGroupName; public final Matrix mLocalMatrix; private float mPivotX; private float mPivotY; public float mRotate; private float mScaleX; private float mScaleY; public final Matrix mStackedMatrix; private int[] mThemeAttrs; private float mTranslateX; private float mTranslateY; public VGroup() { super(); this.mStackedMatrix = new Matrix(); this.mChildren = new ArrayList<>(); this.mRotate = 0.0f; this.mPivotX = 0.0f; this.mPivotY = 0.0f; this.mScaleX = 1.0f; this.mScaleY = 1.0f; this.mTranslateX = 0.0f; this.mTranslateY = 0.0f; this.mLocalMatrix = new Matrix(); this.mGroupName = null; } public VGroup(VGroup vGroup, ArrayMap arrayMap) { super(); VPath vPath; this.mStackedMatrix = new Matrix(); this.mChildren = new ArrayList<>(); this.mRotate = 0.0f; this.mPivotX = 0.0f; this.mPivotY = 0.0f; this.mScaleX = 1.0f; this.mScaleY = 1.0f; this.mTranslateX = 0.0f; this.mTranslateY = 0.0f; Matrix matrix = new Matrix(); this.mLocalMatrix = matrix; this.mGroupName = null; this.mRotate = vGroup.mRotate; this.mPivotX = vGroup.mPivotX; this.mPivotY = vGroup.mPivotY; this.mScaleX = vGroup.mScaleX; this.mScaleY = vGroup.mScaleY; this.mTranslateX = vGroup.mTranslateX; this.mTranslateY = vGroup.mTranslateY; this.mThemeAttrs = vGroup.mThemeAttrs; String str = vGroup.mGroupName; this.mGroupName = str; this.mChangingConfigurations = vGroup.mChangingConfigurations; if (str != null) { arrayMap.put(str, this); } matrix.set(vGroup.mLocalMatrix); ArrayList arrayList = vGroup.mChildren; for (int i = 0; i < arrayList.size(); i++) { VObject vObject = arrayList.get(i); if (vObject instanceof VGroup) { this.mChildren.add(new VGroup((VGroup) vObject, arrayMap)); } else { if (vObject instanceof VFullPath) { vPath = new VFullPath((VFullPath) vObject); } else if (vObject instanceof VClipPath) { vPath = new VClipPath((VClipPath) vObject); } else { throw new IllegalStateException("Unknown object in the tree!"); } this.mChildren.add(vPath); String str2 = vPath.mPathName; if (str2 != null) { arrayMap.put(str2, vPath); } } } } private void updateLocalMatrix() { this.mLocalMatrix.reset(); this.mLocalMatrix.postTranslate(-this.mPivotX, -this.mPivotY); this.mLocalMatrix.postScale(this.mScaleX, this.mScaleY); this.mLocalMatrix.postRotate(this.mRotate, 0.0f, 0.0f); this.mLocalMatrix.postTranslate(this.mTranslateX + this.mPivotX, this.mTranslateY + this.mPivotY); } private void updateStateFromTypedArray(TypedArray typedArray, XmlPullParser xmlPullParser) { this.mThemeAttrs = null; this.mRotate = TypedArrayUtils.getNamedFloat(typedArray, xmlPullParser, "rotation", 5, this.mRotate); this.mPivotX = typedArray.getFloat(1, this.mPivotX); this.mPivotY = typedArray.getFloat(2, this.mPivotY); this.mScaleX = TypedArrayUtils.getNamedFloat(typedArray, xmlPullParser, "scaleX", 3, this.mScaleX); this.mScaleY = TypedArrayUtils.getNamedFloat(typedArray, xmlPullParser, "scaleY", 4, this.mScaleY); this.mTranslateX = TypedArrayUtils.getNamedFloat(typedArray, xmlPullParser, "translateX", 6, this.mTranslateX); this.mTranslateY = TypedArrayUtils.getNamedFloat(typedArray, xmlPullParser, "translateY", 7, this.mTranslateY); String string = typedArray.getString(0); if (string != null) { this.mGroupName = string; } updateLocalMatrix(); } public String getGroupName() { return this.mGroupName; } public Matrix getLocalMatrix() { return this.mLocalMatrix; } public float getPivotX() { return this.mPivotX; } public float getPivotY() { return this.mPivotY; } public float getRotation() { return this.mRotate; } public float getScaleX() { return this.mScaleX; } public float getScaleY() { return this.mScaleY; } public float getTranslateX() { return this.mTranslateX; } public float getTranslateY() { return this.mTranslateY; } public void inflate(Resources resources, AttributeSet attributeSet, Resources.Theme theme, XmlPullParser xmlPullParser) { TypedArray obtainAttributes = TypedArrayUtils.obtainAttributes(resources, theme, attributeSet, AndroidResources.STYLEABLE_VECTOR_DRAWABLE_GROUP); updateStateFromTypedArray(obtainAttributes, xmlPullParser); obtainAttributes.recycle(); } @Override // androidx.vectordrawable.graphics.drawable.VectorDrawableCompat.VObject public boolean isStateful() { for (int i = 0; i < this.mChildren.size(); i++) { if (this.mChildren.get(i).isStateful()) { return true; } } return false; } @Override // androidx.vectordrawable.graphics.drawable.VectorDrawableCompat.VObject public boolean onStateChanged(int[] iArr) { boolean z2 = false; for (int i = 0; i < this.mChildren.size(); i++) { z2 |= this.mChildren.get(i).onStateChanged(iArr); } return z2; } public void setPivotX(float f) { if (f != this.mPivotX) { this.mPivotX = f; updateLocalMatrix(); } } public void setPivotY(float f) { if (f != this.mPivotY) { this.mPivotY = f; updateLocalMatrix(); } } public void setRotation(float f) { if (f != this.mRotate) { this.mRotate = f; updateLocalMatrix(); } } public void setScaleX(float f) { if (f != this.mScaleX) { this.mScaleX = f; updateLocalMatrix(); } } public void setScaleY(float f) { if (f != this.mScaleY) { this.mScaleY = f; updateLocalMatrix(); } } public void setTranslateX(float f) { if (f != this.mTranslateX) { this.mTranslateX = f; updateLocalMatrix(); } } public void setTranslateY(float f) { if (f != this.mTranslateY) { this.mTranslateY = f; updateLocalMatrix(); } } } public static abstract class VObject { private VObject() { } public boolean isStateful() { return false; } public boolean onStateChanged(int[] iArr) { return false; } } public static abstract class VPath extends VObject { public static final int FILL_TYPE_WINDING = 0; public int mChangingConfigurations; public int mFillRule = 0; public PathParser.PathDataNode[] mNodes = null; public String mPathName; public VPath() { super(); } public VPath(VPath vPath) { super(); this.mPathName = vPath.mPathName; this.mChangingConfigurations = vPath.mChangingConfigurations; this.mNodes = PathParser.deepCopyNodes(vPath.mNodes); } public void applyTheme(Resources.Theme theme) { } public boolean canApplyTheme() { return false; } public PathParser.PathDataNode[] getPathData() { return this.mNodes; } public String getPathName() { return this.mPathName; } public boolean isClipPath() { return false; } public String nodesToString(PathParser.PathDataNode[] pathDataNodeArr) { float[] fArr; String str = " "; for (int i = 0; i < pathDataNodeArr.length; i++) { StringBuilder L = a.L(str); L.append(pathDataNodeArr[i].mType); L.append(":"); str = L.toString(); for (float f : pathDataNodeArr[i].mParams) { StringBuilder L2 = a.L(str); L2.append(f); L2.append(","); str = L2.toString(); } } return str; } public void printVPath(int i) { String str = ""; for (int i2 = 0; i2 < i; i2++) { str = a.t(str, " "); } StringBuilder P = a.P(str, "current path is :"); P.append(this.mPathName); P.append(" pathData is "); P.append(nodesToString(this.mNodes)); Log.v("VectorDrawableCompat", P.toString()); } public void setPathData(PathParser.PathDataNode[] pathDataNodeArr) { if (!PathParser.canMorph(this.mNodes, pathDataNodeArr)) { this.mNodes = PathParser.deepCopyNodes(pathDataNodeArr); } else { PathParser.updateNodes(this.mNodes, pathDataNodeArr); } } public void toPath(Path path) { path.reset(); PathParser.PathDataNode[] pathDataNodeArr = this.mNodes; if (pathDataNodeArr != null) { PathParser.PathDataNode.nodesToPath(pathDataNodeArr, path); } } } public static class VPathRenderer { private static final Matrix IDENTITY_MATRIX = new Matrix(); public float mBaseHeight; public float mBaseWidth; private int mChangingConfigurations; public Paint mFillPaint; private final Matrix mFinalPathMatrix; public Boolean mIsStateful; private final Path mPath; private PathMeasure mPathMeasure; private final Path mRenderPath; public int mRootAlpha; public final VGroup mRootGroup; public String mRootName; public Paint mStrokePaint; public final ArrayMap mVGTargetsMap; public float mViewportHeight; public float mViewportWidth; public VPathRenderer() { this.mFinalPathMatrix = new Matrix(); this.mBaseWidth = 0.0f; this.mBaseHeight = 0.0f; this.mViewportWidth = 0.0f; this.mViewportHeight = 0.0f; this.mRootAlpha = 255; this.mRootName = null; this.mIsStateful = null; this.mVGTargetsMap = new ArrayMap<>(); this.mRootGroup = new VGroup(); this.mPath = new Path(); this.mRenderPath = new Path(); } public VPathRenderer(VPathRenderer vPathRenderer) { this.mFinalPathMatrix = new Matrix(); this.mBaseWidth = 0.0f; this.mBaseHeight = 0.0f; this.mViewportWidth = 0.0f; this.mViewportHeight = 0.0f; this.mRootAlpha = 255; this.mRootName = null; this.mIsStateful = null; ArrayMap arrayMap = new ArrayMap<>(); this.mVGTargetsMap = arrayMap; this.mRootGroup = new VGroup(vPathRenderer.mRootGroup, arrayMap); this.mPath = new Path(vPathRenderer.mPath); this.mRenderPath = new Path(vPathRenderer.mRenderPath); this.mBaseWidth = vPathRenderer.mBaseWidth; this.mBaseHeight = vPathRenderer.mBaseHeight; this.mViewportWidth = vPathRenderer.mViewportWidth; this.mViewportHeight = vPathRenderer.mViewportHeight; this.mChangingConfigurations = vPathRenderer.mChangingConfigurations; this.mRootAlpha = vPathRenderer.mRootAlpha; this.mRootName = vPathRenderer.mRootName; String str = vPathRenderer.mRootName; if (str != null) { arrayMap.put(str, this); } this.mIsStateful = vPathRenderer.mIsStateful; } private static float cross(float f, float f2, float f3, float f4) { return (f * f4) - (f2 * f3); } private void drawGroupTree(VGroup vGroup, Matrix matrix, Canvas canvas, int i, int i2, ColorFilter colorFilter) { vGroup.mStackedMatrix.set(matrix); vGroup.mStackedMatrix.preConcat(vGroup.mLocalMatrix); canvas.save(); for (int i3 = 0; i3 < vGroup.mChildren.size(); i3++) { VObject vObject = vGroup.mChildren.get(i3); if (vObject instanceof VGroup) { drawGroupTree((VGroup) vObject, vGroup.mStackedMatrix, canvas, i, i2, colorFilter); } else if (vObject instanceof VPath) { drawPath(vGroup, (VPath) vObject, canvas, i, i2, colorFilter); } } canvas.restore(); } private void drawPath(VGroup vGroup, VPath vPath, Canvas canvas, int i, int i2, ColorFilter colorFilter) { float f = ((float) i) / this.mViewportWidth; float f2 = ((float) i2) / this.mViewportHeight; float min = Math.min(f, f2); Matrix matrix = vGroup.mStackedMatrix; this.mFinalPathMatrix.set(matrix); this.mFinalPathMatrix.postScale(f, f2); float matrixScale = getMatrixScale(matrix); if (matrixScale != 0.0f) { vPath.toPath(this.mPath); Path path = this.mPath; this.mRenderPath.reset(); if (vPath.isClipPath()) { this.mRenderPath.setFillType(vPath.mFillRule == 0 ? Path.FillType.WINDING : Path.FillType.EVEN_ODD); this.mRenderPath.addPath(path, this.mFinalPathMatrix); canvas.clipPath(this.mRenderPath); return; } VFullPath vFullPath = (VFullPath) vPath; float f3 = vFullPath.mTrimPathStart; if (!(f3 == 0.0f && vFullPath.mTrimPathEnd == 1.0f)) { float f4 = vFullPath.mTrimPathOffset; float f5 = (f3 + f4) % 1.0f; float f6 = (vFullPath.mTrimPathEnd + f4) % 1.0f; if (this.mPathMeasure == null) { this.mPathMeasure = new PathMeasure(); } this.mPathMeasure.setPath(this.mPath, false); float length = this.mPathMeasure.getLength(); float f7 = f5 * length; float f8 = f6 * length; path.reset(); if (f7 > f8) { this.mPathMeasure.getSegment(f7, length, path, true); this.mPathMeasure.getSegment(0.0f, f8, path, true); } else { this.mPathMeasure.getSegment(f7, f8, path, true); } path.rLineTo(0.0f, 0.0f); } this.mRenderPath.addPath(path, this.mFinalPathMatrix); if (vFullPath.mFillColor.willDraw()) { ComplexColorCompat complexColorCompat = vFullPath.mFillColor; if (this.mFillPaint == null) { Paint paint = new Paint(1); this.mFillPaint = paint; paint.setStyle(Paint.Style.FILL); } Paint paint2 = this.mFillPaint; if (complexColorCompat.isGradient()) { Shader shader = complexColorCompat.getShader(); shader.setLocalMatrix(this.mFinalPathMatrix); paint2.setShader(shader); paint2.setAlpha(Math.round(vFullPath.mFillAlpha * 255.0f)); } else { paint2.setShader(null); paint2.setAlpha(255); paint2.setColor(VectorDrawableCompat.applyAlpha(complexColorCompat.getColor(), vFullPath.mFillAlpha)); } paint2.setColorFilter(colorFilter); this.mRenderPath.setFillType(vFullPath.mFillRule == 0 ? Path.FillType.WINDING : Path.FillType.EVEN_ODD); canvas.drawPath(this.mRenderPath, paint2); } if (vFullPath.mStrokeColor.willDraw()) { ComplexColorCompat complexColorCompat2 = vFullPath.mStrokeColor; if (this.mStrokePaint == null) { Paint paint3 = new Paint(1); this.mStrokePaint = paint3; paint3.setStyle(Paint.Style.STROKE); } Paint paint4 = this.mStrokePaint; Paint.Join join = vFullPath.mStrokeLineJoin; if (join != null) { paint4.setStrokeJoin(join); } Paint.Cap cap = vFullPath.mStrokeLineCap; if (cap != null) { paint4.setStrokeCap(cap); } paint4.setStrokeMiter(vFullPath.mStrokeMiterlimit); if (complexColorCompat2.isGradient()) { Shader shader2 = complexColorCompat2.getShader(); shader2.setLocalMatrix(this.mFinalPathMatrix); paint4.setShader(shader2); paint4.setAlpha(Math.round(vFullPath.mStrokeAlpha * 255.0f)); } else { paint4.setShader(null); paint4.setAlpha(255); paint4.setColor(VectorDrawableCompat.applyAlpha(complexColorCompat2.getColor(), vFullPath.mStrokeAlpha)); } paint4.setColorFilter(colorFilter); paint4.setStrokeWidth(vFullPath.mStrokeWidth * min * matrixScale); canvas.drawPath(this.mRenderPath, paint4); } } } private float getMatrixScale(Matrix matrix) { float[] fArr = {0.0f, 1.0f, 1.0f, 0.0f}; matrix.mapVectors(fArr); float cross = cross(fArr[0], fArr[1], fArr[2], fArr[3]); float max = Math.max((float) Math.hypot((double) fArr[0], (double) fArr[1]), (float) Math.hypot((double) fArr[2], (double) fArr[3])); if (max > 0.0f) { return Math.abs(cross) / max; } return 0.0f; } public void draw(Canvas canvas, int i, int i2, ColorFilter colorFilter) { drawGroupTree(this.mRootGroup, IDENTITY_MATRIX, canvas, i, i2, colorFilter); } public float getAlpha() { return ((float) getRootAlpha()) / 255.0f; } public int getRootAlpha() { return this.mRootAlpha; } public boolean isStateful() { if (this.mIsStateful == null) { this.mIsStateful = Boolean.valueOf(this.mRootGroup.isStateful()); } return this.mIsStateful.booleanValue(); } public boolean onStateChanged(int[] iArr) { return this.mRootGroup.onStateChanged(iArr); } public void setAlpha(float f) { setRootAlpha((int) (f * 255.0f)); } public void setRootAlpha(int i) { this.mRootAlpha = i; } } public static class VectorDrawableCompatState extends Drawable.ConstantState { public boolean mAutoMirrored; public boolean mCacheDirty; public boolean mCachedAutoMirrored; public Bitmap mCachedBitmap; public int mCachedRootAlpha; public int[] mCachedThemeAttrs; public ColorStateList mCachedTint; public PorterDuff.Mode mCachedTintMode; public int mChangingConfigurations; public Paint mTempPaint; public ColorStateList mTint; public PorterDuff.Mode mTintMode; public VPathRenderer mVPathRenderer; public VectorDrawableCompatState() { this.mTint = null; this.mTintMode = VectorDrawableCompat.DEFAULT_TINT_MODE; this.mVPathRenderer = new VPathRenderer(); } public VectorDrawableCompatState(VectorDrawableCompatState vectorDrawableCompatState) { this.mTint = null; this.mTintMode = VectorDrawableCompat.DEFAULT_TINT_MODE; if (vectorDrawableCompatState != null) { this.mChangingConfigurations = vectorDrawableCompatState.mChangingConfigurations; VPathRenderer vPathRenderer = new VPathRenderer(vectorDrawableCompatState.mVPathRenderer); this.mVPathRenderer = vPathRenderer; if (vectorDrawableCompatState.mVPathRenderer.mFillPaint != null) { vPathRenderer.mFillPaint = new Paint(vectorDrawableCompatState.mVPathRenderer.mFillPaint); } if (vectorDrawableCompatState.mVPathRenderer.mStrokePaint != null) { this.mVPathRenderer.mStrokePaint = new Paint(vectorDrawableCompatState.mVPathRenderer.mStrokePaint); } this.mTint = vectorDrawableCompatState.mTint; this.mTintMode = vectorDrawableCompatState.mTintMode; this.mAutoMirrored = vectorDrawableCompatState.mAutoMirrored; } } public boolean canReuseBitmap(int i, int i2) { return i == this.mCachedBitmap.getWidth() && i2 == this.mCachedBitmap.getHeight(); } public boolean canReuseCache() { return !this.mCacheDirty && this.mCachedTint == this.mTint && this.mCachedTintMode == this.mTintMode && this.mCachedAutoMirrored == this.mAutoMirrored && this.mCachedRootAlpha == this.mVPathRenderer.getRootAlpha(); } public void createCachedBitmapIfNeeded(int i, int i2) { if (this.mCachedBitmap == null || !canReuseBitmap(i, i2)) { this.mCachedBitmap = Bitmap.createBitmap(i, i2, Bitmap.Config.ARGB_8888); this.mCacheDirty = true; } } public void drawCachedBitmapWithRootAlpha(Canvas canvas, ColorFilter colorFilter, Rect rect) { canvas.drawBitmap(this.mCachedBitmap, (Rect) null, rect, getPaint(colorFilter)); } @Override // android.graphics.drawable.Drawable.ConstantState public int getChangingConfigurations() { return this.mChangingConfigurations; } public Paint getPaint(ColorFilter colorFilter) { if (!hasTranslucentRoot() && colorFilter == null) { return null; } if (this.mTempPaint == null) { Paint paint = new Paint(); this.mTempPaint = paint; paint.setFilterBitmap(true); } this.mTempPaint.setAlpha(this.mVPathRenderer.getRootAlpha()); this.mTempPaint.setColorFilter(colorFilter); return this.mTempPaint; } public boolean hasTranslucentRoot() { return this.mVPathRenderer.getRootAlpha() < 255; } public boolean isStateful() { return this.mVPathRenderer.isStateful(); } @Override // android.graphics.drawable.Drawable.ConstantState @NonNull public Drawable newDrawable() { return new VectorDrawableCompat(this); } @Override // android.graphics.drawable.Drawable.ConstantState @NonNull public Drawable newDrawable(Resources resources) { return new VectorDrawableCompat(this); } public boolean onStateChanged(int[] iArr) { boolean onStateChanged = this.mVPathRenderer.onStateChanged(iArr); this.mCacheDirty |= onStateChanged; return onStateChanged; } public void updateCacheStates() { this.mCachedTint = this.mTint; this.mCachedTintMode = this.mTintMode; this.mCachedRootAlpha = this.mVPathRenderer.getRootAlpha(); this.mCachedAutoMirrored = this.mAutoMirrored; this.mCacheDirty = false; } public void updateCachedBitmap(int i, int i2) { this.mCachedBitmap.eraseColor(0); this.mVPathRenderer.draw(new Canvas(this.mCachedBitmap), i, i2, null); } } @RequiresApi(24) public static class VectorDrawableDelegateState extends Drawable.ConstantState { private final Drawable.ConstantState mDelegateState; public VectorDrawableDelegateState(Drawable.ConstantState constantState) { this.mDelegateState = constantState; } @Override // android.graphics.drawable.Drawable.ConstantState public boolean canApplyTheme() { return this.mDelegateState.canApplyTheme(); } @Override // android.graphics.drawable.Drawable.ConstantState public int getChangingConfigurations() { return this.mDelegateState.getChangingConfigurations(); } @Override // android.graphics.drawable.Drawable.ConstantState public Drawable newDrawable() { VectorDrawableCompat vectorDrawableCompat = new VectorDrawableCompat(); vectorDrawableCompat.mDelegateDrawable = (VectorDrawable) this.mDelegateState.newDrawable(); return vectorDrawableCompat; } @Override // android.graphics.drawable.Drawable.ConstantState public Drawable newDrawable(Resources resources) { VectorDrawableCompat vectorDrawableCompat = new VectorDrawableCompat(); vectorDrawableCompat.mDelegateDrawable = (VectorDrawable) this.mDelegateState.newDrawable(resources); return vectorDrawableCompat; } @Override // android.graphics.drawable.Drawable.ConstantState public Drawable newDrawable(Resources resources, Resources.Theme theme) { VectorDrawableCompat vectorDrawableCompat = new VectorDrawableCompat(); vectorDrawableCompat.mDelegateDrawable = (VectorDrawable) this.mDelegateState.newDrawable(resources, theme); return vectorDrawableCompat; } } public VectorDrawableCompat() { this.mAllowCaching = true; this.mTmpFloats = new float[9]; this.mTmpMatrix = new Matrix(); this.mTmpBounds = new Rect(); this.mVectorState = new VectorDrawableCompatState(); } public VectorDrawableCompat(@NonNull VectorDrawableCompatState vectorDrawableCompatState) { this.mAllowCaching = true; this.mTmpFloats = new float[9]; this.mTmpMatrix = new Matrix(); this.mTmpBounds = new Rect(); this.mVectorState = vectorDrawableCompatState; this.mTintFilter = updateTintFilter(this.mTintFilter, vectorDrawableCompatState.mTint, vectorDrawableCompatState.mTintMode); } public static int applyAlpha(int i, float f) { return (i & 16777215) | (((int) (((float) Color.alpha(i)) * f)) << 24); } @Nullable public static VectorDrawableCompat create(@NonNull Resources resources, @DrawableRes int i, @Nullable Resources.Theme theme) { XmlResourceParser xml; int next; if (Build.VERSION.SDK_INT >= 24) { VectorDrawableCompat vectorDrawableCompat = new VectorDrawableCompat(); vectorDrawableCompat.mDelegateDrawable = ResourcesCompat.getDrawable(resources, i, theme); vectorDrawableCompat.mCachedConstantStateDelegate = new VectorDrawableDelegateState(vectorDrawableCompat.mDelegateDrawable.getConstantState()); return vectorDrawableCompat; } try { xml = resources.getXml(i); AttributeSet asAttributeSet = Xml.asAttributeSet(xml); if (next == 2) { return createFromXmlInner(resources, (XmlPullParser) xml, asAttributeSet, theme); } throw new XmlPullParserException("No start tag found"); } catch (XmlPullParserException e) { Log.e("VectorDrawableCompat", "parser error", e); return null; } catch (IOException e2) { Log.e("VectorDrawableCompat", "parser error", e2); return null; } while (true) { next = xml.next(); if (next == 2 || next == 1) { break; } } } public static VectorDrawableCompat createFromXmlInner(Resources resources, XmlPullParser xmlPullParser, AttributeSet attributeSet, Resources.Theme theme) throws XmlPullParserException, IOException { VectorDrawableCompat vectorDrawableCompat = new VectorDrawableCompat(); vectorDrawableCompat.inflate(resources, xmlPullParser, attributeSet, theme); return vectorDrawableCompat; } private void inflateInternal(Resources resources, XmlPullParser xmlPullParser, AttributeSet attributeSet, Resources.Theme theme) throws XmlPullParserException, IOException { VectorDrawableCompatState vectorDrawableCompatState = this.mVectorState; VPathRenderer vPathRenderer = vectorDrawableCompatState.mVPathRenderer; ArrayDeque arrayDeque = new ArrayDeque(); arrayDeque.push(vPathRenderer.mRootGroup); int eventType = xmlPullParser.getEventType(); int depth = xmlPullParser.getDepth() + 1; boolean z2 = true; while (eventType != 1 && (xmlPullParser.getDepth() >= depth || eventType != 3)) { if (eventType == 2) { String name = xmlPullParser.getName(); VGroup vGroup = (VGroup) arrayDeque.peek(); if ("path".equals(name)) { VFullPath vFullPath = new VFullPath(); vFullPath.inflate(resources, attributeSet, theme, xmlPullParser); vGroup.mChildren.add(vFullPath); if (vFullPath.getPathName() != null) { vPathRenderer.mVGTargetsMap.put(vFullPath.getPathName(), vFullPath); } z2 = false; vectorDrawableCompatState.mChangingConfigurations = vFullPath.mChangingConfigurations | vectorDrawableCompatState.mChangingConfigurations; } else if ("clip-path".equals(name)) { VClipPath vClipPath = new VClipPath(); vClipPath.inflate(resources, attributeSet, theme, xmlPullParser); vGroup.mChildren.add(vClipPath); if (vClipPath.getPathName() != null) { vPathRenderer.mVGTargetsMap.put(vClipPath.getPathName(), vClipPath); } vectorDrawableCompatState.mChangingConfigurations = vClipPath.mChangingConfigurations | vectorDrawableCompatState.mChangingConfigurations; } else if ("group".equals(name)) { VGroup vGroup2 = new VGroup(); vGroup2.inflate(resources, attributeSet, theme, xmlPullParser); vGroup.mChildren.add(vGroup2); arrayDeque.push(vGroup2); if (vGroup2.getGroupName() != null) { vPathRenderer.mVGTargetsMap.put(vGroup2.getGroupName(), vGroup2); } vectorDrawableCompatState.mChangingConfigurations = vGroup2.mChangingConfigurations | vectorDrawableCompatState.mChangingConfigurations; } } else if (eventType == 3 && "group".equals(xmlPullParser.getName())) { arrayDeque.pop(); } eventType = xmlPullParser.next(); } if (z2) { throw new XmlPullParserException("no path defined"); } } private boolean needMirroring() { return isAutoMirrored() && DrawableCompat.getLayoutDirection(this) == 1; } private static PorterDuff.Mode parseTintModeCompat(int i, PorterDuff.Mode mode) { if (i == 3) { return PorterDuff.Mode.SRC_OVER; } if (i == 5) { return PorterDuff.Mode.SRC_IN; } if (i == 9) { return PorterDuff.Mode.SRC_ATOP; } switch (i) { case 14: return PorterDuff.Mode.MULTIPLY; case 15: return PorterDuff.Mode.SCREEN; case 16: return PorterDuff.Mode.ADD; default: return mode; } } private void printGroupTree(VGroup vGroup, int i) { String str = ""; for (int i2 = 0; i2 < i; i2++) { str = a.t(str, " "); } StringBuilder P = a.P(str, "current group is :"); P.append(vGroup.getGroupName()); P.append(" rotation is "); P.append(vGroup.mRotate); Log.v("VectorDrawableCompat", P.toString()); Log.v("VectorDrawableCompat", str + "matrix is :" + vGroup.getLocalMatrix().toString()); for (int i3 = 0; i3 < vGroup.mChildren.size(); i3++) { VObject vObject = vGroup.mChildren.get(i3); if (vObject instanceof VGroup) { printGroupTree((VGroup) vObject, i + 1); } else { ((VPath) vObject).printVPath(i + 1); } } } private void updateStateFromTypedArray(TypedArray typedArray, XmlPullParser xmlPullParser, Resources.Theme theme) throws XmlPullParserException { VectorDrawableCompatState vectorDrawableCompatState = this.mVectorState; VPathRenderer vPathRenderer = vectorDrawableCompatState.mVPathRenderer; vectorDrawableCompatState.mTintMode = parseTintModeCompat(TypedArrayUtils.getNamedInt(typedArray, xmlPullParser, "tintMode", 6, -1), PorterDuff.Mode.SRC_IN); ColorStateList namedColorStateList = TypedArrayUtils.getNamedColorStateList(typedArray, xmlPullParser, theme, "tint", 1); if (namedColorStateList != null) { vectorDrawableCompatState.mTint = namedColorStateList; } vectorDrawableCompatState.mAutoMirrored = TypedArrayUtils.getNamedBoolean(typedArray, xmlPullParser, "autoMirrored", 5, vectorDrawableCompatState.mAutoMirrored); vPathRenderer.mViewportWidth = TypedArrayUtils.getNamedFloat(typedArray, xmlPullParser, "viewportWidth", 7, vPathRenderer.mViewportWidth); float namedFloat = TypedArrayUtils.getNamedFloat(typedArray, xmlPullParser, "viewportHeight", 8, vPathRenderer.mViewportHeight); vPathRenderer.mViewportHeight = namedFloat; if (vPathRenderer.mViewportWidth <= 0.0f) { throw new XmlPullParserException(typedArray.getPositionDescription() + " tag requires viewportWidth > 0"); } else if (namedFloat > 0.0f) { vPathRenderer.mBaseWidth = typedArray.getDimension(3, vPathRenderer.mBaseWidth); float dimension = typedArray.getDimension(2, vPathRenderer.mBaseHeight); vPathRenderer.mBaseHeight = dimension; if (vPathRenderer.mBaseWidth <= 0.0f) { throw new XmlPullParserException(typedArray.getPositionDescription() + " tag requires width > 0"); } else if (dimension > 0.0f) { vPathRenderer.setAlpha(TypedArrayUtils.getNamedFloat(typedArray, xmlPullParser, "alpha", 4, vPathRenderer.getAlpha())); String string = typedArray.getString(0); if (string != null) { vPathRenderer.mRootName = string; vPathRenderer.mVGTargetsMap.put(string, vPathRenderer); } } else { throw new XmlPullParserException(typedArray.getPositionDescription() + " tag requires height > 0"); } } else { throw new XmlPullParserException(typedArray.getPositionDescription() + " tag requires viewportHeight > 0"); } } @Override // androidx.vectordrawable.graphics.drawable.VectorDrawableCommon, android.graphics.drawable.Drawable public /* bridge */ /* synthetic */ void applyTheme(Resources.Theme theme) { super.applyTheme(theme); } @Override // android.graphics.drawable.Drawable public boolean canApplyTheme() { Drawable drawable = this.mDelegateDrawable; if (drawable == null) { return false; } DrawableCompat.canApplyTheme(drawable); return false; } @Override // androidx.vectordrawable.graphics.drawable.VectorDrawableCommon, android.graphics.drawable.Drawable public /* bridge */ /* synthetic */ void clearColorFilter() { super.clearColorFilter(); } @Override // android.graphics.drawable.Drawable public void draw(Canvas canvas) { Drawable drawable = this.mDelegateDrawable; if (drawable != null) { drawable.draw(canvas); return; } copyBounds(this.mTmpBounds); if (this.mTmpBounds.width() > 0 && this.mTmpBounds.height() > 0) { ColorFilter colorFilter = this.mColorFilter; if (colorFilter == null) { colorFilter = this.mTintFilter; } canvas.getMatrix(this.mTmpMatrix); this.mTmpMatrix.getValues(this.mTmpFloats); float abs = Math.abs(this.mTmpFloats[0]); float abs2 = Math.abs(this.mTmpFloats[4]); float abs3 = Math.abs(this.mTmpFloats[1]); float abs4 = Math.abs(this.mTmpFloats[3]); if (!(abs3 == 0.0f && abs4 == 0.0f)) { abs = 1.0f; abs2 = 1.0f; } int min = Math.min(2048, (int) (((float) this.mTmpBounds.width()) * abs)); int min2 = Math.min(2048, (int) (((float) this.mTmpBounds.height()) * abs2)); if (min > 0 && min2 > 0) { int save = canvas.save(); Rect rect = this.mTmpBounds; canvas.translate((float) rect.left, (float) rect.top); if (needMirroring()) { canvas.translate((float) this.mTmpBounds.width(), 0.0f); canvas.scale(-1.0f, 1.0f); } this.mTmpBounds.offsetTo(0, 0); this.mVectorState.createCachedBitmapIfNeeded(min, min2); if (!this.mAllowCaching) { this.mVectorState.updateCachedBitmap(min, min2); } else if (!this.mVectorState.canReuseCache()) { this.mVectorState.updateCachedBitmap(min, min2); this.mVectorState.updateCacheStates(); } this.mVectorState.drawCachedBitmapWithRootAlpha(canvas, colorFilter, this.mTmpBounds); canvas.restoreToCount(save); } } } @Override // android.graphics.drawable.Drawable public int getAlpha() { Drawable drawable = this.mDelegateDrawable; return drawable != null ? DrawableCompat.getAlpha(drawable) : this.mVectorState.mVPathRenderer.getRootAlpha(); } @Override // android.graphics.drawable.Drawable public int getChangingConfigurations() { Drawable drawable = this.mDelegateDrawable; return drawable != null ? drawable.getChangingConfigurations() : super.getChangingConfigurations() | this.mVectorState.getChangingConfigurations(); } @Override // android.graphics.drawable.Drawable public ColorFilter getColorFilter() { Drawable drawable = this.mDelegateDrawable; return drawable != null ? DrawableCompat.getColorFilter(drawable) : this.mColorFilter; } @Override // android.graphics.drawable.Drawable public Drawable.ConstantState getConstantState() { if (this.mDelegateDrawable != null && Build.VERSION.SDK_INT >= 24) { return new VectorDrawableDelegateState(this.mDelegateDrawable.getConstantState()); } this.mVectorState.mChangingConfigurations = getChangingConfigurations(); return this.mVectorState; } @Override // androidx.vectordrawable.graphics.drawable.VectorDrawableCommon, android.graphics.drawable.Drawable public /* bridge */ /* synthetic */ Drawable getCurrent() { return super.getCurrent(); } @Override // android.graphics.drawable.Drawable public int getIntrinsicHeight() { Drawable drawable = this.mDelegateDrawable; return drawable != null ? drawable.getIntrinsicHeight() : (int) this.mVectorState.mVPathRenderer.mBaseHeight; } @Override // android.graphics.drawable.Drawable public int getIntrinsicWidth() { Drawable drawable = this.mDelegateDrawable; return drawable != null ? drawable.getIntrinsicWidth() : (int) this.mVectorState.mVPathRenderer.mBaseWidth; } @Override // androidx.vectordrawable.graphics.drawable.VectorDrawableCommon, android.graphics.drawable.Drawable public /* bridge */ /* synthetic */ int getMinimumHeight() { return super.getMinimumHeight(); } @Override // androidx.vectordrawable.graphics.drawable.VectorDrawableCommon, android.graphics.drawable.Drawable public /* bridge */ /* synthetic */ int getMinimumWidth() { return super.getMinimumWidth(); } @Override // android.graphics.drawable.Drawable public int getOpacity() { Drawable drawable = this.mDelegateDrawable; if (drawable != null) { return drawable.getOpacity(); } return -3; } @Override // androidx.vectordrawable.graphics.drawable.VectorDrawableCommon, android.graphics.drawable.Drawable public /* bridge */ /* synthetic */ boolean getPadding(Rect rect) { return super.getPadding(rect); } @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX}) public float getPixelSize() { VPathRenderer vPathRenderer; VectorDrawableCompatState vectorDrawableCompatState = this.mVectorState; if (vectorDrawableCompatState == null || (vPathRenderer = vectorDrawableCompatState.mVPathRenderer) == null) { return 1.0f; } float f = vPathRenderer.mBaseWidth; if (f == 0.0f) { return 1.0f; } float f2 = vPathRenderer.mBaseHeight; if (f2 == 0.0f) { return 1.0f; } float f3 = vPathRenderer.mViewportHeight; if (f3 == 0.0f) { return 1.0f; } float f4 = vPathRenderer.mViewportWidth; if (f4 == 0.0f) { return 1.0f; } return Math.min(f4 / f, f3 / f2); } @Override // androidx.vectordrawable.graphics.drawable.VectorDrawableCommon, android.graphics.drawable.Drawable public /* bridge */ /* synthetic */ int[] getState() { return super.getState(); } public Object getTargetByName(String str) { return this.mVectorState.mVPathRenderer.mVGTargetsMap.get(str); } @Override // androidx.vectordrawable.graphics.drawable.VectorDrawableCommon, android.graphics.drawable.Drawable public /* bridge */ /* synthetic */ Region getTransparentRegion() { return super.getTransparentRegion(); } @Override // android.graphics.drawable.Drawable public void inflate(Resources resources, XmlPullParser xmlPullParser, AttributeSet attributeSet) throws XmlPullParserException, IOException { Drawable drawable = this.mDelegateDrawable; if (drawable != null) { drawable.inflate(resources, xmlPullParser, attributeSet); } else { inflate(resources, xmlPullParser, attributeSet, null); } } @Override // android.graphics.drawable.Drawable public void inflate(Resources resources, XmlPullParser xmlPullParser, AttributeSet attributeSet, Resources.Theme theme) throws XmlPullParserException, IOException { Drawable drawable = this.mDelegateDrawable; if (drawable != null) { DrawableCompat.inflate(drawable, resources, xmlPullParser, attributeSet, theme); return; } VectorDrawableCompatState vectorDrawableCompatState = this.mVectorState; vectorDrawableCompatState.mVPathRenderer = new VPathRenderer(); TypedArray obtainAttributes = TypedArrayUtils.obtainAttributes(resources, theme, attributeSet, AndroidResources.STYLEABLE_VECTOR_DRAWABLE_TYPE_ARRAY); updateStateFromTypedArray(obtainAttributes, xmlPullParser, theme); obtainAttributes.recycle(); vectorDrawableCompatState.mChangingConfigurations = getChangingConfigurations(); vectorDrawableCompatState.mCacheDirty = true; inflateInternal(resources, xmlPullParser, attributeSet, theme); this.mTintFilter = updateTintFilter(this.mTintFilter, vectorDrawableCompatState.mTint, vectorDrawableCompatState.mTintMode); } @Override // android.graphics.drawable.Drawable public void invalidateSelf() { Drawable drawable = this.mDelegateDrawable; if (drawable != null) { drawable.invalidateSelf(); } else { super.invalidateSelf(); } } @Override // android.graphics.drawable.Drawable public boolean isAutoMirrored() { Drawable drawable = this.mDelegateDrawable; return drawable != null ? DrawableCompat.isAutoMirrored(drawable) : this.mVectorState.mAutoMirrored; } @Override // android.graphics.drawable.Drawable public boolean isStateful() { VectorDrawableCompatState vectorDrawableCompatState; ColorStateList colorStateList; Drawable drawable = this.mDelegateDrawable; return drawable != null ? drawable.isStateful() : super.isStateful() || ((vectorDrawableCompatState = this.mVectorState) != null && (vectorDrawableCompatState.isStateful() || ((colorStateList = this.mVectorState.mTint) != null && colorStateList.isStateful()))); } @Override // androidx.vectordrawable.graphics.drawable.VectorDrawableCommon, android.graphics.drawable.Drawable public /* bridge */ /* synthetic */ void jumpToCurrentState() { super.jumpToCurrentState(); } @Override // android.graphics.drawable.Drawable public Drawable mutate() { Drawable drawable = this.mDelegateDrawable; if (drawable != null) { drawable.mutate(); return this; } if (!this.mMutated && super.mutate() == this) { this.mVectorState = new VectorDrawableCompatState(this.mVectorState); this.mMutated = true; } return this; } @Override // androidx.vectordrawable.graphics.drawable.VectorDrawableCommon, android.graphics.drawable.Drawable public void onBoundsChange(Rect rect) { Drawable drawable = this.mDelegateDrawable; if (drawable != null) { drawable.setBounds(rect); } } @Override // android.graphics.drawable.Drawable public boolean onStateChange(int[] iArr) { PorterDuff.Mode mode; Drawable drawable = this.mDelegateDrawable; if (drawable != null) { return drawable.setState(iArr); } boolean z2 = false; VectorDrawableCompatState vectorDrawableCompatState = this.mVectorState; ColorStateList colorStateList = vectorDrawableCompatState.mTint; if (!(colorStateList == null || (mode = vectorDrawableCompatState.mTintMode) == null)) { this.mTintFilter = updateTintFilter(this.mTintFilter, colorStateList, mode); invalidateSelf(); z2 = true; } if (!vectorDrawableCompatState.isStateful() || !vectorDrawableCompatState.onStateChanged(iArr)) { return z2; } invalidateSelf(); return true; } @Override // android.graphics.drawable.Drawable public void scheduleSelf(Runnable runnable, long j) { Drawable drawable = this.mDelegateDrawable; if (drawable != null) { drawable.scheduleSelf(runnable, j); } else { super.scheduleSelf(runnable, j); } } public void setAllowCaching(boolean z2) { this.mAllowCaching = z2; } @Override // android.graphics.drawable.Drawable public void setAlpha(int i) { Drawable drawable = this.mDelegateDrawable; if (drawable != null) { drawable.setAlpha(i); } else if (this.mVectorState.mVPathRenderer.getRootAlpha() != i) { this.mVectorState.mVPathRenderer.setRootAlpha(i); invalidateSelf(); } } @Override // android.graphics.drawable.Drawable public void setAutoMirrored(boolean z2) { Drawable drawable = this.mDelegateDrawable; if (drawable != null) { DrawableCompat.setAutoMirrored(drawable, z2); } else { this.mVectorState.mAutoMirrored = z2; } } @Override // androidx.vectordrawable.graphics.drawable.VectorDrawableCommon, android.graphics.drawable.Drawable public /* bridge */ /* synthetic */ void setChangingConfigurations(int i) { super.setChangingConfigurations(i); } @Override // androidx.vectordrawable.graphics.drawable.VectorDrawableCommon, android.graphics.drawable.Drawable public /* bridge */ /* synthetic */ void setColorFilter(int i, PorterDuff.Mode mode) { super.setColorFilter(i, mode); } @Override // android.graphics.drawable.Drawable public void setColorFilter(ColorFilter colorFilter) { Drawable drawable = this.mDelegateDrawable; if (drawable != null) { drawable.setColorFilter(colorFilter); return; } this.mColorFilter = colorFilter; invalidateSelf(); } @Override // androidx.vectordrawable.graphics.drawable.VectorDrawableCommon, android.graphics.drawable.Drawable public /* bridge */ /* synthetic */ void setFilterBitmap(boolean z2) { super.setFilterBitmap(z2); } @Override // androidx.vectordrawable.graphics.drawable.VectorDrawableCommon, android.graphics.drawable.Drawable public /* bridge */ /* synthetic */ void setHotspot(float f, float f2) { super.setHotspot(f, f2); } @Override // androidx.vectordrawable.graphics.drawable.VectorDrawableCommon, android.graphics.drawable.Drawable public /* bridge */ /* synthetic */ void setHotspotBounds(int i, int i2, int i3, int i4) { super.setHotspotBounds(i, i2, i3, i4); } @Override // androidx.vectordrawable.graphics.drawable.VectorDrawableCommon, android.graphics.drawable.Drawable public /* bridge */ /* synthetic */ boolean setState(int[] iArr) { return super.setState(iArr); } @Override // android.graphics.drawable.Drawable, androidx.core.graphics.drawable.TintAwareDrawable public void setTint(int i) { Drawable drawable = this.mDelegateDrawable; if (drawable != null) { DrawableCompat.setTint(drawable, i); } else { setTintList(ColorStateList.valueOf(i)); } } @Override // android.graphics.drawable.Drawable, androidx.core.graphics.drawable.TintAwareDrawable public void setTintList(ColorStateList colorStateList) { Drawable drawable = this.mDelegateDrawable; if (drawable != null) { DrawableCompat.setTintList(drawable, colorStateList); return; } VectorDrawableCompatState vectorDrawableCompatState = this.mVectorState; if (vectorDrawableCompatState.mTint != colorStateList) { vectorDrawableCompatState.mTint = colorStateList; this.mTintFilter = updateTintFilter(this.mTintFilter, colorStateList, vectorDrawableCompatState.mTintMode); invalidateSelf(); } } @Override // android.graphics.drawable.Drawable, androidx.core.graphics.drawable.TintAwareDrawable public void setTintMode(PorterDuff.Mode mode) { Drawable drawable = this.mDelegateDrawable; if (drawable != null) { DrawableCompat.setTintMode(drawable, mode); return; } VectorDrawableCompatState vectorDrawableCompatState = this.mVectorState; if (vectorDrawableCompatState.mTintMode != mode) { vectorDrawableCompatState.mTintMode = mode; this.mTintFilter = updateTintFilter(this.mTintFilter, vectorDrawableCompatState.mTint, mode); invalidateSelf(); } } @Override // android.graphics.drawable.Drawable public boolean setVisible(boolean z2, boolean z3) { Drawable drawable = this.mDelegateDrawable; return drawable != null ? drawable.setVisible(z2, z3) : super.setVisible(z2, z3); } @Override // android.graphics.drawable.Drawable public void unscheduleSelf(Runnable runnable) { Drawable drawable = this.mDelegateDrawable; if (drawable != null) { drawable.unscheduleSelf(runnable); } else { super.unscheduleSelf(runnable); } } public PorterDuffColorFilter updateTintFilter(PorterDuffColorFilter porterDuffColorFilter, ColorStateList colorStateList, PorterDuff.Mode mode) { if (colorStateList == null || mode == null) { return null; } return new PorterDuffColorFilter(colorStateList.getColorForState(getState(), 0), mode); } }