summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/graphics
diff options
context:
space:
mode:
authorSunny Goyal <sunnygoyal@google.com>2017-06-07 10:39:17 -0700
committerSunny Goyal <sunnygoyal@google.com>2017-06-07 10:41:55 -0700
commitd9a2187621b933922dbebe91dbe7d70983d72436 (patch)
tree7bf96a362342c72fcc19ddbd393d0aa3df074e93 /src/com/android/launcher3/graphics
parentf6add46e5eb7e63f6cbf625df2e3c14642ef90b4 (diff)
downloadandroid_packages_apps_Trebuchet-d9a2187621b933922dbebe91dbe7d70983d72436.tar.gz
android_packages_apps_Trebuchet-d9a2187621b933922dbebe91dbe7d70983d72436.tar.bz2
android_packages_apps_Trebuchet-d9a2187621b933922dbebe91dbe7d70983d72436.zip
Adding tint support for shadow drawable.
Bug: 37616877 Change-Id: I2ce8d82143238422bccabfa5191ef95e936a713d
Diffstat (limited to 'src/com/android/launcher3/graphics')
-rw-r--r--src/com/android/launcher3/graphics/ShadowDrawable.java33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/com/android/launcher3/graphics/ShadowDrawable.java b/src/com/android/launcher3/graphics/ShadowDrawable.java
index 5f4fc6cc7..45c1b6afb 100644
--- a/src/com/android/launcher3/graphics/ShadowDrawable.java
+++ b/src/com/android/launcher3/graphics/ShadowDrawable.java
@@ -16,6 +16,8 @@
package com.android.launcher3.graphics;
+import android.annotation.TargetApi;
+import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
@@ -26,7 +28,9 @@ import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.Rect;
+import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
+import android.os.Build;
import android.util.AttributeSet;
import com.android.launcher3.R;
@@ -40,6 +44,7 @@ import java.io.IOException;
/**
* A drawable which adds shadow around a child drawable.
*/
+@TargetApi(Build.VERSION_CODES.O)
public class ShadowDrawable extends Drawable {
private final Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);
@@ -99,6 +104,24 @@ public class ShadowDrawable extends Drawable {
return mState.mIntrinsicWidth;
}
+ @Override
+ public boolean canApplyTheme() {
+ return mState.canApplyTheme();
+ }
+
+ @Override
+ public void applyTheme(Resources.Theme t) {
+ if (mState.canApplyTheme()) {
+ // Workaround since ColorStateList does not expose applyTheme method
+ ColorDrawable cd = new ColorDrawable();
+ cd.setTintList(mState.mTintColor);
+ cd.applyTheme(t);
+
+ mState.mLastDrawnBitmap = null;
+ invalidateSelf();
+ }
+ }
+
private void regenerateBitmapCache() {
Bitmap bitmap = Bitmap.createBitmap(mState.mIntrinsicWidth, mState.mIntrinsicHeight,
Bitmap.Config.ARGB_8888);
@@ -109,6 +132,9 @@ public class ShadowDrawable extends Drawable {
d.setBounds(mState.mShadowSize, mState.mShadowSize,
mState.mIntrinsicWidth - mState.mShadowSize,
mState.mIntrinsicHeight - mState.mShadowSize);
+ if (mState.mTintColor != null) {
+ d.setTint(mState.mTintColor.getDefaultColor());
+ }
d.draw(canvas);
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);
@@ -146,6 +172,7 @@ public class ShadowDrawable extends Drawable {
R.styleable.ShadowDrawable_android_shadowColor, Color.BLACK);
mState.mShadowSize = a.getDimensionPixelSize(
R.styleable.ShadowDrawable_android_elevation, 0);
+ mState.mTintColor = a.getColorStateList(R.styleable.ShadowDrawable_android_tint);
mState.mIntrinsicHeight = d.getIntrinsicHeight() + 2 * mState.mShadowSize;
mState.mIntrinsicWidth = d.getIntrinsicWidth() + 2 * mState.mShadowSize;
@@ -165,6 +192,7 @@ public class ShadowDrawable extends Drawable {
int mShadowColor;
int mShadowSize;
+ ColorStateList mTintColor;
Bitmap mLastDrawnBitmap;
ConstantState mChildState;
@@ -178,5 +206,10 @@ public class ShadowDrawable extends Drawable {
public int getChangingConfigurations() {
return mChangingConfigurations;
}
+
+ @Override
+ public boolean canApplyTheme() {
+ return mTintColor != null;
+ }
}
}