diff --git a/res/xml/battery_saver_settings.xml b/res/xml/battery_saver_settings.xml
index 1720c73..52f6793 100644
--- a/res/xml/battery_saver_settings.xml
+++ b/res/xml/battery_saver_settings.xml
@@ -22,6 +22,6 @@
     <DropDownPreference
             android:key="turn_on_automatically"
             android:title="@string/battery_saver_turn_on_automatically_title"
-            android:summary="%s" />
+            android:summary="@string/summary_placeholder" />
 
 </PreferenceScreen>
diff --git a/res/xml/sound_settings.xml b/res/xml/sound_settings.xml
index d288a9d..33c1b0a 100644
--- a/res/xml/sound_settings.xml
+++ b/res/xml/sound_settings.xml
@@ -124,7 +124,7 @@
         <DropDownPreference
           android:key="dock_audio_media"
           android:title="@string/dock_audio_media_title"
-          android:summary="%s" />
+          android:summary="@string/summary_placeholder" />
 
         <!-- Boot sounds -->
         <SwitchPreference
@@ -135,7 +135,7 @@
         <DropDownPreference
           android:key="emergency_tone"
           android:title="@string/emergency_tone_title"
-          android:summary="%s" />
+          android:summary="@string/summary_placeholder" />
 
         <com.android.settingslib.RestrictedPreference
           android:key="cell_broadcast_settings"
diff --git a/src/com/android/settings/fuelgauge/BatterySaverSettings.java b/src/com/android/settings/fuelgauge/BatterySaverSettings.java
index 6b7ddf9..45d0db2 100644
--- a/src/com/android/settings/fuelgauge/BatterySaverSettings.java
+++ b/src/com/android/settings/fuelgauge/BatterySaverSettings.java
@@ -99,7 +99,6 @@
             }
         };
         mTriggerPref.init(this);
-
         mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
     }
 
diff --git a/src/com/android/settings/notification/SettingPref.java b/src/com/android/settings/notification/SettingPref.java
index 18efc33..cdbd5b3 100644
--- a/src/com/android/settings/notification/SettingPref.java
+++ b/src/com/android/settings/notification/SettingPref.java
@@ -121,6 +121,19 @@
         if (mTwoState != null) {
             mTwoState.setChecked(val != 0);
         } else if (mDropDown != null) {
+            if (mValues != null) {
+                int index = 0;
+                for (int len = mValues.length; index < len; index++) {
+                    if (mValues[index] == val) {
+                        break;
+                    }
+                }
+
+                if (index < mValues.length) {
+                    CharSequence entry = mDropDown.getEntries()[index];
+                    mDropDown.setSummary(entry);
+                }
+            }
             mDropDown.setValue(Integer.toString(val));
         }
     }
diff --git a/tests/robotests/src/com/android/settings/notification/SettingPrefTest.java b/tests/robotests/src/com/android/settings/notification/SettingPrefTest.java
new file mode 100644
index 0000000..39f1377
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/notification/SettingPrefTest.java
@@ -0,0 +1,67 @@
+package com.android.settings.notification;
+
+import android.content.res.Resources;
+
+import android.content.Context;
+import android.provider.Settings;
+import android.support.v7.preference.DropDownPreference;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.spy;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class SettingPrefTest {
+
+    @Test
+    public void update_setsDropDownSummaryText() {
+        Context context = RuntimeEnvironment.application;
+        String testSetting = "test_setting";
+        int[] values = new int[] {1,2,3};
+        String[] entries = new String[] {"one", "two", "three"};
+        SettingPref settingPref =
+                spy(new SettingPref(SettingPref.TYPE_GLOBAL, "key", testSetting, 0, values) {
+                    @Override
+                    protected String getCaption(Resources res, int value) {
+                        return "temp";
+                    }
+                });
+        DropDownPreference dropdownPref = spy(new DropDownPreference(context));
+        dropdownPref.setEntries(entries);
+        settingPref.mDropDown = dropdownPref;
+        Settings.Global.putInt(context.getContentResolver(), testSetting, values[2]);
+
+        settingPref.update(context);
+
+        assertThat(settingPref.mDropDown.getSummary()).isEqualTo(entries[2]);
+    }
+
+    @Test
+    public void update_setsDropDownSummaryText_noMatch_noError() {
+        Context context = RuntimeEnvironment.application;
+        String testSetting = "test_setting";
+        int[] values = new int[] {1,2,3};
+        String[] entries = new String[] {"one", "two", "three"};
+        SettingPref settingPref =
+                spy(new SettingPref(SettingPref.TYPE_GLOBAL, "key", testSetting, 0, values) {
+                    @Override
+                    protected String getCaption(Resources res, int value) {
+                        return "temp";
+                    }
+                });
+        DropDownPreference dropdownPref = spy(new DropDownPreference(context));
+        dropdownPref.setEntries(entries);
+        settingPref.mDropDown = dropdownPref;
+        Settings.Global.putInt(context.getContentResolver(), testSetting, -1);
+
+        settingPref.update(context);
+
+        assertThat(settingPref.mDropDown.getSummary()).isNull();
+    }
+}
