174 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			174 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package androidx.appcompat.widget;
 | |
| 
 | |
| 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.appcompat.R;
 | |
| import androidx.appcompat.content.res.AppCompatResources;
 | |
| import androidx.core.view.ViewCompat;
 | |
| import androidx.core.widget.ImageViewCompat;
 | |
| 
 | |
| /* loaded from: classes.dex */
 | |
| public class AppCompatImageHelper {
 | |
|     private TintInfo mImageTint;
 | |
|     private TintInfo mInternalImageTint;
 | |
|     private int mLevel = 0;
 | |
|     private TintInfo mTmpInfo;
 | |
|     private final ImageView mView;
 | |
| 
 | |
|     private boolean shouldApplyFrameworkTintUsingColorFilter() {
 | |
|         int i = Build.VERSION.SDK_INT;
 | |
|         return i > 21 ? this.mInternalImageTint != null : i == 21;
 | |
|     }
 | |
| 
 | |
|     public AppCompatImageHelper(ImageView imageView) {
 | |
|         this.mView = imageView;
 | |
|     }
 | |
| 
 | |
|     public void loadFromAttributes(AttributeSet attributeSet, int i) {
 | |
|         int resourceId;
 | |
|         TintTypedArray obtainStyledAttributes = TintTypedArray.obtainStyledAttributes(this.mView.getContext(), attributeSet, R.styleable.AppCompatImageView, i, 0);
 | |
|         ImageView imageView = this.mView;
 | |
|         ViewCompat.saveAttributeDataForStyleable(imageView, imageView.getContext(), R.styleable.AppCompatImageView, 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);
 | |
|             }
 | |
|             if (obtainStyledAttributes.hasValue(R.styleable.AppCompatImageView_tint)) {
 | |
|                 ImageViewCompat.setImageTintList(this.mView, obtainStyledAttributes.getColorStateList(R.styleable.AppCompatImageView_tint));
 | |
|             }
 | |
|             if (obtainStyledAttributes.hasValue(R.styleable.AppCompatImageView_tintMode)) {
 | |
|                 ImageViewCompat.setImageTintMode(this.mView, DrawableUtils.parseTintMode(obtainStyledAttributes.getInt(R.styleable.AppCompatImageView_tintMode, -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();
 | |
|     }
 | |
| 
 | |
|     boolean hasOverlappingRendering() {
 | |
|         return !(this.mView.getBackground() instanceof RippleDrawable);
 | |
|     }
 | |
| 
 | |
|     void setSupportImageTintList(ColorStateList colorStateList) {
 | |
|         if (this.mImageTint == null) {
 | |
|             this.mImageTint = new TintInfo();
 | |
|         }
 | |
|         this.mImageTint.mTintList = colorStateList;
 | |
|         this.mImageTint.mHasTintList = true;
 | |
|         applySupportImageTint();
 | |
|     }
 | |
| 
 | |
|     ColorStateList getSupportImageTintList() {
 | |
|         TintInfo tintInfo = this.mImageTint;
 | |
|         if (tintInfo != null) {
 | |
|             return tintInfo.mTintList;
 | |
|         }
 | |
|         return null;
 | |
|     }
 | |
| 
 | |
|     void setSupportImageTintMode(PorterDuff.Mode mode) {
 | |
|         if (this.mImageTint == null) {
 | |
|             this.mImageTint = new TintInfo();
 | |
|         }
 | |
|         this.mImageTint.mTintMode = mode;
 | |
|         this.mImageTint.mHasTintMode = true;
 | |
|         applySupportImageTint();
 | |
|     }
 | |
| 
 | |
|     PorterDuff.Mode getSupportImageTintMode() {
 | |
|         TintInfo tintInfo = this.mImageTint;
 | |
|         if (tintInfo != null) {
 | |
|             return tintInfo.mTintMode;
 | |
|         }
 | |
|         return null;
 | |
|     }
 | |
| 
 | |
|     void applySupportImageTint() {
 | |
|         Drawable drawable = this.mView.getDrawable();
 | |
|         if (drawable != null) {
 | |
|             DrawableUtils.fixDrawable(drawable);
 | |
|         }
 | |
|         if (drawable != null) {
 | |
|             if (shouldApplyFrameworkTintUsingColorFilter() && applyFrameworkTintUsingColorFilter(drawable)) {
 | |
|                 return;
 | |
|             }
 | |
|             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());
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     void setInternalImageTint(ColorStateList colorStateList) {
 | |
|         if (colorStateList != null) {
 | |
|             if (this.mInternalImageTint == null) {
 | |
|                 this.mInternalImageTint = new TintInfo();
 | |
|             }
 | |
|             this.mInternalImageTint.mTintList = colorStateList;
 | |
|             this.mInternalImageTint.mHasTintList = true;
 | |
|         } else {
 | |
|             this.mInternalImageTint = null;
 | |
|         }
 | |
|         applySupportImageTint();
 | |
|     }
 | |
| 
 | |
|     private boolean applyFrameworkTintUsingColorFilter(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;
 | |
|     }
 | |
| 
 | |
|     void obtainLevelFromDrawable(Drawable drawable) {
 | |
|         this.mLevel = drawable.getLevel();
 | |
|     }
 | |
| 
 | |
|     void applyImageLevel() {
 | |
|         if (this.mView.getDrawable() != null) {
 | |
|             this.mView.getDrawable().setLevel(this.mLevel);
 | |
|         }
 | |
|     }
 | |
| }
 |