summaryrefslogtreecommitdiffstats
path: root/v4/api21/android
diff options
context:
space:
mode:
authorChris Banes <chrisbanes@google.com>2015-11-02 08:59:23 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2015-11-02 08:59:23 +0000
commit54b52d0b7b33490a62e5e9e27c5ba5e33bfbe281 (patch)
tree12049f9e672e655935696b989af0584820e164d6 /v4/api21/android
parent2a8de1c124ef6ad5725ec028298ecded7fc67127 (diff)
parent7797b9f22c8c404309b778a0966266d2b1a84915 (diff)
downloadandroid_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.java41
-rw-r--r--v4/api21/android/support/v4/graphics/drawable/DrawableWrapperLollipop.java52
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;
+ }
}