package nodomain.freeyourgadget.gadgetbridge.util.preferences; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; import android.widget.EditText; import nodomain.freeyourgadget.gadgetbridge.R; public class MinMaxTextWatcher implements TextWatcher { private final EditText editText; private final int min; private final int max; private final boolean allowEmpty; public MinMaxTextWatcher(final EditText editText, final int min, final int max) { this(editText, min, max, false); } public MinMaxTextWatcher(final EditText editText, final int min, final int max, final boolean allowEmpty) { this.editText = editText; this.min = min; this.max = max; this.allowEmpty = allowEmpty; } @Override public void beforeTextChanged(final CharSequence s, final int start, final int count, final int after) { } @Override public void onTextChanged(final CharSequence s, final int start, final int before, final int count) { } @Override public void afterTextChanged(final Editable editable) { if (TextUtils.isEmpty(editable.toString()) && allowEmpty) { editText.getRootView().findViewById(android.R.id.button1) .setEnabled(true); return; } try { final int val = Integer.parseInt(editable.toString()); editText.getRootView().findViewById(android.R.id.button1) .setEnabled(val >= min && val <= max); if (val < min) { editText.setError(editText.getContext().getString(R.string.min_val, min)); } else if (val > max) { editText.setError(editText.getContext().getString(R.string.max_val, max)); } else { editText.setError(null); } } catch (final NumberFormatException e) { editText.getRootView().findViewById(android.R.id.button1) .setEnabled(false); } } }