diff options
| author | Chris Banes <chrisbanes@google.com> | 2015-11-02 08:59:23 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-11-02 08:59:23 +0000 |
| commit | 54b52d0b7b33490a62e5e9e27c5ba5e33bfbe281 (patch) | |
| tree | 12049f9e672e655935696b989af0584820e164d6 /v4/api21/android | |
| parent | 2a8de1c124ef6ad5725ec028298ecded7fc67127 (diff) | |
| parent | 7797b9f22c8c404309b778a0966266d2b1a84915 (diff) | |
| download | android_frameworks_support-54b52d0b7b33490a62e5e9e27c5ba5e33bfbe281.tar.gz android_frameworks_support-54b52d0b7b33490a62e5e9e27c5ba5e33bfbe281.tar.bz2 android_frameworks_support-54b52d0b7b33490a62e5e9e27c5ba5e33bfbe281.zip | |
Merge "Workaround stateful tinting bug on <= API 23" into mnc-ub-dev
Diffstat (limited to 'v4/api21/android')
| -rw-r--r-- | v4/api21/android/support/v4/graphics/drawable/DrawableCompatLollipop.java | 41 | ||||
| -rw-r--r-- | v4/api21/android/support/v4/graphics/drawable/DrawableWrapperLollipop.java | 52 |
2 files changed, 62 insertions, 31 deletions
diff --git a/v4/api21/android/support/v4/graphics/drawable/DrawableCompatLollipop.java b/v4/api21/android/support/v4/graphics/drawable/DrawableCompatLollipop.java index 93990b47fb..2b1873f4dd 100644 --- a/v4/api21/android/support/v4/graphics/drawable/DrawableCompatLollipop.java +++ b/v4/api21/android/support/v4/graphics/drawable/DrawableCompatLollipop.java @@ -37,46 +37,25 @@ class DrawableCompatLollipop { } public static void setTint(Drawable drawable, int tint) { - if (drawable instanceof DrawableWrapperLollipop) { - // GradientDrawable on Lollipop does not support tinting, so we'll use our compatible - // functionality instead - DrawableCompatBase.setTint(drawable, tint); - } else { - // Else, we'll use the framework API - drawable.setTint(tint); - } + drawable.setTint(tint); } public static void setTintList(Drawable drawable, ColorStateList tint) { - if (drawable instanceof DrawableWrapperLollipop) { - // GradientDrawable on Lollipop does not support tinting, so we'll use our compatible - // functionality instead - DrawableCompatBase.setTintList(drawable, tint); - } else { - // Else, we'll use the framework API - drawable.setTintList(tint); - } + drawable.setTintList(tint); } public static void setTintMode(Drawable drawable, PorterDuff.Mode tintMode) { - if (drawable instanceof DrawableWrapperLollipop) { - // GradientDrawable on Lollipop does not support tinting, so we'll use our compatible - // functionality instead - DrawableCompatBase.setTintMode(drawable, tintMode); - } else { - // Else, we'll use the framework API - drawable.setTintMode(tintMode); - } + drawable.setTintMode(tintMode); } public static Drawable wrapForTinting(Drawable drawable) { - if (drawable instanceof GradientDrawable || drawable instanceof DrawableContainer) { - // GradientDrawable on Lollipop does not support tinting, so we'll use our compatible - // functionality instead. We also do the same for DrawableContainers since they may - // contain GradientDrawable instances. - return new DrawableWrapperLollipop(drawable); - } - return drawable; + return new DrawableWrapperLollipop(drawable, shouldForceCompatTinting(drawable)); } + private static boolean shouldForceCompatTinting(Drawable drawable) { + // GradientDrawable on Lollipop does not support tinting, so we'll use our compatible + // functionality instead. We also do the same for DrawableContainers since they may + // contain GradientDrawable instances. + return drawable instanceof GradientDrawable || drawable instanceof DrawableContainer; + } } diff --git a/v4/api21/android/support/v4/graphics/drawable/DrawableWrapperLollipop.java b/v4/api21/android/support/v4/graphics/drawable/DrawableWrapperLollipop.java index 1f15040056..9533afd80f 100644 --- a/v4/api21/android/support/v4/graphics/drawable/DrawableWrapperLollipop.java +++ b/v4/api21/android/support/v4/graphics/drawable/DrawableWrapperLollipop.java @@ -16,15 +16,24 @@ package android.support.v4.graphics.drawable; +import android.content.res.ColorStateList; import android.content.res.Resources; import android.graphics.Outline; +import android.graphics.PorterDuff; import android.graphics.Rect; import android.graphics.drawable.Drawable; class DrawableWrapperLollipop extends DrawableWrapperKitKat { + private final boolean mUseCompatTinting; + DrawableWrapperLollipop(Drawable drawable) { + this(drawable, false); + } + + DrawableWrapperLollipop(Drawable drawable, boolean useCompatTinting) { super(drawable); + mUseCompatTinting = useCompatTinting; } @Override @@ -56,4 +65,47 @@ class DrawableWrapperLollipop extends DrawableWrapperKitKat { public Rect getDirtyBounds() { return mDrawable.getDirtyBounds(); } + + @Override + public void setTintList(ColorStateList tint) { + if (mUseCompatTinting) { + setCompatTintList(tint); + } else { + mDrawable.setTintList(tint); + } + } + + @Override + public void setTint(int tintColor) { + if (mUseCompatTinting) { + setCompatTint(tintColor); + } else { + mDrawable.setTint(tintColor); + } + } + + @Override + public void setTintMode(PorterDuff.Mode tintMode) { + if (mUseCompatTinting) { + setCompatTintMode(tintMode); + } else { + mDrawable.setTintMode(tintMode); + } + } + + @Override + public boolean setState(int[] stateSet) { + if (super.setState(stateSet)) { + // Manually invalidate because the framework doesn't currently force an invalidation + // on a state change + invalidateSelf(); + return true; + } + return false; + } + + @Override + protected boolean isCompatTintEnabled() { + return mUseCompatTinting; + } } |
