From a426445dfdab43886dd894f2ba8a1d55bfcbb278 Mon Sep 17 00:00:00 2001 From: Alan Viverette Date: Mon, 28 Jul 2014 16:02:55 -0700 Subject: Separate tint and tintMode properties BUG: 16054922 Change-Id: I820fb857b671faf9eb27612e470e820c5c4cd6b5 --- .../graphics/drawable/AnimatedRotateDrawable.java | 9 +++-- .../android/graphics/drawable/BitmapDrawable.java | 14 +++++--- .../android/graphics/drawable/ClipDrawable.java | 9 +++-- .../android/graphics/drawable/ColorDrawable.java | 18 +++++----- .../java/android/graphics/drawable/Drawable.java | 38 ++++++++++++++++++++++ .../graphics/drawable/DrawableContainer.java | 25 +++++++++++--- .../android/graphics/drawable/InsetDrawable.java | 9 +++-- .../android/graphics/drawable/LayerDrawable.java | 13 ++++++-- .../graphics/drawable/NinePatchDrawable.java | 14 +++++--- .../android/graphics/drawable/RotateDrawable.java | 9 +++-- .../android/graphics/drawable/ScaleDrawable.java | 9 +++-- .../android/graphics/drawable/ShapeDrawable.java | 14 +++++--- .../android/graphics/drawable/VectorDrawable.java | 19 ++++++++--- 13 files changed, 155 insertions(+), 45 deletions(-) (limited to 'graphics/java/android') diff --git a/graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java b/graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java index 0fd4423..e3c03a9 100644 --- a/graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java +++ b/graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java @@ -171,8 +171,13 @@ public class AnimatedRotateDrawable extends Drawable implements Drawable.Callbac } @Override - public void setTint(ColorStateList tint, Mode tintMode) { - mState.mDrawable.setTint(tint, tintMode); + public void setTintList(ColorStateList tint) { + mState.mDrawable.setTintList(tint); + } + + @Override + public void setTintMode(Mode tintMode) { + mState.mDrawable.setTintMode(tintMode); } @Override diff --git a/graphics/java/android/graphics/drawable/BitmapDrawable.java b/graphics/java/android/graphics/drawable/BitmapDrawable.java index 525e01d..f5e63ae 100644 --- a/graphics/java/android/graphics/drawable/BitmapDrawable.java +++ b/graphics/java/android/graphics/drawable/BitmapDrawable.java @@ -623,12 +623,16 @@ public class BitmapDrawable extends Drawable { } @Override - public void setTint(ColorStateList tint, PorterDuff.Mode tintMode) { - final BitmapState state = mBitmapState; - state.mTint = tint; - state.mTintMode = tintMode; + public void setTintList(ColorStateList tint) { + mBitmapState.mTint = tint; + mTintFilter = updateTintFilter(mTintFilter, tint, mBitmapState.mTintMode); + invalidateSelf(); + } - mTintFilter = updateTintFilter(mTintFilter, tint, tintMode); + @Override + public void setTintMode(PorterDuff.Mode tintMode) { + mBitmapState.mTintMode = tintMode; + mTintFilter = updateTintFilter(mTintFilter, mBitmapState.mTint, tintMode); invalidateSelf(); } diff --git a/graphics/java/android/graphics/drawable/ClipDrawable.java b/graphics/java/android/graphics/drawable/ClipDrawable.java index 174de3a..f116376 100644 --- a/graphics/java/android/graphics/drawable/ClipDrawable.java +++ b/graphics/java/android/graphics/drawable/ClipDrawable.java @@ -174,8 +174,13 @@ public class ClipDrawable extends Drawable implements Drawable.Callback { } @Override - public void setTint(ColorStateList tint, Mode tintMode) { - mClipState.mDrawable.setTint(tint, tintMode); + public void setTintList(ColorStateList tint) { + mClipState.mDrawable.setTintList(tint); + } + + @Override + public void setTintMode(Mode tintMode) { + mClipState.mDrawable.setTintMode(tintMode); } @Override diff --git a/graphics/java/android/graphics/drawable/ColorDrawable.java b/graphics/java/android/graphics/drawable/ColorDrawable.java index 4f050e0..9e42a89 100644 --- a/graphics/java/android/graphics/drawable/ColorDrawable.java +++ b/graphics/java/android/graphics/drawable/ColorDrawable.java @@ -167,15 +167,17 @@ public class ColorDrawable extends Drawable { } @Override - public void setTint(ColorStateList tint, Mode tintMode) { - final ColorState state = mColorState; - if (state.mTint != tint || state.mTintMode != tintMode) { - state.mTint = tint; - state.mTintMode = tintMode; + public void setTintList(ColorStateList tint) { + mColorState.mTint = tint; + mTintFilter = updateTintFilter(mTintFilter, tint, mColorState.mTintMode); + invalidateSelf(); + } - mTintFilter = updateTintFilter(mTintFilter, tint, tintMode); - invalidateSelf(); - } + @Override + public void setTintMode(Mode tintMode) { + mColorState.mTintMode = tintMode; + mTintFilter = updateTintFilter(mTintFilter, mColorState.mTint, tintMode); + invalidateSelf(); } @Override diff --git a/graphics/java/android/graphics/drawable/Drawable.java b/graphics/java/android/graphics/drawable/Drawable.java index df9f3c3..5a3e3a3 100644 --- a/graphics/java/android/graphics/drawable/Drawable.java +++ b/graphics/java/android/graphics/drawable/Drawable.java @@ -478,10 +478,48 @@ public abstract class Drawable { * @param tint Color state list to use for tinting this drawable, or null to * clear the tint * @param tintMode A Porter-Duff blending mode + * @hide TODO: Was in L-preview, remove this API for release */ public void setTint(ColorStateList tint, PorterDuff.Mode tintMode) {} /** + * Specifies a tint for this drawable. + *

+ * Setting a color filter via {@link #setColorFilter(ColorFilter)} overrides + * tint. + * + * @param tint Color to use for tinting this drawable + * @see #setTintMode(PorterDuff.Mode) + */ + public void setTint(int tint) { + setTintList(ColorStateList.valueOf(tint)); + } + + /** + * Specifies a tint for this drawable as a color state list. + *

+ * Setting a color filter via {@link #setColorFilter(ColorFilter)} overrides + * tint. + * + * @param tint Color state list to use for tinting this drawable, or null to + * clear the tint + * @see #setTintMode(PorterDuff.Mode) + */ + public void setTintList(ColorStateList tint) {} + + /** + * Specifies a tint blending mode for this drawable. + *

+ * Setting a color filter via {@link #setColorFilter(ColorFilter)} overrides + * tint. + * + * @param tintMode Color state list to use for tinting this drawable, or null to + * clear the tint + * @param tintMode A Porter-Duff blending mode + */ + public void setTintMode(PorterDuff.Mode tintMode) {} + + /** * Returns the current color filter, or {@code null} if none set. * * @return the current color filter, or {@code null} if none set diff --git a/graphics/java/android/graphics/drawable/DrawableContainer.java b/graphics/java/android/graphics/drawable/DrawableContainer.java index 55bc35e..0b052f4 100644 --- a/graphics/java/android/graphics/drawable/DrawableContainer.java +++ b/graphics/java/android/graphics/drawable/DrawableContainer.java @@ -176,15 +176,29 @@ public class DrawableContainer extends Drawable implements Drawable.Callback { } @Override - public void setTint(ColorStateList tint, Mode tintMode) { - mDrawableContainerState.mHasTint = (tint != null && tintMode != null); + public void setTintList(ColorStateList tint) { + mDrawableContainerState.mHasTint = tint != null + && mDrawableContainerState.mTintMode != null; - if (mDrawableContainerState.mTint != tint || mDrawableContainerState.mTintMode != tintMode) { + if (mDrawableContainerState.mTint != tint) { mDrawableContainerState.mTint = tint; + + if (mCurrDrawable != null) { + mCurrDrawable.mutate().setTintList(tint); + } + } + } + + @Override + public void setTintMode(Mode tintMode) { + mDrawableContainerState.mHasTint = mDrawableContainerState.mTint != null + && tintMode != null; + + if (mDrawableContainerState.mTintMode != tintMode) { mDrawableContainerState.mTintMode = tintMode; if (mCurrDrawable != null) { - mCurrDrawable.mutate().setTint(tint, tintMode); + mCurrDrawable.mutate().setTintMode(tintMode); } } } @@ -437,7 +451,8 @@ public class DrawableContainer extends Drawable implements Drawable.Callback { if (mDrawableContainerState.mHasColorFilter) { d.setColorFilter(mDrawableContainerState.mColorFilter); } else if (mDrawableContainerState.mHasTint) { - d.setTint(mDrawableContainerState.mTint, mDrawableContainerState.mTintMode); + d.setTintList(mDrawableContainerState.mTint); + d.setTintMode(mDrawableContainerState.mTintMode); } d.setVisible(isVisible(), true); d.setDither(mDrawableContainerState.mDither); diff --git a/graphics/java/android/graphics/drawable/InsetDrawable.java b/graphics/java/android/graphics/drawable/InsetDrawable.java index f6ccbf5..ee5fe2e 100644 --- a/graphics/java/android/graphics/drawable/InsetDrawable.java +++ b/graphics/java/android/graphics/drawable/InsetDrawable.java @@ -260,8 +260,13 @@ public class InsetDrawable extends Drawable implements Drawable.Callback { } @Override - public void setTint(ColorStateList tint, Mode tintMode) { - mInsetState.mDrawable.setTint(tint, tintMode); + public void setTintList(ColorStateList tint) { + mInsetState.mDrawable.setTintList(tint); + } + + @Override + public void setTintMode(Mode tintMode) { + mInsetState.mDrawable.setTintMode(tintMode); } /** {@hide} */ diff --git a/graphics/java/android/graphics/drawable/LayerDrawable.java b/graphics/java/android/graphics/drawable/LayerDrawable.java index d094ce4..43bc89a 100644 --- a/graphics/java/android/graphics/drawable/LayerDrawable.java +++ b/graphics/java/android/graphics/drawable/LayerDrawable.java @@ -698,11 +698,20 @@ public class LayerDrawable extends Drawable implements Drawable.Callback { } @Override - public void setTint(ColorStateList tint, Mode tintMode) { + public void setTintList(ColorStateList tint) { final ChildDrawable[] array = mLayerState.mChildren; final int N = mLayerState.mNum; for (int i = 0; i < N; i++) { - array[i].mDrawable.setTint(tint, tintMode); + array[i].mDrawable.setTintList(tint); + } + } + + @Override + public void setTintMode(Mode tintMode) { + final ChildDrawable[] array = mLayerState.mChildren; + final int N = mLayerState.mNum; + for (int i = 0; i < N; i++) { + array[i].mDrawable.setTintMode(tintMode); } } diff --git a/graphics/java/android/graphics/drawable/NinePatchDrawable.java b/graphics/java/android/graphics/drawable/NinePatchDrawable.java index 758d42a..6ebb8b5 100644 --- a/graphics/java/android/graphics/drawable/NinePatchDrawable.java +++ b/graphics/java/android/graphics/drawable/NinePatchDrawable.java @@ -346,12 +346,16 @@ public class NinePatchDrawable extends Drawable { } @Override - public void setTint(ColorStateList tint, PorterDuff.Mode tintMode) { - final NinePatchState state = mNinePatchState; - state.mTint = tint; - state.mTintMode = tintMode; + public void setTintList(ColorStateList tint) { + mNinePatchState.mTint = tint; + mTintFilter = updateTintFilter(mTintFilter, tint, mNinePatchState.mTintMode); + invalidateSelf(); + } - mTintFilter = updateTintFilter(mTintFilter, tint, tintMode); + @Override + public void setTintMode(PorterDuff.Mode tintMode) { + mNinePatchState.mTintMode = tintMode; + mTintFilter = updateTintFilter(mTintFilter, mNinePatchState.mTint, tintMode); invalidateSelf(); } diff --git a/graphics/java/android/graphics/drawable/RotateDrawable.java b/graphics/java/android/graphics/drawable/RotateDrawable.java index 8f8fa98..983eb3b 100644 --- a/graphics/java/android/graphics/drawable/RotateDrawable.java +++ b/graphics/java/android/graphics/drawable/RotateDrawable.java @@ -139,8 +139,13 @@ public class RotateDrawable extends Drawable implements Drawable.Callback { } @Override - public void setTint(ColorStateList tint, Mode tintMode) { - mState.mDrawable.setTint(tint, tintMode); + public void setTintList(ColorStateList tint) { + mState.mDrawable.setTintList(tint); + } + + @Override + public void setTintMode(Mode tintMode) { + mState.mDrawable.setTintMode(tintMode); } @Override diff --git a/graphics/java/android/graphics/drawable/ScaleDrawable.java b/graphics/java/android/graphics/drawable/ScaleDrawable.java index 46c92fe..a954474 100644 --- a/graphics/java/android/graphics/drawable/ScaleDrawable.java +++ b/graphics/java/android/graphics/drawable/ScaleDrawable.java @@ -190,8 +190,13 @@ public class ScaleDrawable extends Drawable implements Drawable.Callback { } @Override - public void setTint(ColorStateList tint, Mode tintMode) { - mScaleState.mDrawable.setTint(tint, tintMode); + public void setTintList(ColorStateList tint) { + mScaleState.mDrawable.setTintList(tint); + } + + @Override + public void setTintMode(Mode tintMode) { + mScaleState.mDrawable.setTintMode(tintMode); } @Override diff --git a/graphics/java/android/graphics/drawable/ShapeDrawable.java b/graphics/java/android/graphics/drawable/ShapeDrawable.java index 394f584..6f18635 100644 --- a/graphics/java/android/graphics/drawable/ShapeDrawable.java +++ b/graphics/java/android/graphics/drawable/ShapeDrawable.java @@ -285,12 +285,16 @@ public class ShapeDrawable extends Drawable { } @Override - public void setTint(ColorStateList tint, PorterDuff.Mode tintMode) { - final ShapeState state = mShapeState; - state.mTint = tint; - state.mTintMode = tintMode; + public void setTintList(ColorStateList tint) { + mShapeState.mTint = tint; + mTintFilter = updateTintFilter(mTintFilter, tint, mShapeState.mTintMode); + invalidateSelf(); + } - mTintFilter = updateTintFilter(mTintFilter, tint, tintMode); + @Override + public void setTintMode(PorterDuff.Mode tintMode) { + mShapeState.mTintMode = tintMode; + mTintFilter = updateTintFilter(mTintFilter, mShapeState.mTint, tintMode); invalidateSelf(); } diff --git a/graphics/java/android/graphics/drawable/VectorDrawable.java b/graphics/java/android/graphics/drawable/VectorDrawable.java index 03d2326..813797f 100644 --- a/graphics/java/android/graphics/drawable/VectorDrawable.java +++ b/graphics/java/android/graphics/drawable/VectorDrawable.java @@ -307,14 +307,23 @@ public class VectorDrawable extends Drawable { } @Override - public void setTint(ColorStateList tint, Mode tintMode) { + public void setTintList(ColorStateList tint) { final VectorDrawableState state = mVectorState; - if (state.mTint != tint || state.mTintMode != tintMode) { + if (state.mTint != tint) { state.mTint = tint; - state.mTintMode = tintMode; + mTintFilter = updateTintFilter(mTintFilter, tint, state.mTintMode); + state.mVPathRenderer.setColorFilter(mTintFilter); + invalidateSelf(); + } + } - mTintFilter = updateTintFilter(mTintFilter, tint, tintMode); - mVectorState.mVPathRenderer.setColorFilter(mTintFilter); + @Override + public void setTintMode(Mode tintMode) { + final VectorDrawableState state = mVectorState; + if (state.mTintMode != tintMode) { + state.mTintMode = tintMode; + mTintFilter = updateTintFilter(mTintFilter, state.mTint, tintMode); + state.mVPathRenderer.setColorFilter(mTintFilter); invalidateSelf(); } } -- cgit v1.1