Source code
package android.support.v7.internal.widget;
import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.support.v4.graphics.ColorUtils;
import android.util.TypedValue;
public class ThemeUtils {
static final int[] ACTIVATED_STATE_SET = new int[]{16843518};
static final int[] CHECKED_STATE_SET = new int[]{16842912};
static final int[] DISABLED_STATE_SET = new int[]{-16842910};
static final int[] EMPTY_STATE_SET = new int[0];
static final int[] FOCUSED_STATE_SET = new int[]{16842908};
static final int[] NOT_PRESSED_OR_FOCUSED_STATE_SET = new int[]{-16842919, -16842908};
static final int[] PRESSED_STATE_SET = new int[]{16842919};
static final int[] SELECTED_STATE_SET = new int[]{16842913};
private static final int[] TEMP_ARRAY = new int[1];
private static final ThreadLocal<TypedValue> TL_TYPED_VALUE = new ThreadLocal();
public static ColorStateList createDisabledStateList(int textColor, int disabledTextColor) {
states = new int[2][];
int[] colors = new int[]{DISABLED_STATE_SET, disabledTextColor};
int i = 0 + 1;
states[i] = EMPTY_STATE_SET;
colors[i] = textColor;
i++;
return new ColorStateList(states, colors);
}
public static int getThemeAttrColor(Context context, int attr) {
TEMP_ARRAY[0] = attr;
TypedArray a = context.obtainStyledAttributes(null, TEMP_ARRAY);
try {
int color = a.getColor(0, 0);
return color;
} finally {
a.recycle();
}
}
public static ColorStateList getThemeAttrColorStateList(Context context, int attr) {
TEMP_ARRAY[0] = attr;
TypedArray a = context.obtainStyledAttributes(null, TEMP_ARRAY);
try {
ColorStateList colorStateList = a.getColorStateList(0);
return colorStateList;
} finally {
a.recycle();
}
}
public static int getDisabledThemeAttrColor(Context context, int attr) {
ColorStateList csl = getThemeAttrColorStateList(context, attr);
if (csl != null && csl.isStateful()) {
return csl.getColorForState(DISABLED_STATE_SET, csl.getDefaultColor());
}
TypedValue tv = getTypedValue();
context.getTheme().resolveAttribute(16842803, tv, true);
return getThemeAttrColor(context, attr, tv.getFloat());
}
private static TypedValue getTypedValue() {
TypedValue typedValue = (TypedValue) TL_TYPED_VALUE.get();
if (typedValue != null) {
return typedValue;
}
typedValue = new TypedValue();
TL_TYPED_VALUE.set(typedValue);
return typedValue;
}
static int getThemeAttrColor(Context context, int attr, float alpha) {
int color = getThemeAttrColor(context, attr);
return ColorUtils.setAlphaComponent(color, Math.round(((float) Color.alpha(color)) * alpha));
}
}