package czd.lib.view.bootstrap;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.widget.EditText;
import czd.lib.R;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class BootstrapEditText extends EditText {
private boolean roundedCorners = false;
public BootstrapEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initialise(attrs);
}
public BootstrapEditText(Context context, AttributeSet attrs) {
super(context, attrs);
initialise(attrs);
}
public BootstrapEditText(Context context) {
super(context);
initialise(null);
}
public static final String BOOTSTRAP_EDIT_TEXT_DEFAULT = "default";
public static final String BOOTSTRAP_EDIT_TEXT_SUCCESS = "success";
public static final String BOOTSTRAP_EDIT_TEXT_WARNING = "warning";
public static final String BOOTSTRAP_EDIT_TEXT_DANGER = "danger";
private void initialise(AttributeSet attrs) {
TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.BootstrapEditText);
//get defaults
float fontSize = 14.0f;
String state = "default";
String text = "";
String hint = "";
boolean enabled = true;
//font size
if (a.getString(R.styleable.BootstrapEditText_android_textSize) != null)
{
String xmlProvidedSize = attrs.getAttributeValue("http://schemas.android.com/apk/res/android", "textSize");
final Pattern PATTERN_FONT_SIZE = Pattern.compile("([0-9]+[.]?[0-9]*)sp");
Matcher m = PATTERN_FONT_SIZE.matcher(xmlProvidedSize);
if (m.find())
{
if (m.groupCount() == 1)
{
fontSize = Float.valueOf(m.group(1));
}
}
}
//rounded corners
if (a.getString(R.styleable.BootstrapEditText_be_roundedCorners) != null)
{
roundedCorners = a.getBoolean(R.styleable.BootstrapEditText_be_roundedCorners, false);
}
//state
if (a.getString(R.styleable.BootstrapEditText_be_state) != null)
{
state = a.getString(R.styleable.BootstrapEditText_be_state);
}
//text
if (a.getString(R.styleable.BootstrapEditText_android_text) != null)
{
text = a.getString(R.styleable.BootstrapEditText_android_text);
}
//hint
if (a.getString(R.styleable.BootstrapEditText_android_hint) != null)
{
hint = a.getString(R.styleable.BootstrapEditText_android_hint);
}
//enabled
if (a.getString(R.styleable.BootstrapEditText_android_enabled) != null)
{
enabled = a.getBoolean(R.styleable.BootstrapEditText_android_enabled, true);
}
//set values
this.setTextSize(TypedValue.COMPLEX_UNIT_SP, fontSize);
this.setText(text);
this.setHint(hint);
this.setEnabled(enabled);
if (enabled)
{
//work out the right background
setBackgroundDrawable(state);
}
a.recycle();
//addView(editTextView);
}
private void setBackgroundDrawable(String state) {
if (roundedCorners)
{
this.setBackgroundResource(R.drawable.edittext_background_rounded);
}
else
{
this.setBackgroundResource(R.drawable.edittext_background);
}
if (roundedCorners)
{
if (state.equals(BOOTSTRAP_EDIT_TEXT_SUCCESS))
{
this.setBackgroundResource(R.drawable.edittext_background_rounded_success);
}
else if (state.equals(BOOTSTRAP_EDIT_TEXT_WARNING))
{
this.setBackgroundResource(R.drawable.edittext_background_rounded_warning);
}
else if (state.equals(BOOTSTRAP_EDIT_TEXT_DANGER))
{
this.setBackgroundResource(R.drawable.edittext_background_rounded_danger);
}
}
else
{
if (state.equals(BOOTSTRAP_EDIT_TEXT_SUCCESS))
{
this.setBackgroundResource(R.drawable.edittext_background_success);
}
else if (state.equals(BOOTSTRAP_EDIT_TEXT_WARNING))
{
this.setBackgroundResource(R.drawable.edittext_background_warning);
}
else if (state.equals(BOOTSTRAP_EDIT_TEXT_DANGER))
{
this.setBackgroundResource(R.drawable.edittext_background_danger);
}
}
}
/**
* Change the BootstrapEditTextState
*
* @param state
*/
public void setState(String state) {
setBackgroundDrawable(state);
}
/**
* Set the BootstrapEditText to a successful state
*/
public void setSuccess() {
setBackgroundDrawable(BOOTSTRAP_EDIT_TEXT_SUCCESS);
}
/**
* Set the BootstrapEditText to a warning state
*/
public void setWarning() {
setBackgroundDrawable(BOOTSTRAP_EDIT_TEXT_WARNING);
}
/**
* Set the BootstrapEditText to a danger state
*/
public void setDanger() {
setBackgroundDrawable(BOOTSTRAP_EDIT_TEXT_DANGER);
}
/**
* Set the BootstrapEditText to a default state
*/
public void setDefault() {
setBackgroundDrawable(BOOTSTRAP_EDIT_TEXT_DEFAULT);
}
/**
* Specifies whether the BootstrapEditText is enabled or disabled
*
* @param enabled - boolean state for either enabled or disabled
*/
public void setBootstrapEditTextEnabled(boolean enabled) {
this.setEnabled(enabled);
}
}