diff options
author | nebkat <nebkat@teamhacksung.org> | 2012-03-22 13:35:39 +0000 |
---|---|---|
committer | nebkat <nebkat@teamhacksung.org> | 2012-03-22 13:35:39 +0000 |
commit | 59aee3360049e1a1706a043bb26984670f02fb0f (patch) | |
tree | 4c0cf2e7c9a21cf8a1d8226a1fe6b34fa7824a50 | |
parent | 43b2332494946486aa764ff7e0d1c60fcfa78743 (diff) | |
download | android_packages_apps_Trebuchet-59aee3360049e1a1706a043bb26984670f02fb0f.tar.gz android_packages_apps_Trebuchet-59aee3360049e1a1706a043bb26984670f02fb0f.tar.bz2 android_packages_apps_Trebuchet-59aee3360049e1a1706a043bb26984670f02fb0f.zip |
DoubleNumberPickerPreference
Change-Id: I9e71b1f889e98e134b99c965452192e503ff2f08
-rwxr-xr-x | res/layout/double_number_picker_dialog.xml | 64 | ||||
-rw-r--r-- | res/values/attrs.xml | 15 | ||||
-rw-r--r-- | src/com/cyanogenmod/trebuchet/preference/DoubleNumberPickerPreference.java | 186 |
3 files changed, 265 insertions, 0 deletions
diff --git a/res/layout/double_number_picker_dialog.xml b/res/layout/double_number_picker_dialog.xml new file mode 100755 index 000000000..8c9fb8ef8 --- /dev/null +++ b/res/layout/double_number_picker_dialog.xml @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2011 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:orientation="horizontal" + android:gravity="center_horizontal" + android:layout_width="wrap_content" + android:layout_height="match_parent"> + + <LinearLayout + android:gravity="center" + android:orientation="vertical" + android:layout_height="fill_parent" + android:layout_width="0dp" + android:layout_weight="1"> + + <TextView + android:id="@+id/picker_title_1" + android:textAppearance="?android:textAppearanceMedium" + android:layout_width="wrap_content" + android:layout_height="wrap_content" /> + + <NumberPicker + android:id="@+id/number_picker_1" + android:layout_centerInParent="true" + android:layout_width="50dip" + android:layout_height="match_parent" /> + + </LinearLayout> + + <LinearLayout + android:gravity="center" + android:orientation="vertical" + android:layout_height="fill_parent" + android:layout_width="0dp" + android:layout_weight="1"> + + <TextView + android:id="@+id/picker_title_2" + android:textAppearance="?android:textAppearanceMedium" + android:layout_width="wrap_content" + android:layout_height="wrap_content" /> + + <NumberPicker + android:id="@+id/number_picker_2" + android:layout_centerInParent="true" + android:layout_width="50dip" + android:layout_height="match_parent" /> + + </LinearLayout> + +</LinearLayout> diff --git a/res/values/attrs.xml b/res/values/attrs.xml index 252d04be2..0e2f17131 100644 --- a/res/values/attrs.xml +++ b/res/values/attrs.xml @@ -142,4 +142,19 @@ <attr name="maxExternal" format="string" /> <attr name="minExternal" format="string" /> </declare-styleable> + + <declare-styleable name="DoubleNumberPickerPreference"> + <attr name="defaultValue1" format="integer" /> + <attr name="defaultValue2" format="integer" /> + <attr name="max1" format="integer" /> + <attr name="min1" format="integer" /> + <attr name="max2" format="integer" /> + <attr name="min2" format="integer" /> + <attr name="maxExternal1" format="string" /> + <attr name="minExternal1" format="string" /> + <attr name="maxExternal2" format="string" /> + <attr name="minExternal2" format="string" /> + <attr name="pickerTitle1" format="string" /> + <attr name="pickerTitle2" format="string" /> + </declare-styleable> </resources> diff --git a/src/com/cyanogenmod/trebuchet/preference/DoubleNumberPickerPreference.java b/src/com/cyanogenmod/trebuchet/preference/DoubleNumberPickerPreference.java new file mode 100644 index 000000000..1a386395c --- /dev/null +++ b/src/com/cyanogenmod/trebuchet/preference/DoubleNumberPickerPreference.java @@ -0,0 +1,186 @@ +/* + * Copyright (C) 2011 The CyanogenMod Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.cyanogenmod.trebuchet.preference; + +import android.content.Context; +import android.content.res.TypedArray; +import android.preference.DialogPreference; +import android.preference.Preference; +import android.util.AttributeSet; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.TextView; +import android.widget.EditText; +import android.widget.NumberPicker; +import com.cyanogenmod.trebuchet.R; + +/* + * @author Danesh + * @author nebkat + */ + +public class DoubleNumberPickerPreference extends DialogPreference { + private int mMin1, mMax1, mDefault1; + private int mMin2, mMax2, mDefault2; + + private String mMaxExternalKey1, mMinExternalKey1; + private String mMaxExternalKey2, mMinExternalKey2; + + private String mPickerTitle1; + private String mPickerTitle2; + + private NumberPicker mNumberPicker1; + private NumberPicker mNumberPicker2; + + public DoubleNumberPickerPreference(Context context, AttributeSet attrs) { + super(context, attrs); + TypedArray dialogType = context.obtainStyledAttributes(attrs, + com.android.internal.R.styleable.DialogPreference, 0, 0); + TypedArray doubleNumberPickerType = context.obtainStyledAttributes(attrs, + R.styleable.DoubleNumberPickerPreference, 0, 0); + + mMaxExternalKey1 = doubleNumberPickerType.getString(R.styleable.DoubleNumberPickerPreference_maxExternal1); + mMinExternalKey1 = doubleNumberPickerType.getString(R.styleable.DoubleNumberPickerPreference_minExternal1); + mMaxExternalKey2 = doubleNumberPickerType.getString(R.styleable.DoubleNumberPickerPreference_maxExternal2); + mMinExternalKey2 = doubleNumberPickerType.getString(R.styleable.DoubleNumberPickerPreference_minExternal2); + + mPickerTitle1 = doubleNumberPickerType.getString(R.styleable.DoubleNumberPickerPreference_pickerTitle1); + mPickerTitle2 = doubleNumberPickerType.getString(R.styleable.DoubleNumberPickerPreference_pickerTitle2); + + mMax1 = doubleNumberPickerType.getInt(R.styleable.DoubleNumberPickerPreference_max1, 5); + mMin1 = doubleNumberPickerType.getInt(R.styleable.DoubleNumberPickerPreference_min1, 0); + mMax2 = doubleNumberPickerType.getInt(R.styleable.DoubleNumberPickerPreference_max2, 5); + mMin2 = doubleNumberPickerType.getInt(R.styleable.DoubleNumberPickerPreference_min2, 0); + + mDefault1 = doubleNumberPickerType.getInt(R.styleable.DoubleNumberPickerPreference_defaultValue1, mMin1); + mDefault2 = doubleNumberPickerType.getInt(R.styleable.DoubleNumberPickerPreference_defaultValue2, mMin2); + + dialogType.recycle(); + doubleNumberPickerType.recycle(); + } + + @Override + protected View onCreateDialogView() { + int max1 = mMax1; + int min1 = mMin1; + int max2 = mMax2; + int min2 = mMin2; + + // External values + if (mMaxExternalKey1 != null) { + max1 = getSharedPreferences().getInt(mMaxExternalKey1, mMax1); + } + if (mMinExternalKey1 != null) { + min1 = getSharedPreferences().getInt(mMinExternalKey1, mMin1); + } + if (mMaxExternalKey2 != null) { + max2 = getSharedPreferences().getInt(mMaxExternalKey2, mMax2); + } + if (mMinExternalKey2 != null) { + min2 = getSharedPreferences().getInt(mMinExternalKey2, mMin2); + } + + LayoutInflater inflater = + (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); + View view = inflater.inflate(R.layout.double_number_picker_dialog, null); + + mNumberPicker1 = (NumberPicker) view.findViewById(R.id.number_picker_1); + mNumberPicker2 = (NumberPicker) view.findViewById(R.id.number_picker_2); + + if (mNumberPicker1 == null || mNumberPicker2 == null) { + throw new RuntimeException("mNumberPicker1 or mNumberPicker2 is null!"); + } + + // Initialize state + mNumberPicker1.setWrapSelectorWheel(false); + mNumberPicker1.setMaxValue(max1); + mNumberPicker1.setMinValue(min1); + mNumberPicker1.setValue(getPersistedValue(1)); + mNumberPicker2.setWrapSelectorWheel(false); + mNumberPicker2.setMaxValue(max2); + mNumberPicker2.setMinValue(min2); + mNumberPicker2.setValue(getPersistedValue(2)); + + // Titles + TextView pickerTitle1 = (TextView) view.findViewById(R.id.picker_title_1); + TextView pickerTitle2 = (TextView) view.findViewById(R.id.picker_title_2); + + if (pickerTitle1 != null && pickerTitle2 != null) { + pickerTitle1.setText(mPickerTitle1); + pickerTitle2.setText(mPickerTitle2); + } + + // No keyboard popup + EditText textInput1 = (EditText) mNumberPicker1.findViewById(com.android.internal.R.id.numberpicker_input); + EditText textInput2 = (EditText) mNumberPicker2.findViewById(com.android.internal.R.id.numberpicker_input); + if (textInput1 != null && textInput2 != null) { + textInput1.setCursorVisible(false); + textInput1.setFocusable(false); + textInput1.setFocusableInTouchMode(false); + textInput2.setCursorVisible(false); + textInput2.setFocusable(false); + textInput2.setFocusableInTouchMode(false); + } + + return view; + } + + private int getPersistedValue(int value) { + String[] values = getPersistedString(mDefault1 + "|" + mDefault2).split("\\|"); + if (value == 1) { + try { + return Integer.parseInt(values[0]); + } catch (NumberFormatException e) { + return mDefault1; + } + } else { + try { + return Integer.parseInt(values[1]); + } catch (NumberFormatException e) { + return mDefault2; + } + } + } + + @Override + protected void onDialogClosed(boolean positiveResult) { + if (positiveResult) { + persistString(mNumberPicker1.getValue() + "|" + mNumberPicker2.getValue());; + } + } + + public void setMin1(int min) { + mMin1 = min; + } + public void setMax1(int max) { + mMax1 = max; + } + public void setMin2(int min) { + mMin2 = min; + } + public void setMax2(int max) { + mMax2 = max; + } + public void setDefault1(int def) { + mDefault1 = def; + } + public void setDefault2(int def) { + mDefault2 = def; + } + +} |