package androidx.appcompat.widget; import android.content.Context; import android.content.res.ColorStateList; import android.graphics.PorterDuff; import android.graphics.drawable.Drawable; import android.graphics.drawable.RippleDrawable; import android.os.Build; import android.util.AttributeSet; import android.widget.ImageView; import androidx.annotation.NonNull; import androidx.annotation.RestrictTo; import androidx.appcompat.R; import androidx.appcompat.content.res.AppCompatResources; import androidx.core.view.ViewCompat; import androidx.core.widget.ImageViewCompat; @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX}) public class AppCompatImageHelper { private TintInfo mImageTint; private TintInfo mInternalImageTint; private TintInfo mTmpInfo; @NonNull private final ImageView mView; public AppCompatImageHelper(@NonNull ImageView imageView) { this.mView = imageView; } private boolean applyFrameworkTintUsingColorFilter(@NonNull Drawable drawable) { if (this.mTmpInfo == null) { this.mTmpInfo = new TintInfo(); } TintInfo tintInfo = this.mTmpInfo; tintInfo.clear(); ColorStateList imageTintList = ImageViewCompat.getImageTintList(this.mView); if (imageTintList != null) { tintInfo.mHasTintList = true; tintInfo.mTintList = imageTintList; } PorterDuff.Mode imageTintMode = ImageViewCompat.getImageTintMode(this.mView); if (imageTintMode != null) { tintInfo.mHasTintMode = true; tintInfo.mTintMode = imageTintMode; } if (!tintInfo.mHasTintList && !tintInfo.mHasTintMode) { return false; } AppCompatDrawableManager.tintDrawable(drawable, tintInfo, this.mView.getDrawableState()); return true; } private boolean shouldApplyFrameworkTintUsingColorFilter() { int i = Build.VERSION.SDK_INT; return i > 21 ? this.mInternalImageTint != null : i == 21; } public void applySupportImageTint() { Drawable drawable = this.mView.getDrawable(); if (drawable != null) { DrawableUtils.fixDrawable(drawable); } if (drawable == null) { return; } if (!shouldApplyFrameworkTintUsingColorFilter() || !applyFrameworkTintUsingColorFilter(drawable)) { TintInfo tintInfo = this.mImageTint; if (tintInfo != null) { AppCompatDrawableManager.tintDrawable(drawable, tintInfo, this.mView.getDrawableState()); return; } TintInfo tintInfo2 = this.mInternalImageTint; if (tintInfo2 != null) { AppCompatDrawableManager.tintDrawable(drawable, tintInfo2, this.mView.getDrawableState()); } } } public ColorStateList getSupportImageTintList() { TintInfo tintInfo = this.mImageTint; if (tintInfo != null) { return tintInfo.mTintList; } return null; } public PorterDuff.Mode getSupportImageTintMode() { TintInfo tintInfo = this.mImageTint; if (tintInfo != null) { return tintInfo.mTintMode; } return null; } public boolean hasOverlappingRendering() { return !(this.mView.getBackground() instanceof RippleDrawable); } public void loadFromAttributes(AttributeSet attributeSet, int i) { int resourceId; Context context = this.mView.getContext(); int[] iArr = R.styleable.AppCompatImageView; TintTypedArray obtainStyledAttributes = TintTypedArray.obtainStyledAttributes(context, attributeSet, iArr, i, 0); ImageView imageView = this.mView; ViewCompat.saveAttributeDataForStyleable(imageView, imageView.getContext(), iArr, attributeSet, obtainStyledAttributes.getWrappedTypeArray(), i, 0); try { Drawable drawable = this.mView.getDrawable(); if (!(drawable != null || (resourceId = obtainStyledAttributes.getResourceId(R.styleable.AppCompatImageView_srcCompat, -1)) == -1 || (drawable = AppCompatResources.getDrawable(this.mView.getContext(), resourceId)) == null)) { this.mView.setImageDrawable(drawable); } if (drawable != null) { DrawableUtils.fixDrawable(drawable); } int i2 = R.styleable.AppCompatImageView_tint; if (obtainStyledAttributes.hasValue(i2)) { ImageViewCompat.setImageTintList(this.mView, obtainStyledAttributes.getColorStateList(i2)); } int i3 = R.styleable.AppCompatImageView_tintMode; if (obtainStyledAttributes.hasValue(i3)) { ImageViewCompat.setImageTintMode(this.mView, DrawableUtils.parseTintMode(obtainStyledAttributes.getInt(i3, -1), null)); } } finally { obtainStyledAttributes.recycle(); } } public void setImageResource(int i) { if (i != 0) { Drawable drawable = AppCompatResources.getDrawable(this.mView.getContext(), i); if (drawable != null) { DrawableUtils.fixDrawable(drawable); } this.mView.setImageDrawable(drawable); } else { this.mView.setImageDrawable(null); } applySupportImageTint(); } public void setInternalImageTint(ColorStateList colorStateList) { if (colorStateList != null) { if (this.mInternalImageTint == null) { this.mInternalImageTint = new TintInfo(); } TintInfo tintInfo = this.mInternalImageTint; tintInfo.mTintList = colorStateList; tintInfo.mHasTintList = true; } else { this.mInternalImageTint = null; } applySupportImageTint(); } public void setSupportImageTintList(ColorStateList colorStateList) { if (this.mImageTint == null) { this.mImageTint = new TintInfo(); } TintInfo tintInfo = this.mImageTint; tintInfo.mTintList = colorStateList; tintInfo.mHasTintList = true; applySupportImageTint(); } public void setSupportImageTintMode(PorterDuff.Mode mode) { if (this.mImageTint == null) { this.mImageTint = new TintInfo(); } TintInfo tintInfo = this.mImageTint; tintInfo.mTintMode = mode; tintInfo.mHasTintMode = true; applySupportImageTint(); } }