package v3;
import android.text.Editable;
import android.text.InputType;
import android.text.TextWatcher;
import android.text.method.DigitsKeyListener;
import android.util.Log;
import android.widget.EditText;
public abstract class M_LongModifier extends M_TextModifier {
private Long minimumValue;
private Long maximumValue;
public void setMinimumAndMaximumValue(Long minValue, Long maxValue) {
minimumValue = minValue;
maximumValue = maxValue;
}
public Long getMaximumValue() {
return maximumValue;
}
public Long getMinimumValue() {
return minimumValue;
}
@Override
public void applyTextFilterIfNeeded(EditText e) {
e.setInputType(InputType.TYPE_CLASS_NUMBER);
e.setKeyListener(new DigitsKeyListener(true, false));
if (minimumValue != null && maximumValue != null) {
setMinMaxFilterFor(e, minimumValue, maximumValue);
}
}
public void setToMaxValue() {
if (getEditText() != null && isEditable() && getMaximumValue() != null) {
getMyHandler().post(new Runnable() {
@Override
public void run() {
getEditText().setText("" + getMaximumValue());
}
});
}
}
private static void setMinMaxFilterFor(EditText e, final Long min,
final Long max) {
e.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
if (!"".equals(s.toString())) {
try {
long v = Long.parseLong(s.toString());
if (v < min) {
s.clear();
s.append("" + min);
} else if (v > max) {
s.clear();
s.append("" + max);
}
} catch (NumberFormatException e) {
}
}
}
});
}
@Override
public boolean save(String newValue) {
try {
return saveLong(Long.parseLong(newValue));
} catch (NumberFormatException e) {
// TODO show toast?
Log.e("EditScreen", "The entered value for " + getVarName()
+ " was no number!");
}
getEditText().requestFocus();
return false;
}
@Override
public String load() {
return "" + loadLong();
}
public abstract long loadLong();
public abstract boolean saveLong(long longValue);
}