package androidx.core.graphics.drawable; import android.content.res.ColorStateList; import android.content.res.Resources; import android.graphics.Canvas; import android.graphics.ColorFilter; import android.graphics.PorterDuff; import android.graphics.Rect; import android.graphics.Region; import android.graphics.drawable.Drawable; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; public class WrappedDrawableApi14 extends Drawable implements Drawable.Callback, WrappedDrawable, TintAwareDrawable { public static final PorterDuff.Mode DEFAULT_TINT_MODE = PorterDuff.Mode.SRC_IN; private boolean mColorFilterSet; private int mCurrentColor; private PorterDuff.Mode mCurrentMode; public Drawable mDrawable; private boolean mMutated; public WrappedDrawableState mState; public WrappedDrawableApi14(@Nullable Drawable drawable) { this.mState = mutateConstantState(); setWrappedDrawable(drawable); } public WrappedDrawableApi14(@NonNull WrappedDrawableState wrappedDrawableState, @Nullable Resources resources) { this.mState = wrappedDrawableState; updateLocalState(resources); } @NonNull private WrappedDrawableState mutateConstantState() { return new WrappedDrawableState(this.mState); } private void updateLocalState(@Nullable Resources resources) { Drawable.ConstantState constantState; WrappedDrawableState wrappedDrawableState = this.mState; if (wrappedDrawableState != null && (constantState = wrappedDrawableState.mDrawableState) != null) { setWrappedDrawable(constantState.newDrawable(resources)); } } private boolean updateTint(int[] iArr) { if (!isCompatTintEnabled()) { return false; } WrappedDrawableState wrappedDrawableState = this.mState; ColorStateList colorStateList = wrappedDrawableState.mTint; PorterDuff.Mode mode = wrappedDrawableState.mTintMode; if (colorStateList == null || mode == null) { this.mColorFilterSet = false; clearColorFilter(); } else { int colorForState = colorStateList.getColorForState(iArr, colorStateList.getDefaultColor()); if (!(this.mColorFilterSet && colorForState == this.mCurrentColor && mode == this.mCurrentMode)) { setColorFilter(colorForState, mode); this.mCurrentColor = colorForState; this.mCurrentMode = mode; this.mColorFilterSet = true; return true; } } return false; } @Override // android.graphics.drawable.Drawable public void draw(@NonNull Canvas canvas) { this.mDrawable.draw(canvas); } @Override // android.graphics.drawable.Drawable public int getChangingConfigurations() { int changingConfigurations = super.getChangingConfigurations(); WrappedDrawableState wrappedDrawableState = this.mState; return changingConfigurations | (wrappedDrawableState != null ? wrappedDrawableState.getChangingConfigurations() : 0) | this.mDrawable.getChangingConfigurations(); } @Override // android.graphics.drawable.Drawable @Nullable public Drawable.ConstantState getConstantState() { WrappedDrawableState wrappedDrawableState = this.mState; if (wrappedDrawableState == null || !wrappedDrawableState.canConstantState()) { return null; } this.mState.mChangingConfigurations = getChangingConfigurations(); return this.mState; } @Override // android.graphics.drawable.Drawable @NonNull public Drawable getCurrent() { return this.mDrawable.getCurrent(); } @Override // android.graphics.drawable.Drawable public int getIntrinsicHeight() { return this.mDrawable.getIntrinsicHeight(); } @Override // android.graphics.drawable.Drawable public int getIntrinsicWidth() { return this.mDrawable.getIntrinsicWidth(); } @Override // android.graphics.drawable.Drawable @RequiresApi(23) public int getLayoutDirection() { return DrawableCompat.getLayoutDirection(this.mDrawable); } @Override // android.graphics.drawable.Drawable public int getMinimumHeight() { return this.mDrawable.getMinimumHeight(); } @Override // android.graphics.drawable.Drawable public int getMinimumWidth() { return this.mDrawable.getMinimumWidth(); } @Override // android.graphics.drawable.Drawable public int getOpacity() { return this.mDrawable.getOpacity(); } @Override // android.graphics.drawable.Drawable public boolean getPadding(@NonNull Rect rect) { return this.mDrawable.getPadding(rect); } @Override // android.graphics.drawable.Drawable @NonNull public int[] getState() { return this.mDrawable.getState(); } @Override // android.graphics.drawable.Drawable public Region getTransparentRegion() { return this.mDrawable.getTransparentRegion(); } @Override // androidx.core.graphics.drawable.WrappedDrawable public final Drawable getWrappedDrawable() { return this.mDrawable; } @Override // android.graphics.drawable.Drawable.Callback public void invalidateDrawable(@NonNull Drawable drawable) { invalidateSelf(); } @Override // android.graphics.drawable.Drawable @RequiresApi(19) public boolean isAutoMirrored() { return DrawableCompat.isAutoMirrored(this.mDrawable); } public boolean isCompatTintEnabled() { return true; } @Override // android.graphics.drawable.Drawable public boolean isStateful() { WrappedDrawableState wrappedDrawableState; ColorStateList colorStateList = (!isCompatTintEnabled() || (wrappedDrawableState = this.mState) == null) ? null : wrappedDrawableState.mTint; return (colorStateList != null && colorStateList.isStateful()) || this.mDrawable.isStateful(); } @Override // android.graphics.drawable.Drawable public void jumpToCurrentState() { this.mDrawable.jumpToCurrentState(); } @Override // android.graphics.drawable.Drawable @NonNull public Drawable mutate() { if (!this.mMutated && super.mutate() == this) { this.mState = mutateConstantState(); Drawable drawable = this.mDrawable; if (drawable != null) { drawable.mutate(); } WrappedDrawableState wrappedDrawableState = this.mState; if (wrappedDrawableState != null) { Drawable drawable2 = this.mDrawable; wrappedDrawableState.mDrawableState = drawable2 != null ? drawable2.getConstantState() : null; } this.mMutated = true; } return this; } @Override // android.graphics.drawable.Drawable public void onBoundsChange(Rect rect) { Drawable drawable = this.mDrawable; if (drawable != null) { drawable.setBounds(rect); } } @Override // android.graphics.drawable.Drawable @RequiresApi(23) public boolean onLayoutDirectionChanged(int i) { return DrawableCompat.setLayoutDirection(this.mDrawable, i); } @Override // android.graphics.drawable.Drawable public boolean onLevelChange(int i) { return this.mDrawable.setLevel(i); } @Override // android.graphics.drawable.Drawable.Callback public void scheduleDrawable(@NonNull Drawable drawable, @NonNull Runnable runnable, long j) { scheduleSelf(runnable, j); } @Override // android.graphics.drawable.Drawable public void setAlpha(int i) { this.mDrawable.setAlpha(i); } @Override // android.graphics.drawable.Drawable @RequiresApi(19) public void setAutoMirrored(boolean z2) { DrawableCompat.setAutoMirrored(this.mDrawable, z2); } @Override // android.graphics.drawable.Drawable public void setChangingConfigurations(int i) { this.mDrawable.setChangingConfigurations(i); } @Override // android.graphics.drawable.Drawable public void setColorFilter(ColorFilter colorFilter) { this.mDrawable.setColorFilter(colorFilter); } @Override // android.graphics.drawable.Drawable public void setDither(boolean z2) { this.mDrawable.setDither(z2); } @Override // android.graphics.drawable.Drawable public void setFilterBitmap(boolean z2) { this.mDrawable.setFilterBitmap(z2); } @Override // android.graphics.drawable.Drawable public boolean setState(@NonNull int[] iArr) { return updateTint(iArr) || this.mDrawable.setState(iArr); } @Override // android.graphics.drawable.Drawable, androidx.core.graphics.drawable.TintAwareDrawable public void setTint(int i) { setTintList(ColorStateList.valueOf(i)); } @Override // android.graphics.drawable.Drawable, androidx.core.graphics.drawable.TintAwareDrawable public void setTintList(ColorStateList colorStateList) { this.mState.mTint = colorStateList; updateTint(getState()); } @Override // android.graphics.drawable.Drawable, androidx.core.graphics.drawable.TintAwareDrawable public void setTintMode(@NonNull PorterDuff.Mode mode) { this.mState.mTintMode = mode; updateTint(getState()); } @Override // android.graphics.drawable.Drawable public boolean setVisible(boolean z2, boolean z3) { return super.setVisible(z2, z3) || this.mDrawable.setVisible(z2, z3); } @Override // androidx.core.graphics.drawable.WrappedDrawable public final void setWrappedDrawable(Drawable drawable) { Drawable drawable2 = this.mDrawable; if (drawable2 != null) { drawable2.setCallback(null); } this.mDrawable = drawable; if (drawable != null) { drawable.setCallback(this); setVisible(drawable.isVisible(), true); setState(drawable.getState()); setLevel(drawable.getLevel()); setBounds(drawable.getBounds()); WrappedDrawableState wrappedDrawableState = this.mState; if (wrappedDrawableState != null) { wrappedDrawableState.mDrawableState = drawable.getConstantState(); } } invalidateSelf(); } @Override // android.graphics.drawable.Drawable.Callback public void unscheduleDrawable(@NonNull Drawable drawable, @NonNull Runnable runnable) { unscheduleSelf(runnable); } }