package cri.sanity.pref; import android.content.Context; import android.preference.EditTextPreference; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; import android.util.AttributeSet; import cri.sanity.*; public class PEdit extends EditTextPreference implements OnPreferenceChangeListener { private OnPreferenceChangeListener listener = null; private CharSequence sum = null; public String prefix; public String suffix; public PEdit(Context ctx) { super(ctx); init(null ); } public PEdit(Context ctx, AttributeSet attrs) { super(ctx, attrs); init(attrs); updateSum(); } public PEdit(Context ctx, AttributeSet attrs, int style) { super(ctx, attrs, style); init(attrs); updateSum(); } //---- ListPreference override @Override public void setText(String text) { text = fullText(text); super.setText(text); updateSum(text); } @Override public void setSummary(int id) { super.setSummary(sum = A.s(id)); } @Override public void setSummary(CharSequence text) { super.setSummary(sum = text); } @Override public OnPreferenceChangeListener getOnPreferenceChangeListener() { return listener; } @Override public void setOnPreferenceChangeListener(OnPreferenceChangeListener l) { listener = l; } @Override public boolean onPreferenceChange(Preference p, Object o) { if(listener!=null && !listener.onPreferenceChange(p, o)) return false; updateSum(fullText(o)); if(isWrap()) A.putc(getWrapKey(), Integer.parseInt((String)o)); // wrap key found: convert to integer return true; } //---- public api public final void updateSum() { updateSum(getText()); } public final boolean isWrap() { final String key = getKey(); return key!=null && key.endsWith(K.WS); } public final String getWrapKey() { final String key = getKey(); return key.substring(0, key.length()-K.WS.length()); } public final int getValueInt() { try { return Integer.parseInt(getText()); } catch(Exception e) { return 0; } } //---- private api private void init(AttributeSet attrs) { super.setOnPreferenceChangeListener(this); if(attrs != null) { prefix = attrs.getAttributeValue(null, "prefix"); suffix = attrs.getAttributeValue(null, "suffix"); } if(prefix == null) prefix = ""; if(suffix == null) suffix = ""; if(!isWrap()) return; setPersistent(false); final String k = getWrapKey(); if(A.has(k)) super.setText(Integer.toString(A.geti(k))); } private String fullText(Object text) { final String t = (String)text; return A.empty(t)? "" : prefix+t.trim()+suffix; } private void updateSum(String text) { if(sum == null) sum = getSummary(); if(text != null) text = text.trim(); text = A.empty(text)? "" : " ("+text+')'; super.setSummary(sum + text); } }