From a2992f44bc3787f37c3cad98f79dcfe67fb1aa81 Mon Sep 17 00:00:00 2001 From: Alan Viverette Date: Mon, 16 Jun 2014 18:34:04 -0700 Subject: [PATCH] Fix tint filters in NinePatchDrawable and ShapeDrawable BUG: 15678325 Change-Id: I57066e7a44498c88a270c76b7880f36825a25bb8 --- .../graphics/drawable/NinePatchDrawable.java | 2 +- .../graphics/drawable/ShapeDrawable.java | 45 +++++-------------- 2 files changed, 12 insertions(+), 35 deletions(-) diff --git a/graphics/java/android/graphics/drawable/NinePatchDrawable.java b/graphics/java/android/graphics/drawable/NinePatchDrawable.java index 36ffdddf5bdc1..28335eabe082d 100644 --- a/graphics/java/android/graphics/drawable/NinePatchDrawable.java +++ b/graphics/java/android/graphics/drawable/NinePatchDrawable.java @@ -671,7 +671,7 @@ public class NinePatchDrawable extends Drawable { mPadding = new Rect(state.mPadding); } - updateTintFilter(mTintFilter, state.mTint, state.mTintMode); + mTintFilter = updateTintFilter(mTintFilter, state.mTint, state.mTintMode); setNinePatch(state.mNinePatch); } } diff --git a/graphics/java/android/graphics/drawable/ShapeDrawable.java b/graphics/java/android/graphics/drawable/ShapeDrawable.java index 981efb8262a2c..beb300d5789d3 100644 --- a/graphics/java/android/graphics/drawable/ShapeDrawable.java +++ b/graphics/java/android/graphics/drawable/ShapeDrawable.java @@ -24,6 +24,7 @@ import android.graphics.ColorFilter; import android.graphics.Outline; import android.graphics.Paint; import android.graphics.PixelFormat; +import android.graphics.PorterDuff; import android.graphics.PorterDuff.Mode; import android.graphics.PorterDuffColorFilter; import android.graphics.Rect; @@ -284,31 +285,13 @@ public class ShapeDrawable extends Drawable { } @Override - public void setTint(ColorStateList tint, Mode tintMode) { - if (mShapeState.mTint != tint || mShapeState.mTintMode != tintMode) { - mShapeState.mTint = tint; - mShapeState.mTintMode = tintMode; - updateTintFilter(); - invalidateSelf(); - } - } + public void setTint(ColorStateList tint, PorterDuff.Mode tintMode) { + final ShapeState state = mShapeState; + state.mTint = tint; + state.mTintMode = tintMode; - /** - * Ensures the tint filter is consistent with the current tint color and - * mode. - */ - private void updateTintFilter() { - final ColorStateList tint = mShapeState.mTint; - final Mode tintMode = mShapeState.mTintMode; - if (tint != null && tintMode != null) { - if (mTintFilter == null) { - mTintFilter = new PorterDuffColorFilter(0, tintMode); - } else { - mTintFilter.setMode(tintMode); - } - } else { - mTintFilter = null; - } + mTintFilter = updateTintFilter(mTintFilter, tint, tintMode); + invalidateSelf(); } @Override @@ -349,17 +332,11 @@ public class ShapeDrawable extends Drawable { @Override protected boolean onStateChange(int[] stateSet) { - final ColorStateList tint = mShapeState.mTint; - if (tint != null) { - final int newColor = tint.getColorForState(stateSet, 0); - final int oldColor = mTintFilter.getColor(); - if (oldColor != newColor) { - mTintFilter.setColor(newColor); - invalidateSelf(); - return true; - } + final ShapeState state = mShapeState; + if (state.mTint != null && state.mTintMode != null) { + mTintFilter = updateTintFilter(mTintFilter, state.mTint, state.mTintMode); + return true; } - return false; }