summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDanesh M <daneshm90@gmail.com>2011-12-14 15:07:14 +0000
committernebkat <nebkat@gmail.com>2011-12-18 18:56:48 +0000
commit5c476be40ec460a172d34a73bbf15bebf44fd1c0 (patch)
treea69ed2ddafcdd44ecf99437f26505b87b4753c40
parentdc3a9242056b1c35778affc064204b6168023a99 (diff)
downloadandroid_packages_apps_Trebuchet-5c476be40ec460a172d34a73bbf15bebf44fd1c0.tar.gz
android_packages_apps_Trebuchet-5c476be40ec460a172d34a73bbf15bebf44fd1c0.tar.bz2
android_packages_apps_Trebuchet-5c476be40ec460a172d34a73bbf15bebf44fd1c0.zip
Preferences: NumberPickerPreference
Change-Id: I1888fe530a71af1e5d3b015d4a416c98e20ee3e0
-rwxr-xr-xres/layout/number_picker_dialog.xml28
-rw-r--r--res/values/attrs.xml7
-rw-r--r--src/com/android/launcher2/preference/NumberPickerPreference.java126
3 files changed, 161 insertions, 0 deletions
diff --git a/res/layout/number_picker_dialog.xml b/res/layout/number_picker_dialog.xml
new file mode 100755
index 000000000..2f87bc86f
--- /dev/null
+++ b/res/layout/number_picker_dialog.xml
@@ -0,0 +1,28 @@
+<?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="vertical"
+ android:gravity="center_horizontal"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent">
+
+ <NumberPicker
+ android:id="@+id/number_picker"
+ android:layout_centerInParent="true"
+ android:layout_width="100dip"
+ android:layout_height="match_parent" />
+
+</LinearLayout>
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
index 125856287..8eaabfea3 100644
--- a/res/values/attrs.xml
+++ b/res/values/attrs.xml
@@ -164,4 +164,11 @@
<attr name="title" format="reference" />
<attr name="uri" format="string" />
</declare-styleable>
+
+ <declare-styleable name="NumberPickerPreference">
+ <attr name="max" format="integer" />
+ <attr name="min" format="integer" />
+ <attr name="maxExternal" format="string" />
+ <attr name="minExternal" format="string" />
+ </declare-styleable>
</resources>
diff --git a/src/com/android/launcher2/preference/NumberPickerPreference.java b/src/com/android/launcher2/preference/NumberPickerPreference.java
new file mode 100644
index 000000000..32e006f09
--- /dev/null
+++ b/src/com/android/launcher2/preference/NumberPickerPreference.java
@@ -0,0 +1,126 @@
+/*
+ * 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.android.launcher2.preference;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.preference.Preference;
+import android.preference.DialogPreference;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.LinearLayout;
+import android.widget.NumberPicker;
+
+import com.android.launcher.R;
+
+/*
+ * @author Danesh
+ * @author nebkat
+ */
+
+public class NumberPickerPreference extends DialogPreference {
+ private int mMin, mMax, mDefault;
+
+ private String mMaxExternalKey, mMinExternalKey;
+ private Preference mMaxExternalPreference, mMinExternalPreference;
+
+ private NumberPicker mNumberPicker;
+
+ public NumberPickerPreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ TypedArray dialogType = context.obtainStyledAttributes(attrs,
+ com.android.internal.R.styleable.DialogPreference, 0, 0);
+ TypedArray numberPickerType = context.obtainStyledAttributes(attrs,
+ R.styleable.NumberPickerPreference, 0, 0);
+
+ mMaxExternalKey = numberPickerType.getString(R.styleable.NumberPickerPreference_maxExternal);
+ mMinExternalKey = numberPickerType.getString(R.styleable.NumberPickerPreference_minExternal);
+
+ mMax = numberPickerType.getInt(R.styleable.NumberPickerPreference_max, 5);
+ mMin = numberPickerType.getInt(R.styleable.NumberPickerPreference_min, 0);
+
+ mDefault = dialogType.getInt(com.android.internal.R.styleable.Preference_defaultValue, mMin);
+
+ dialogType.recycle();
+ numberPickerType.recycle();
+ }
+
+
+ protected void onAttachedToActivity() {
+ // External values
+ if (mMaxExternalKey != null) {
+ Preference maxPreference = findPreferenceInHierarchy(mMaxExternalKey);
+ if (maxPreference != null) {
+ if (maxPreference instanceof NumberPickerPreference) {
+ mMaxExternalPreference = maxPreference;
+ }
+ }
+ }
+ if (mMinExternalKey != null) {
+ Preference minPreference = findPreferenceInHierarchy(mMinExternalKey);
+ if (minPreference != null) {
+ if (minPreference instanceof NumberPickerPreference) {
+ mMinExternalPreference = minPreference;
+ }
+ }
+ }
+ }
+
+ @Override
+ protected View onCreateDialogView() {
+ int max = mMax;
+ int min = mMin;
+
+ // External values
+ if (mMaxExternalKey != null && mMaxExternalPreference != null) {
+ max = mMaxExternalPreference.getSharedPreferences().getInt(mMaxExternalKey, mMax);
+ }
+ if (mMinExternalKey != null && mMinExternalPreference != null) {
+ min = mMinExternalPreference.getSharedPreferences().getInt(mMinExternalKey, mMin);
+ }
+
+ LayoutInflater inflater =
+ (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ View view = inflater.inflate(R.layout.number_picker_dialog, null);
+
+ mNumberPicker = (NumberPicker) view.findViewById(R.id.number_picker);
+
+ // Initialize state
+ mNumberPicker.setMaxValue(max);
+ mNumberPicker.setMinValue(min);
+ mNumberPicker.setValue(getPersistedInt(mDefault));
+ mNumberPicker.setWrapSelectorWheel(false);
+
+ // No keyboard popup
+ EditText textInput = (EditText) mNumberPicker.findViewById(com.android.internal.R.id.numberpicker_input);
+ textInput.setCursorVisible(false);
+ textInput.setFocusable(false);
+ textInput.setFocusableInTouchMode(false);
+
+ return view;
+ }
+
+ @Override
+ protected void onDialogClosed(boolean positiveResult) {
+ if (positiveResult) {
+ persistInt(mNumberPicker.getValue());
+ }
+ }
+
+}