Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d9a21876 authored by Sunny Goyal's avatar Sunny Goyal
Browse files

Adding tint support for shadow drawable.

Bug: 37616877
Change-Id: I2ce8d82143238422bccabfa5191ef95e936a713d
parent f6add46e
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -122,5 +122,6 @@
        <attr name="android:src" />
        <attr name="android:src" />
        <attr name="android:shadowColor" />
        <attr name="android:shadowColor" />
        <attr name="android:elevation" />
        <attr name="android:elevation" />
        <attr name="android:tint" />
    </declare-styleable>
    </declare-styleable>
</resources>
</resources>
+33 −0
Original line number Original line Diff line number Diff line
@@ -16,6 +16,8 @@


package com.android.launcher3.graphics;
package com.android.launcher3.graphics;


import android.annotation.TargetApi;
import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Bitmap;
@@ -26,7 +28,9 @@ import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.Rect;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.util.AttributeSet;
import android.util.AttributeSet;


import com.android.launcher3.R;
import com.android.launcher3.R;
@@ -40,6 +44,7 @@ import java.io.IOException;
/**
/**
 * A drawable which adds shadow around a child drawable.
 * A drawable which adds shadow around a child drawable.
 */
 */
@TargetApi(Build.VERSION_CODES.O)
public class ShadowDrawable extends Drawable {
public class ShadowDrawable extends Drawable {


    private final Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);
    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;
        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() {
    private void regenerateBitmapCache() {
        Bitmap bitmap = Bitmap.createBitmap(mState.mIntrinsicWidth, mState.mIntrinsicHeight,
        Bitmap bitmap = Bitmap.createBitmap(mState.mIntrinsicWidth, mState.mIntrinsicHeight,
                Bitmap.Config.ARGB_8888);
                Bitmap.Config.ARGB_8888);
@@ -109,6 +132,9 @@ public class ShadowDrawable extends Drawable {
        d.setBounds(mState.mShadowSize, mState.mShadowSize,
        d.setBounds(mState.mShadowSize, mState.mShadowSize,
                mState.mIntrinsicWidth - mState.mShadowSize,
                mState.mIntrinsicWidth - mState.mShadowSize,
                mState.mIntrinsicHeight - mState.mShadowSize);
                mState.mIntrinsicHeight - mState.mShadowSize);
        if (mState.mTintColor != null) {
            d.setTint(mState.mTintColor.getDefaultColor());
        }
        d.draw(canvas);
        d.draw(canvas);


        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);
        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);
                    R.styleable.ShadowDrawable_android_shadowColor, Color.BLACK);
            mState.mShadowSize = a.getDimensionPixelSize(
            mState.mShadowSize = a.getDimensionPixelSize(
                    R.styleable.ShadowDrawable_android_elevation, 0);
                    R.styleable.ShadowDrawable_android_elevation, 0);
            mState.mTintColor = a.getColorStateList(R.styleable.ShadowDrawable_android_tint);


            mState.mIntrinsicHeight = d.getIntrinsicHeight() + 2 * mState.mShadowSize;
            mState.mIntrinsicHeight = d.getIntrinsicHeight() + 2 * mState.mShadowSize;
            mState.mIntrinsicWidth = d.getIntrinsicWidth() + 2 * mState.mShadowSize;
            mState.mIntrinsicWidth = d.getIntrinsicWidth() + 2 * mState.mShadowSize;
@@ -165,6 +192,7 @@ public class ShadowDrawable extends Drawable {


        int mShadowColor;
        int mShadowColor;
        int mShadowSize;
        int mShadowSize;
        ColorStateList mTintColor;


        Bitmap mLastDrawnBitmap;
        Bitmap mLastDrawnBitmap;
        ConstantState mChildState;
        ConstantState mChildState;
@@ -178,5 +206,10 @@ public class ShadowDrawable extends Drawable {
        public int getChangingConfigurations() {
        public int getChangingConfigurations() {
            return mChangingConfigurations;
            return mChangingConfigurations;
        }
        }

        @Override
        public boolean canApplyTheme() {
            return mTintColor != null;
        }
    }
    }
}
}