package androidx.appcompat.widget; import android.content.Context; import android.content.res.ColorStateList; import android.content.res.TypedArray; import android.graphics.Color; import android.util.AttributeSet; import android.util.Log; import android.util.TypedValue; import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RestrictTo; import androidx.appcompat.R; import androidx.core.graphics.ColorUtils; @RestrictTo({RestrictTo.Scope.LIBRARY}) public class ThemeUtils { public static final int[] ACTIVATED_STATE_SET = {16843518}; public static final int[] CHECKED_STATE_SET = {16842912}; public static final int[] DISABLED_STATE_SET = {-16842910}; public static final int[] EMPTY_STATE_SET = new int[0]; public static final int[] FOCUSED_STATE_SET = {16842908}; public static final int[] NOT_PRESSED_OR_FOCUSED_STATE_SET = {-16842919, -16842908}; public static final int[] PRESSED_STATE_SET = {16842919}; public static final int[] SELECTED_STATE_SET = {16842913}; private static final String TAG = "ThemeUtils"; private static final int[] TEMP_ARRAY = new int[1]; private static final ThreadLocal TL_TYPED_VALUE = new ThreadLocal<>(); private ThemeUtils() { } public static void checkAppCompatTheme(@NonNull View view, @NonNull Context context) { TypedArray obtainStyledAttributes = context.obtainStyledAttributes(R.styleable.AppCompatTheme); try { if (!obtainStyledAttributes.hasValue(R.styleable.AppCompatTheme_windowActionBar)) { Log.e(TAG, "View " + view.getClass() + " is an AppCompat widget that can only be used with a Theme.AppCompat theme (or descendant)."); } } finally { obtainStyledAttributes.recycle(); } } @NonNull public static ColorStateList createDisabledStateList(int i, int i2) { return new ColorStateList(new int[][]{DISABLED_STATE_SET, EMPTY_STATE_SET}, new int[]{i2, i}); } public static int getDisabledThemeAttrColor(@NonNull Context context, int i) { ColorStateList themeAttrColorStateList = getThemeAttrColorStateList(context, i); if (themeAttrColorStateList != null && themeAttrColorStateList.isStateful()) { return themeAttrColorStateList.getColorForState(DISABLED_STATE_SET, themeAttrColorStateList.getDefaultColor()); } TypedValue typedValue = getTypedValue(); context.getTheme().resolveAttribute(16842803, typedValue, true); return getThemeAttrColor(context, i, typedValue.getFloat()); } public static int getThemeAttrColor(@NonNull Context context, int i) { int[] iArr = TEMP_ARRAY; iArr[0] = i; TintTypedArray obtainStyledAttributes = TintTypedArray.obtainStyledAttributes(context, (AttributeSet) null, iArr); try { return obtainStyledAttributes.getColor(0, 0); } finally { obtainStyledAttributes.recycle(); } } public static int getThemeAttrColor(@NonNull Context context, int i, float f) { int themeAttrColor = getThemeAttrColor(context, i); return ColorUtils.setAlphaComponent(themeAttrColor, Math.round(((float) Color.alpha(themeAttrColor)) * f)); } @Nullable public static ColorStateList getThemeAttrColorStateList(@NonNull Context context, int i) { int[] iArr = TEMP_ARRAY; iArr[0] = i; TintTypedArray obtainStyledAttributes = TintTypedArray.obtainStyledAttributes(context, (AttributeSet) null, iArr); try { return obtainStyledAttributes.getColorStateList(0); } finally { obtainStyledAttributes.recycle(); } } private static TypedValue getTypedValue() { ThreadLocal threadLocal = TL_TYPED_VALUE; TypedValue typedValue = threadLocal.get(); if (typedValue != null) { return typedValue; } TypedValue typedValue2 = new TypedValue(); threadLocal.set(typedValue2); return typedValue2; } }