package android.widget; import android.content.Context; import android.content.res.Resources; import android.graphics.drawable.StateListDrawable; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.util.StateSet; import android.util.TypedValue; import com.bootstrap.BaseApplication; import com.bootstrap.R; import com.bootstrap.drawable.TintedBitmapDrawable; import com.bootstrap.utils.AndroidUtils; import javax.inject.Inject; public class MaterialCheckBox extends CheckBox { public static final int MODE_RECTANGULAR_OUTLINE = 0; public static final int MODE_RECTANGULAR_FILLED = 1; public static final int MODE_ROUND_OUTLINE = 2; @Inject TypefaceManager typefaceManager; @Inject Resources resources; @Inject DisplayMetrics displayMetrics; public MaterialCheckBox(final Context context) { super(context); init(context, null); } public MaterialCheckBox(final Context context, final AttributeSet attrs) { super(context, attrs); init(context, attrs); } public MaterialCheckBox(final Context context, final AttributeSet attrs, final int defStyleAttr) { super(context, attrs, defStyleAttr); init(context, attrs); } public MaterialCheckBox(final Context context, final AttributeSet attrs, final int defStyleAttr, final int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); init(context, attrs); } private void init(final Context context, final AttributeSet attrs) { if (!isInEditMode()) { BaseApplication.from(context).getComponent().inject(this); typefaceManager.setup(context, attrs, this); int paddingLeft = getPaddingLeft(); if (paddingLeft == 0) { paddingLeft = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8f, displayMetrics); } if (AndroidUtils.ltJellyBean()) { paddingLeft += (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 32f, displayMetrics); } setPadding(paddingLeft, getPaddingTop(), getPaddingRight(), getPaddingBottom()); } setButtonStyle(MODE_RECTANGULAR_OUTLINE); } @SuppressWarnings("deprecation") public void setButtonStyle(final int mode, final int tint) { final StateListDrawable stateListDrawable = new StateListDrawable(); int resourceChecked, resourceWildCard; switch (mode) { case MODE_RECTANGULAR_FILLED: resourceChecked = R.drawable.ic_check_box_filled_on; resourceWildCard = R.drawable.ic_check_box_filled_off; break; case MODE_ROUND_OUTLINE: resourceChecked = R.drawable.ic_check_round_filled_on; resourceWildCard = R.drawable.ic_check_round_filled_off; break; default: resourceChecked = R.drawable.ic_check_box_outline_on; resourceWildCard = R.drawable.ic_check_box_outline_off; break; } if (tint == -1) { stateListDrawable.addState(new int[]{android.R.attr.state_checked}, resources.getDrawable(resourceChecked)); stateListDrawable.addState(StateSet.WILD_CARD, resources.getDrawable(resourceWildCard)); } else { stateListDrawable.addState(new int[]{android.R.attr.state_checked}, new TintedBitmapDrawable(resources, resourceChecked, tint)); stateListDrawable.addState(StateSet.WILD_CARD, new TintedBitmapDrawable(resources, resourceWildCard, tint)); } setButtonDrawable(stateListDrawable); } public void setButtonStyle(final int mode) { setButtonStyle(mode, -1); } }