Merge "Make Theme a DropDownPreference" into mnc-dev
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
index 248cf92..4b607be 100644
--- a/res/values/attrs.xml
+++ b/res/values/attrs.xml
@@ -113,4 +113,9 @@
     <!-- Confirm device credentials screen -->
     <attr name="confirmDeviceCredentialsSideMargin" format="dimension" />
     <attr name="confirmDeviceCredentialsTopMargin" format="dimension" />
+
+    <declare-styleable name="DropDownPreference">
+        <attr name="android:entries" />
+        <attr name="android:entryValues" />
+    </declare-styleable>
 </resources>
diff --git a/res/xml/development_prefs.xml b/res/xml/development_prefs.xml
index a24da21..fef2623 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" />
 
-    <ListPreference
+    <com.android.settings.DropDownPreference
         android:key="night_mode"
         android:title="@string/night_mode_title"
         android:summary="@string/night_mode_summary"
-        android:persistent="false"
         android:entries="@array/night_mode_entries"
         android:entryValues="@array/night_mode_values" />
 
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
index 4e9089d..0c527fa 100644
--- a/src/com/android/settings/DevelopmentSettings.java
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -265,7 +265,7 @@
 
     private SwitchPreference mShowAllANRs;
 
-    private ListPreference mNightModePreference;
+    private DropDownPreference mNightModePreference;
 
     private final ArrayList<Preference> mAllPrefs = new ArrayList<Preference>();
 
@@ -427,12 +427,26 @@
             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 @@
         } 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 8f8ec78..89e67a5 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 @@
                 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) {