aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/settings/NumberPickerPreference.java
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/cgeo/geocaching/settings/NumberPickerPreference.java')
-rw-r--r--main/src/cgeo/geocaching/settings/NumberPickerPreference.java93
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);
+ }
+}