blob: 6d1d81b1a97c9782e846d3ff61ac55498215a652 [file] [log] [blame]
Alexandre Lision76592472013-11-12 17:38:52 -05001package org.sflphone.views;
2
3import java.lang.reflect.Field;
4
5import org.sflphone.R;
6
7import android.content.Context;
8import android.content.res.TypedArray;
9import android.preference.DialogPreference;
10import android.util.AttributeSet;
11import android.util.Log;
12import android.view.LayoutInflater;
13import android.view.View;
14import android.widget.EditText;
15import android.widget.NumberPicker;
16
17public class NumberPickerPreference extends DialogPreference {
18 private int mMin, mMax, mDefault;
19
20 private String mMaxExternalKey, mMinExternalKey;
21
22 private NumberPicker mNumberPicker;
23
24 public NumberPickerPreference(Context context, AttributeSet attrs) {
25 super(context, attrs);
26 // TypedArray dialogType = context.obtainStyledAttributes(attrs,
27 // com.android.internal.R.styleable.DialogPreference, 0, 0);
28 TypedArray numberPickerType = context.obtainStyledAttributes(attrs, R.styleable.NumberPickerPreference, 0, 0);
29
30 mMaxExternalKey = numberPickerType.getString(R.styleable.NumberPickerPreference_maxExternal);
31 mMinExternalKey = numberPickerType.getString(R.styleable.NumberPickerPreference_minExternal);
32
33 mMax = numberPickerType.getInt(R.styleable.NumberPickerPreference_max, 5);
34 mMin = numberPickerType.getInt(R.styleable.NumberPickerPreference_min, 0);
35
36 // mDefault = dialogType.getInt(com.android.internal.R.styleable.Preference_defaultValue, mMin);
37 mDefault = mMin;
38 // dialogType.recycle();
39 numberPickerType.recycle();
40 }
41
42 @Override
43 protected View onCreateDialogView() {
44 int max = mMax;
45 int min = mMin;
46
47 // External values
48 if (mMaxExternalKey != null) {
49 max = getSharedPreferences().getInt(mMaxExternalKey, mMax);
50 }
51 if (mMinExternalKey != null) {
52 min = getSharedPreferences().getInt(mMinExternalKey, mMin);
53 }
54
55 LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
56 View view = inflater.inflate(R.layout.number_picker_dialog, null);
57
58 mNumberPicker = (NumberPicker) view.findViewById(R.id.number_picker);
59
60 if (mNumberPicker == null) {
61 throw new RuntimeException("mNumberPicker is null!");
62 }
63
64 // Initialize state
65 mNumberPicker.setWrapSelectorWheel(false);
66 mNumberPicker.setMaxValue(max);
67 mNumberPicker.setMinValue(min);
68 mNumberPicker.setValue(getPersistedInt(mDefault));
69
70 // No keyboard popup
71 disableTextInput(mNumberPicker);
72 // EditText textInput = (EditText) mNumberPicker.findViewById(com.android.internal.R.id.numberpicker_input);
73 // if (textInput != null) {
74 // textInput.setCursorVisible(false);
75 // textInput.setFocusable(false);
76 // textInput.setFocusableInTouchMode(false);
77 // }
78
79 return view;
80 }
81
82 @Override
83 protected void onDialogClosed(boolean positiveResult) {
84 if (positiveResult) {
85 persistInt(mNumberPicker.getValue());
Alexandre Lisiona3650992013-11-13 14:19:35 -050086 getOnPreferenceChangeListener().onPreferenceChange(this, String.valueOf(mNumberPicker.getValue()));
Alexandre Lision76592472013-11-12 17:38:52 -050087 }
88 }
89
90 /*
91 * reflection of NumberPicker.java verified in 4.1, 4.2
92 */
93 private void disableTextInput(NumberPicker np) {
94 if (np == null)
95 return;
96 Class<?> classType = np.getClass();
97 Field inputTextField;
98 try {
99 inputTextField = classType.getDeclaredField("mInputText");
100 inputTextField.setAccessible(true);
101 EditText textInput = (EditText) inputTextField.get(np);
102 if (textInput != null) {
103 textInput.setCursorVisible(false);
104 textInput.setFocusable(false);
105 textInput.setFocusableInTouchMode(false);
106 }
107 } catch (Exception e) {
108 Log.d("trebuchet", "NumberPickerPreference disableTextInput error", e);
109 }
110 }
111}