package com.afollestad.materialdialogs.internal;
import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.support.v7.internal.text.AllCapsTransformationMethod;
import android.util.AttributeSet;
import android.view.Gravity;
import android.widget.TextView;
import com.afollestad.materialdialogs.GravityEnum;
import com.afollestad.materialdialogs.R;
import com.afollestad.materialdialogs.util.DialogUtils;
/**
* @author Kevin Barry (teslacoil) 4/02/2015
*/
public class MDButton extends TextView {
private boolean mStacked = false;
private GravityEnum mStackedGravity;
private int mStackedEndPadding;
private Drawable mStackedBackground;
private Drawable mDefaultBackground;
public MDButton(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs, 0, 0);
}
public MDButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context, attrs, defStyleAttr, 0);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public MDButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init(context, attrs, defStyleAttr, defStyleRes);
}
private void init(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
mStackedEndPadding = context.getResources()
.getDimensionPixelSize(R.dimen.md_dialog_frame_margin);
mStackedGravity = GravityEnum.END;
}
/**
* Set if the button should be displayed in stacked mode.
* This should only be called from MDRootLayout's onMeasure, and we must be measured
* after calling this.
*/
/* package */ void setStacked(boolean stacked, boolean force) {
if (mStacked != stacked || force) {
setGravity(stacked ? (Gravity.CENTER_VERTICAL | mStackedGravity.getGravityInt()) : Gravity.CENTER);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
//noinspection ResourceType
setTextAlignment(stacked ? mStackedGravity.getTextAlignment() : TEXT_ALIGNMENT_CENTER);
}
DialogUtils.setBackgroundCompat(this, stacked ? mStackedBackground : mDefaultBackground);
if (stacked) {
setPadding(mStackedEndPadding, getPaddingTop(), mStackedEndPadding, getPaddingBottom());
} /* Else the padding was properly reset by the drawable */
mStacked = stacked;
}
}
public void setStackedGravity(GravityEnum gravity) {
mStackedGravity = gravity;
}
public void setStackedSelector(Drawable d) {
mStackedBackground = d;
if (mStacked)
setStacked(true, true);
}
public void setDefaultSelector(Drawable d) {
mDefaultBackground = d;
if (!mStacked)
setStacked(false, true);
}
public void setAllCapsCompat(boolean allCaps) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
setAllCaps(allCaps);
} else {
if (allCaps)
setTransformationMethod(new AllCapsTransformationMethod(getContext()));
else
setTransformationMethod(null);
}
}
}