From e7fdb36886092f0a0d0f81fdf64cdf441ef9c94e Mon Sep 17 00:00:00 2001 From: Nikolay Pultsin Date: Thu, 6 Aug 2015 16:52:21 +0200 Subject: [PATCH] new style number picker preference --- res/layout-v11/picker_preference.xml | 14 ++++++ .../preferences/ZLIntegerRangePreference.java | 49 ++++++++++++------- 2 files changed, 44 insertions(+), 19 deletions(-) create mode 100644 res/layout-v11/picker_preference.xml diff --git a/res/layout-v11/picker_preference.xml b/res/layout-v11/picker_preference.xml new file mode 100644 index 000000000..ece5b2acf --- /dev/null +++ b/res/layout-v11/picker_preference.xml @@ -0,0 +1,14 @@ + + + + diff --git a/src/org/geometerplus/android/fbreader/preferences/ZLIntegerRangePreference.java b/src/org/geometerplus/android/fbreader/preferences/ZLIntegerRangePreference.java index fd6dec513..d25fdae06 100644 --- a/src/org/geometerplus/android/fbreader/preferences/ZLIntegerRangePreference.java +++ b/src/org/geometerplus/android/fbreader/preferences/ZLIntegerRangePreference.java @@ -20,35 +20,46 @@ package org.geometerplus.android.fbreader.preferences; import android.content.Context; -import android.preference.ListPreference; +import android.preference.DialogPreference; +import android.view.View; +import android.widget.NumberPicker; -import org.geometerplus.zlibrary.core.resources.ZLResource; import org.geometerplus.zlibrary.core.options.ZLIntegerRangeOption; +import org.geometerplus.zlibrary.core.resources.ZLResource; +import org.geometerplus.zlibrary.ui.android.R; -class ZLIntegerRangePreference extends ListPreference { +class ZLIntegerRangePreference extends DialogPreference { private final ZLIntegerRangeOption myOption; + private NumberPicker myPicker; - ZLIntegerRangePreference(Context context, ZLResource resource, ZLIntegerRangeOption option) { - super(context); + public ZLIntegerRangePreference(Context context, ZLResource resource, ZLIntegerRangeOption option) { + super(context, null); myOption = option; setTitle(resource.getValue()); - String[] entries = new String[option.MaxValue - option.MinValue + 1]; - for (int i = 0; i < entries.length; ++i) { - entries[i] = ((Integer)(i + option.MinValue)).toString(); - } - setEntries(entries); - setEntryValues(entries); - setValueIndex(option.getValue() - option.MinValue); - setSummary(getValue()); + updateSummary(); + setDialogLayoutResource(R.layout.picker_preference); } @Override - protected void onDialogClosed(boolean result) { - super.onDialogClosed(result); - if (result) { - final String value = getValue(); - setSummary(value); - myOption.setValue(myOption.MinValue + findIndexOfValue(value)); + protected void onBindDialogView(View view) { + myPicker = (NumberPicker)view.findViewById(R.id.picker_preference_central); + myPicker.setMinValue(myOption.MinValue); + myPicker.setMaxValue(myOption.MaxValue); + myPicker.setValue(myOption.getValue()); + myPicker.setWrapSelectorWheel(false); + + super.onBindDialogView(view); + } + + @Override + protected void onDialogClosed(boolean positiveResult) { + if (positiveResult) { + myOption.setValue(myPicker.getValue()); + updateSummary(); } } + + private void updateSummary() { + setSummary(String.valueOf(myOption.getValue())); + } }