package com.geek_alarm.android; import android.content.Context; import android.preference.DialogPreference; import android.util.AttributeSet; import android.view.View; import android.widget.TextView; import kankan.wheel.widget.WheelView; import kankan.wheel.widget.adapters.NumericWheelAdapter; public class NumberPickerPreference extends DialogPreference { private static final int VISIBLE_ITEMS = 3; private int minValue; private int maxValue; private int defaultValue; private int step = 1; private WheelView wheelView; private TextView valueText; private String format; public NumberPickerPreference(Context context, AttributeSet attrs) { super(context, attrs); setDialogLayoutResource(R.layout.number_picker_preference); setLayoutResource(R.layout.preference_with_value); } @Override protected void onBindDialogView(View view) { super.onBindDialogView(view); wheelView = (WheelView) view.findViewById(R.id.value); NumericWheelAdapter wheelAdapter = new NumericWheelAdapter(getContext(), minValue, maxValue, step, format); wheelAdapter.setItemResource(R.layout.wheel_text_item_small); wheelAdapter.setItemTextResource(R.id.text); wheelView.setViewAdapter(wheelAdapter); int index = (getPersistedInt(defaultValue) - minValue) / step; wheelView.setCurrentItem(index); wheelView.setVisibleItems(VISIBLE_ITEMS); } @Override protected void onBindView(View view) { super.onBindView(view); valueText = (TextView) view.findViewById(R.id.preference_value); String value = String.format(format, getPersistedInt(defaultValue)); valueText.setText(value); } @Override protected void onDialogClosed(boolean positiveResult) { super.onDialogClosed(positiveResult); if (positiveResult) { int value = wheelView.getCurrentItem() * step + minValue; persistInt(value); valueText.setText(String.format(format, value)); } } public void setMaxValue(int maxValue) { this.maxValue = maxValue; } public void setMinValue(int minValue) { this.minValue = minValue; } public void setDefaultValue(int defaultValue) { this.defaultValue = defaultValue; } public void setStep(int step) { this.step = step; } public void setFormat(String format) { this.format = format == null ? "%d" : format ; } }