diff --git a/src/com/android/settings/display/ThemePreferenceController.java b/src/com/android/settings/display/ThemePreferenceController.java
index da5b84a..e66e7ce 100644
--- a/src/com/android/settings/display/ThemePreferenceController.java
+++ b/src/com/android/settings/display/ThemePreferenceController.java
@@ -19,9 +19,11 @@
 import android.app.UiModeManager;
 import android.content.Context;
 import android.content.DialogInterface.OnClickListener;
+import android.support.annotation.VisibleForTesting;
 import android.support.v7.preference.ListPreference;
 import android.support.v7.preference.Preference;
 
+import android.text.TextUtils;
 import com.android.settings.R;
 import com.android.settings.core.PreferenceController;
 import com.android.settings.core.instrumentation.MetricsFeatureProvider;
@@ -59,17 +61,18 @@
     @Override
     public void updateState(Preference preference) {
         ListPreference pref = (ListPreference) preference;
-        String[] options = mUiModeManager.getAvailableThemes();
+        String[] options = getAvailableThemes();
         for (int i = 0; i < options.length; i++) {
             options[i] = nullToDefault(options[i]);
         }
         pref.setEntries(options);
         pref.setEntryValues(options);
-        String theme = mUiModeManager.getTheme();
-        if (theme == null) {
+        String theme = getCurrentTheme();
+        if (TextUtils.isEmpty(theme)) {
             theme = mContext.getString(R.string.default_theme);
+            pref.setSummary(theme);
         }
-        pref.setValue(nullToDefault(theme));
+        pref.setValue(theme);
     }
 
     @Override
@@ -92,12 +95,22 @@
 
     @Override
     public boolean isAvailable() {
-        String[] themes = mUiModeManager.getAvailableThemes();
+        String[] themes = getAvailableThemes();
         return themes != null && themes.length > 1;
     }
 
+    @VisibleForTesting
+    String getCurrentTheme() {
+        return mUiModeManager.getTheme();
+    }
+
+    @VisibleForTesting
+    String[] getAvailableThemes() {
+        return mUiModeManager.getAvailableThemes();
+    }
+
     private String nullToDefault(String input) {
-        if (input == null) {
+        if (TextUtils.isEmpty(input)) {
             return mContext.getString(R.string.default_theme);
         }
         return input;
diff --git a/tests/robotests/src/com/android/settings/display/ThemePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/ThemePreferenceControllerTest.java
new file mode 100644
index 0000000..fe3e7fd
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/display/ThemePreferenceControllerTest.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2017 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.
+ */
+
+package com.android.settings.display;
+
+import android.content.Context;
+import android.support.v7.preference.ListPreference;
+import com.android.settings.R;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class ThemePreferenceControllerTest {
+
+    @Mock
+    private ListPreference mPreference;
+    @Mock
+    private Context mContext;
+
+    private ThemePreferenceController mController;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mController = spy(new ThemePreferenceController(mContext));
+    }
+
+    @Test
+    public void updateState_nullTheme_shouldSetSummaryToDefault() {
+        final String[] themes = {"Theme1", "Theme2"};
+        doReturn(null).when(mController).getCurrentTheme();
+        doReturn(themes).when(mController).getAvailableThemes();
+
+        mController.updateState(mPreference);
+
+        verify(mPreference).setSummary(mContext.getString(R.string.default_theme));
+    }
+
+    @Test
+    public void updateState_themeSet_shouldSetPreferenceValue() {
+        final String[] themes = {"Theme1", "Theme2"};
+        doReturn("Theme1").when(mController).getCurrentTheme();
+        doReturn(themes).when(mController).getAvailableThemes();
+
+        mController.updateState(mPreference);
+
+        verify(mPreference).setValue("Theme1");
+    }
+}
