From 3d95908e0292c4121d1e127968a2ed2efb484d4a Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Mon, 1 Jun 2015 15:12:22 -0400 Subject: [PATCH] Make Theme a DropDownPreference Also make DropDownPreference support xml lists defined the same way as ListPreferences. Bug: 21300431 Change-Id: I1698e8ddcd6134034c3367a6afe36f9740e9efec --- res/values/attrs.xml | 5 +++ res/xml/development_prefs.xml | 3 +- .../android/settings/DevelopmentSettings.java | 32 +++++++++++-------- .../android/settings/DropDownPreference.java | 13 +++++++- 4 files changed, 36 insertions(+), 17 deletions(-) diff --git a/res/values/attrs.xml b/res/values/attrs.xml index 248cf92274f..4b607bedb06 100644 --- a/res/values/attrs.xml +++ b/res/values/attrs.xml @@ -113,4 +113,9 @@ + + + + + diff --git a/res/xml/development_prefs.xml b/res/xml/development_prefs.xml index a24da212234..fef2623f801 100644 --- a/res/xml/development_prefs.xml +++ b/res/xml/development_prefs.xml @@ -65,11 +65,10 @@ android:persistent="false" android:title="@string/system_ui_settings" /> - diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java index 4e9089d5dc8..0c527fa87dd 100644 --- a/src/com/android/settings/DevelopmentSettings.java +++ b/src/com/android/settings/DevelopmentSettings.java @@ -265,7 +265,7 @@ public class DevelopmentSettings extends SettingsPreferenceFragment private SwitchPreference mShowAllANRs; - private ListPreference mNightModePreference; + private DropDownPreference mNightModePreference; private final ArrayList mAllPrefs = new ArrayList(); @@ -427,12 +427,26 @@ public class DevelopmentSettings extends SettingsPreferenceFragment removePreferenceForProduction(hdcpChecking); } - mNightModePreference = (ListPreference) findPreference(KEY_NIGHT_MODE); + mNightModePreference = (DropDownPreference) findPreference(KEY_NIGHT_MODE); final UiModeManager uiManager = (UiModeManager) getSystemService( Context.UI_MODE_SERVICE); final int currentNightMode = uiManager.getNightMode(); - mNightModePreference.setValue(String.valueOf(currentNightMode)); - mNightModePreference.setOnPreferenceChangeListener(this); + mNightModePreference.setSelectedValue(String.valueOf(currentNightMode)); + mNightModePreference.setCallback(new DropDownPreference.Callback() { + @Override + public boolean onItemSelected(int pos, Object newValue) { + try { + final int value = Integer.parseInt((String) newValue); + final UiModeManager uiManager = (UiModeManager) getSystemService( + Context.UI_MODE_SERVICE); + uiManager.setNightMode(value); + return true; + } catch (NumberFormatException e) { + Log.e(TAG, "could not persist night mode setting", e); + return false; + } + } + }); } private ListPreference addListPreference(String prefKey) { @@ -1808,16 +1822,6 @@ public class DevelopmentSettings extends SettingsPreferenceFragment } else if (preference == mTunerUiPref) { writeTweakUi(newValue); return true; - } else if (preference == mNightModePreference) { - try { - final int value = Integer.parseInt((String) newValue); - final UiModeManager uiManager = (UiModeManager) getSystemService( - Context.UI_MODE_SERVICE); - uiManager.setNightMode(value); - } catch (NumberFormatException e) { - Log.e(TAG, "could not persist night mode setting", e); - } - return true; } return false; } diff --git a/src/com/android/settings/DropDownPreference.java b/src/com/android/settings/DropDownPreference.java index 8f8ec78c1e4..89e67a5d4d1 100644 --- a/src/com/android/settings/DropDownPreference.java +++ b/src/com/android/settings/DropDownPreference.java @@ -17,14 +17,15 @@ package com.android.settings; import android.content.Context; +import android.content.res.TypedArray; import android.preference.Preference; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; +import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ArrayAdapter; import android.widget.Spinner; -import android.widget.AdapterView.OnItemSelectedListener; import java.util.ArrayList; @@ -69,6 +70,16 @@ public class DropDownPreference extends Preference { return true; } }); + + // Support XML specification like ListPreferences do. + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DropDownPreference); + CharSequence[] entries = a.getTextArray(R.styleable.DropDownPreference_android_entries); + CharSequence[] values = a.getTextArray(R.styleable.DropDownPreference_android_entryValues); + if (entries != null && values != null) { + for (int i= 0; i < entries.length; i++) { + addItem(entries[i].toString(), values[i]); + } + } } public void setDropDownWidth(int dimenResId) {