package com.vijay.jsonwizard.customviews; import android.annotation.TargetApi; import android.content.Context; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.os.Build; import android.support.annotation.NonNull; import android.util.AttributeSet; import android.view.MotionEvent; import com.rey.material.drawable.RippleDrawable; import com.rey.material.widget.RippleManager; public class CompoundButton extends android.widget.CompoundButton { private RippleManager mRippleManager = new RippleManager(); protected Drawable mButtonDrawable; public CompoundButton(Context context) { super(context); init(context, null, 0, 0); } public CompoundButton(Context context, AttributeSet attrs) { super(context, attrs); init(context, attrs, 0, 0); } public CompoundButton(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context, attrs, defStyleAttr, 0); } public CompoundButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr); init(context, attrs, defStyleAttr, defStyleRes); } @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) private void init(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { // a fix to reset paddingLeft attribute if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) { TypedArray a = context.obtainStyledAttributes(attrs, new int[] { android.R.attr.padding, android.R.attr.paddingLeft }, defStyleAttr, defStyleRes); if (!a.hasValue(0) && !a.hasValue(1)) setPadding(0, getPaddingTop(), getPaddingRight(), getPaddingBottom()); a.recycle(); } setClickable(true); applyStyle(context, attrs, defStyleAttr, defStyleRes); } public void applyStyle(int resId) { applyStyle(getContext(), null, 0, resId); } private void applyStyle(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { mRippleManager.onCreate(this, context, attrs, defStyleAttr, defStyleRes); } @Override public void setBackgroundDrawable(Drawable drawable) { Drawable background = getBackground(); if (background instanceof RippleDrawable && !(drawable instanceof RippleDrawable)) ((RippleDrawable) background).setBackgroundDrawable(drawable); else super.setBackgroundDrawable(drawable); } @Override public void setOnClickListener(OnClickListener l) { if (l == mRippleManager) super.setOnClickListener(l); else { mRippleManager.setOnClickListener(l); setOnClickListener(mRippleManager); } } @Override public boolean onTouchEvent(@NonNull MotionEvent event) { boolean result = super.onTouchEvent(event); return mRippleManager.onTouchEvent(event) || result; } @Override public void setButtonDrawable(Drawable d) { mButtonDrawable = d; super.setButtonDrawable(d); } @Override public int getCompoundPaddingLeft() { int padding = super.getCompoundPaddingLeft(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) return padding; if (mButtonDrawable != null) padding += mButtonDrawable.getIntrinsicWidth(); return padding; } @Override public void setCompoundDrawablesWithIntrinsicBounds(Drawable left, Drawable top, Drawable right, Drawable bottom) { mButtonDrawable = right; super.setCompoundDrawablesWithIntrinsicBounds(left, top, right, bottom); } }