Source code
package android.support.v7.widget;
import android.content.res.ColorStateList;
import android.content.res.TypedArray;
import android.graphics.PorterDuff.Mode;
import android.graphics.drawable.Drawable;
import android.support.v4.view.ViewCompat;
import android.support.v7.appcompat.R;
import android.support.v7.graphics.drawable.DrawableUtils;
import android.support.v7.internal.widget.TintInfo;
import android.support.v7.internal.widget.TintManager;
import android.util.AttributeSet;
import android.view.View;
class AppCompatBackgroundHelper {
private TintInfo mBackgroundTint;
private TintInfo mInternalBackgroundTint;
private final TintManager mTintManager;
private final View mView;
AppCompatBackgroundHelper(View view, TintManager tintManager) {
this.mView = view;
this.mTintManager = tintManager;
}
void loadFromAttributes(AttributeSet attrs, int defStyleAttr) {
TypedArray a = this.mView.getContext().obtainStyledAttributes(attrs, R.styleable.ViewBackgroundHelper, defStyleAttr, 0);
try {
if (a.hasValue(R.styleable.ViewBackgroundHelper_android_background)) {
ColorStateList tint = this.mTintManager.getTintList(a.getResourceId(R.styleable.ViewBackgroundHelper_android_background, -1));
if (tint != null) {
setInternalBackgroundTint(tint);
}
}
if (a.hasValue(R.styleable.ViewBackgroundHelper_backgroundTint)) {
ViewCompat.setBackgroundTintList(this.mView, a.getColorStateList(R.styleable.ViewBackgroundHelper_backgroundTint));
}
if (a.hasValue(R.styleable.ViewBackgroundHelper_backgroundTintMode)) {
ViewCompat.setBackgroundTintMode(this.mView, DrawableUtils.parseTintMode(a.getInt(R.styleable.ViewBackgroundHelper_backgroundTintMode, -1), null));
}
a.recycle();
} catch (Throwable th) {
a.recycle();
}
}
void onSetBackgroundResource(int resId) {
setInternalBackgroundTint(this.mTintManager != null ? this.mTintManager.getTintList(resId) : null);
}
void onSetBackgroundDrawable(Drawable background) {
setInternalBackgroundTint(null);
}
void setSupportBackgroundTintList(ColorStateList tint) {
if (this.mBackgroundTint == null) {
this.mBackgroundTint = new TintInfo();
}
this.mBackgroundTint.mTintList = tint;
this.mBackgroundTint.mHasTintList = true;
applySupportBackgroundTint();
}
ColorStateList getSupportBackgroundTintList() {
return this.mBackgroundTint != null ? this.mBackgroundTint.mTintList : null;
}
void setSupportBackgroundTintMode(Mode tintMode) {
if (this.mBackgroundTint == null) {
this.mBackgroundTint = new TintInfo();
}
this.mBackgroundTint.mTintMode = tintMode;
this.mBackgroundTint.mHasTintMode = true;
applySupportBackgroundTint();
}
Mode getSupportBackgroundTintMode() {
return this.mBackgroundTint != null ? this.mBackgroundTint.mTintMode : null;
}
void applySupportBackgroundTint() {
Drawable background = this.mView.getBackground();
if (background == null) {
return;
}
if (this.mBackgroundTint != null) {
TintManager.tintDrawable(background, this.mBackgroundTint, this.mView.getDrawableState());
} else if (this.mInternalBackgroundTint != null) {
TintManager.tintDrawable(background, this.mInternalBackgroundTint, this.mView.getDrawableState());
}
}
void setInternalBackgroundTint(ColorStateList tint) {
if (tint != null) {
if (this.mInternalBackgroundTint == null) {
this.mInternalBackgroundTint = new TintInfo();
}
this.mInternalBackgroundTint.mTintList = tint;
this.mInternalBackgroundTint.mHasTintList = true;
} else {
this.mInternalBackgroundTint = null;
}
applySupportBackgroundTint();
}
}