package org.emdev.ui.actions.params; import android.text.Editable; import android.text.InputFilter; import android.text.InputType; import android.widget.EditText; public class EditableValue extends AbstractActionParameter { private final EditText input; public EditableValue(final String name, final EditText input) { super(name); this.input = input; } @Override public Object getValue() { if ((this.input.getInputType() & InputType.TYPE_TEXT_VARIATION_PASSWORD) != 0) { return new PasswordEditable(this.input.getText()); } return this.input.getText(); } public static class PasswordEditable implements Editable { private final Editable editable; PasswordEditable(final Editable editable) { super(); this.editable = editable; } public String getPassword() { return editable.toString(); } @Override public void getChars(final int start, final int end, final char[] dest, final int destoff) { editable.getChars(start, end, dest, destoff); } @Override public void setSpan(final Object what, final int start, final int end, final int flags) { editable.setSpan(what, start, end, flags); } @Override public Editable replace(final int st, final int en, final CharSequence source, final int start, final int end) { return editable.replace(st, en, source, start, end); } @Override public int length() { return editable.length(); } @Override public char charAt(final int index) { return editable.charAt(index); } @Override public CharSequence subSequence(final int start, final int end) { return editable.subSequence(start, end); } @Override public void removeSpan(final Object what) { editable.removeSpan(what); } @Override public Editable replace(final int st, final int en, final CharSequence text) { return editable.replace(st, en, text); } @Override public Editable insert(final int where, final CharSequence text, final int start, final int end) { return editable.insert(where, text, start, end); } @Override public Editable insert(final int where, final CharSequence text) { return editable.insert(where, text); } @Override public String toString() { return "*******"; } @Override public Editable delete(final int st, final int en) { return editable.delete(st, en); } @Override public Editable append(final CharSequence text) { return editable.append(text); } @Override public Editable append(final CharSequence text, final int start, final int end) { return editable.append(text, start, end); } @Override public Editable append(final char text) { return editable.append(text); } @Override public void clear() { editable.clear(); } @Override public void clearSpans() { editable.clearSpans(); } @Override public void setFilters(final InputFilter[] filters) { editable.setFilters(filters); } @Override public InputFilter[] getFilters() { return editable.getFilters(); } @Override public <T> T[] getSpans(final int start, final int end, final Class<T> type) { return editable.getSpans(start, end, type); } @Override public int getSpanStart(final Object tag) { return editable.getSpanStart(tag); } @Override public int getSpanEnd(final Object tag) { return editable.getSpanEnd(tag); } @Override public int getSpanFlags(final Object tag) { return editable.getSpanFlags(tag); } @Override @SuppressWarnings("rawtypes") public int nextSpanTransition(final int start, final int limit, final Class type) { return editable.nextSpanTransition(start, limit, type); } } }