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

Commit a2992f44 authored by Alan Viverette's avatar Alan Viverette
Browse files

Fix tint filters in NinePatchDrawable and ShapeDrawable

BUG: 15678325
Change-Id: I57066e7a44498c88a270c76b7880f36825a25bb8
parent b69fc083
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -671,7 +671,7 @@ public class NinePatchDrawable extends Drawable {
            mPadding = new Rect(state.mPadding);
        }

        updateTintFilter(mTintFilter, state.mTint, state.mTintMode);
        mTintFilter = updateTintFilter(mTintFilter, state.mTint, state.mTintMode);
        setNinePatch(state.mNinePatch);
    }
}
+11 −34
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.graphics.ColorFilter;
import android.graphics.Outline;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.PorterDuff;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffColorFilter;
import android.graphics.Rect;
@@ -284,31 +285,13 @@ public class ShapeDrawable extends Drawable {
    }

    @Override
    public void setTint(ColorStateList tint, Mode tintMode) {
        if (mShapeState.mTint != tint || mShapeState.mTintMode != tintMode) {
            mShapeState.mTint = tint;
            mShapeState.mTintMode = tintMode;
            updateTintFilter();
            invalidateSelf();
        }
    }
    public void setTint(ColorStateList tint, PorterDuff.Mode tintMode) {
        final ShapeState state = mShapeState;
        state.mTint = tint;
        state.mTintMode = tintMode;

    /**
     * Ensures the tint filter is consistent with the current tint color and
     * mode.
     */
    private void updateTintFilter() {
        final ColorStateList tint = mShapeState.mTint;
        final Mode tintMode = mShapeState.mTintMode;
        if (tint != null && tintMode != null) {
            if (mTintFilter == null) {
                mTintFilter = new PorterDuffColorFilter(0, tintMode);
            } else {
                mTintFilter.setMode(tintMode);
            }
        } else {
            mTintFilter = null;
        }
        mTintFilter = updateTintFilter(mTintFilter, tint, tintMode);
        invalidateSelf();
    }

    @Override
@@ -349,17 +332,11 @@ public class ShapeDrawable extends Drawable {

    @Override
    protected boolean onStateChange(int[] stateSet) {
        final ColorStateList tint = mShapeState.mTint;
        if (tint != null) {
            final int newColor = tint.getColorForState(stateSet, 0);
            final int oldColor = mTintFilter.getColor();
            if (oldColor != newColor) {
                mTintFilter.setColor(newColor);
                invalidateSelf();
        final ShapeState state = mShapeState;
        if (state.mTint != null && state.mTintMode != null) {
            mTintFilter = updateTintFilter(mTintFilter, state.mTint, state.mTintMode);
            return true;
        }
        }

        return false;
    }