package com.afollestad.materialdialogs.internal; import android.content.Context; import android.content.res.ColorStateList; import android.graphics.PorterDuff; import android.graphics.drawable.Drawable; import android.os.Build; import android.support.v4.content.ContextCompat; import android.support.v4.graphics.drawable.DrawableCompat; import android.support.v7.widget.AppCompatEditText; import android.widget.CheckBox; import android.widget.EditText; import android.widget.ProgressBar; import android.widget.RadioButton; import android.widget.SeekBar; import com.afollestad.materialdialogs.R; import com.afollestad.materialdialogs.util.DialogUtils; /** * Tints widgets */ public class MDTintHelper { public static void setTint(RadioButton radioButton, int color) { ColorStateList sl = new ColorStateList(new int[][]{ new int[]{-android.R.attr.state_checked}, new int[]{android.R.attr.state_checked} }, new int[]{ DialogUtils.resolveColor(radioButton.getContext(), R.attr.colorControlNormal), color }); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { radioButton.setButtonTintList(sl); } else { Drawable d = DrawableCompat.wrap(ContextCompat.getDrawable(radioButton.getContext(), R.drawable.abc_btn_radio_material)); DrawableCompat.setTintList(d, sl); radioButton.setButtonDrawable(d); } } public static void setTint(SeekBar seekBar, int color) { ColorStateList s1 = ColorStateList.valueOf(color); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { seekBar.setThumbTintList(s1); seekBar.setProgressTintList(s1); } else if (Build.VERSION.SDK_INT > Build.VERSION_CODES.GINGERBREAD_MR1) { Drawable progressDrawable = DrawableCompat.wrap(seekBar.getProgressDrawable()); seekBar.setProgressDrawable(progressDrawable); DrawableCompat.setTintList(progressDrawable, s1); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { Drawable thumbDrawable = DrawableCompat.wrap(seekBar.getThumb()); DrawableCompat.setTintList(thumbDrawable, s1); seekBar.setThumb(thumbDrawable); } } else { PorterDuff.Mode mode = PorterDuff.Mode.SRC_IN; if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.GINGERBREAD_MR1) { mode = PorterDuff.Mode.MULTIPLY; } if (seekBar.getIndeterminateDrawable() != null) seekBar.getIndeterminateDrawable().setColorFilter(color, mode); if (seekBar.getProgressDrawable() != null) seekBar.getProgressDrawable().setColorFilter(color, mode); } } public static void setTint(ProgressBar progressBar, int color) { setTint(progressBar, color, false); } public static void setTint(ProgressBar progressBar, int color, boolean skipIndeterminate) { ColorStateList sl = ColorStateList.valueOf(color); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { progressBar.setProgressTintList(sl); progressBar.setSecondaryProgressTintList(sl); if (!skipIndeterminate) progressBar.setIndeterminateTintList(sl); } else { PorterDuff.Mode mode = PorterDuff.Mode.SRC_IN; if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.GINGERBREAD_MR1) { mode = PorterDuff.Mode.MULTIPLY; } if (!skipIndeterminate && progressBar.getIndeterminateDrawable() != null) progressBar.getIndeterminateDrawable().setColorFilter(color, mode); if (progressBar.getProgressDrawable() != null) progressBar.getProgressDrawable().setColorFilter(color, mode); } } private static ColorStateList createEditTextColorStateList(Context context, int color) { int[][] states = new int[3][]; int[] colors = new int[3]; int i = 0; states[i] = new int[]{-android.R.attr.state_enabled}; colors[i] = DialogUtils.resolveColor(context, R.attr.colorControlNormal); i++; states[i] = new int[]{-android.R.attr.state_pressed, -android.R.attr.state_focused}; colors[i] = DialogUtils.resolveColor(context, R.attr.colorControlNormal); i++; states[i] = new int[]{}; colors[i] = color; return new ColorStateList(states, colors); } public static void setTint(EditText editText, int color) { ColorStateList editTextColorStateList = createEditTextColorStateList(editText.getContext(), color); if (editText instanceof AppCompatEditText) { ((AppCompatEditText) editText).setSupportBackgroundTintList(editTextColorStateList); } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { editText.setBackgroundTintList(editTextColorStateList); } } public static void setTint(CheckBox box, int color) { ColorStateList sl = new ColorStateList(new int[][]{ new int[]{-android.R.attr.state_checked}, new int[]{android.R.attr.state_checked} }, new int[]{ DialogUtils.resolveColor(box.getContext(), R.attr.colorControlNormal), color }); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { box.setButtonTintList(sl); } else { Drawable drawable = DrawableCompat.wrap(ContextCompat.getDrawable(box.getContext(), R.drawable.abc_btn_check_material)); DrawableCompat.setTintList(drawable, sl); box.setButtonDrawable(drawable); } } }