package net.granoeste.validator;
import java.util.regex.PatternSyntaxException;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.EditText;
public class ValidatableEditText extends EditText {
public ValidatableEditText(final Context context) {
this(context, null);
}
public ValidatableEditText(final Context context, final AttributeSet attrs) {
super(context, attrs);
initView(context, attrs);
}
public ValidatableEditText(final Context context, final AttributeSet attrs, final int defStyle) {
super(context, attrs, defStyle);
initView(context, attrs);
}
private boolean mRequired;
private int mMinlength;
private int mMaxlength;
private String mMask;
private boolean mIsInteger;
private boolean mIsDouble;
private boolean mIsDate;
private String mDateFormat;
private boolean mRange;
private int mRangeFrom;
private int mRangeTo;
private boolean mIntRange;
private int mIntRangeFrom;
private int mIntRangeTo;
private boolean mDoubleRange;
private double mDoubleRangeFrom;
private double mDoubleRangeTo;
private boolean mIsEmail;
private boolean mIsUrl;
private String mLabel;
private String mMessage;
private void initView(final Context context, final AttributeSet attrs) {
if (attrs != null) {
for (int i = 0; i < attrs.getAttributeCount(); i++) {
Log.v("ValidatableEditText",
attrs.getAttributeName(i) + "=" + attrs.getAttributeValue(i));
}
final TypedArray array = context.obtainStyledAttributes(attrs,
R.styleable.ValidatableEditText);
mRequired = array.getBoolean(R.styleable.ValidatableEditText_required, false);
mMaxlength = array.getInt(R.styleable.ValidatableEditText_maxlength, -1);
mMinlength = array.getInt(R.styleable.ValidatableEditText_minlength, -1);
mMask = array.getString(R.styleable.ValidatableEditText_mask);
mIsInteger = array.getBoolean(R.styleable.ValidatableEditText_isInteger, false);
mIsDouble = array.getBoolean(R.styleable.ValidatableEditText_isDouble, false);
mDateFormat = array.getString(R.styleable.ValidatableEditText_isDate);
if (mDateFormat != null) {
mIsDate = true;
}
final String range = array.getString(R.styleable.ValidatableEditText_range);
if (range != null) {
try {
final String[] values = range.split(",");
mRangeFrom = Integer.parseInt(values[0]);
mRangeTo = Integer.parseInt(values[1]);
mRange = true;
} catch (final ArrayIndexOutOfBoundsException e) {
} catch (final NumberFormatException e) {
} catch (final PatternSyntaxException e) {
}
}
final String intRange = array.getString(R.styleable.ValidatableEditText_intRange);
if (intRange != null) {
try {
final String[] values = intRange.split(",");
mIntRangeFrom = Integer.parseInt(values[0]);
mIntRangeTo = Integer.parseInt(values[1]);
mIntRange = true;
} catch (final ArrayIndexOutOfBoundsException e) {
} catch (final NumberFormatException e) {
} catch (final PatternSyntaxException e) {
}
}
final String doubleRange = array.getString(R.styleable.ValidatableEditText_doubleRange);
if (doubleRange != null) {
try {
final String[] values = doubleRange.split(",");
mDoubleRangeFrom = Double.parseDouble(values[0]);
mDoubleRangeTo = Double.parseDouble(values[1]);
mDoubleRange = true;
} catch (final ArrayIndexOutOfBoundsException e) {
} catch (final NumberFormatException e) {
} catch (final PatternSyntaxException e) {
}
}
mIsEmail = array.getBoolean(R.styleable.ValidatableEditText_isEmail, false);
mIsUrl = array.getBoolean(R.styleable.ValidatableEditText_isUrl, false);
final int idMsg = array.getResourceId(R.styleable.ValidatableEditText_message, -1);
if (idMsg != -1) {
mMessage = getResources().getString(idMsg);
} else {
mMessage = array.getNonResourceString(R.styleable.ValidatableEditText_message);
}
final int id = array.getResourceId(R.styleable.ValidatableEditText_label, -1);
if (id != -1) {
mLabel = getResources().getString(id);
} else {
mLabel = array.getNonResourceString(R.styleable.ValidatableEditText_label);
}
array.recycle();
}
}
public boolean isRequired() {
return mRequired;
}
public int getMinlength() {
return mMinlength;
}
public int getMaxlength() {
return mMaxlength;
}
public String getMask() {
return mMask;
}
public boolean isInteger() {
return mIsInteger;
}
public boolean isDouble() {
return mIsDouble;
}
public boolean isDate() {
return mIsDate;
}
public String getDateFormat() {
return mDateFormat;
}
public boolean isRange() {
return mRange;
}
public int getRangeFrom() {
return mRangeFrom;
}
public int getRangeTo() {
return mRangeTo;
}
public boolean isIntRange() {
return mIntRange;
}
public int getIntRangeFrom() {
return mIntRangeFrom;
}
public int getIntRangeTo() {
return mIntRangeTo;
}
public boolean isDoubleRange() {
return mDoubleRange;
}
public double getDoubleRangeFrom() {
return mDoubleRangeFrom;
}
public double getDoubleRangeTo() {
return mDoubleRangeTo;
}
public boolean isEmail() {
return mIsEmail;
}
public boolean isUrl() {
return mIsUrl;
}
public String getLabel() {
return mLabel;
}
public String getMessage() {
return mMessage;
}
public boolean hasMessage() {
return (mMessage != null);
}
}