diff options
Diffstat (limited to 'main/src/cgeo/geocaching/settings/NumberPickerPreference.java')
| -rw-r--r-- | main/src/cgeo/geocaching/settings/NumberPickerPreference.java | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/main/src/cgeo/geocaching/settings/NumberPickerPreference.java b/main/src/cgeo/geocaching/settings/NumberPickerPreference.java new file mode 100644 index 0000000..273b7d3 --- /dev/null +++ b/main/src/cgeo/geocaching/settings/NumberPickerPreference.java @@ -0,0 +1,93 @@ +package cgeo.geocaching.settings; + +import cgeo.geocaching.R; + +import org.apache.commons.lang3.StringUtils; + +import android.content.Context; +import android.preference.DialogPreference; +import android.util.AttributeSet; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; + +public class NumberPickerPreference extends DialogPreference { + + private EditText editText; + + public NumberPickerPreference(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public NumberPickerPreference(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + @Override + protected void onBindDialogView(View view) { + String msg = (String) this.getDialogMessage(); + if (StringUtils.isNotBlank(msg)) { + TextView tv = (TextView) view.findViewById(R.id.number_picker_message); + tv.setText(msg); + } + + editText = (EditText) view.findViewById(R.id.number_picker_input); + setValue(getPersistedInt(0)); + + Button minus = (Button) view.findViewById(R.id.number_picker_minus); + Button plus = (Button) view.findViewById(R.id.number_picker_plus); + + minus.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View button) { + Integer value = getValue(); + if (value != null) { + setValue(--value); + } + } + }); + + plus.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View button) { + Integer value = getValue(); + if (value != null) { + setValue(++value); + } + } + }); + + super.onBindDialogView(view); + } + + private Integer getValue() { + try { + return Integer.parseInt(editText.getText().toString()); + } catch (NumberFormatException e) { + return null; + } + } + + private void setValue(final int value) { + int v = value; + if (v <= 0) { + v = 0; + } else if (v > Integer.MAX_VALUE) { + v = Integer.MAX_VALUE; + } + editText.setText(String.valueOf(v)); + } + + @Override + protected void onDialogClosed(boolean positiveResult) { + if (positiveResult) { + Integer value = getValue(); + if (value != null) { + persistInt(value); + callChangeListener(value); + } + } + super.onDialogClosed(positiveResult); + } +} |
