<item>no</item>
</string-array>
+ <!-- Titles for SystemUI theme preference. -->
+ <string-array name="systemui_theme_entries" >
+ <item>@string/systemui_theme_wallpaper</item>
+ <item>@string/systemui_theme_light</item>
+ <item>@string/systemui_theme_dark</item>
+ </string-array>
+
+ <!-- Values for SystemUI theme preference. -->
+ <string-array name="systemui_theme_values" translatable="false" >
+ <item>0</item>
+ <item>1</item>
+ <item>2</item>
+ </string-array>
+
<string-array name="gesture_prevent_ringing_entries" translatable="false">
<item>@string/prevent_ringing_option_vibrate</item>
<item>@string/prevent_ringing_option_mute</item>
</string>
<!-- Name of setting for switching device theme [CHAR LIMIT=60] -->
- <string name="device_theme">Device theme</string>
+ <string name="color_theme">Color theme</string>
<!-- Name of default device theme [CHAR LIMIT=60] -->
<string name="default_theme">Default</string>
<!-- Temporary reboot string, will be removed -->
<string name="change_theme_reboot" translatable="false">Changing the theme requires a restart.</string>
+ <!-- Name of setting for switching the SystemUI theme [CHAR LIMIT=60] -->
+ <string name="device_theme">Device theme</string>
+ <!-- When SystemUI theme is chosen based on the wallpaper color [CHAR LIMIT=60] -->
+ <string name="systemui_theme_wallpaper">Automatic (based on wallpaper)</string>
+ <!-- When SystemUI theme is light [CHAR LIMIT=60] -->
+ <string name="systemui_theme_light">Light</string>
+ <!-- When SystemUI theme is dark [CHAR LIMIT=60] -->
+ <string name="systemui_theme_dark">Dark</string>
+
<!-- Switch label to show operator name in the status bar [CHAR LIMIT=60] -->
<string name="show_operator_name_title">Network name</string>
<!-- Switch summary to show operator name in the status bar [CHAR LIMIT=NONE] -->
<ListPreference
android:key="theme"
- android:title="@string/device_theme"
+ android:title="@string/color_theme"
android:summary="@string/summary_placeholder" />
+ <ListPreference
+ android:key="systemui_theme"
+ android:title="@string/device_theme"
+ android:entries="@array/systemui_theme_entries"
+ android:entryValues="@array/systemui_theme_values"
+ settings:controller="com.android.settings.display.SystemUiThemePreferenceController" />
+
<Preference
android:key="vr_display_pref"
android:title="@string/display_vr_pref_title"
--- /dev/null
+/*
+ * Copyright (C) 2018 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 static android.provider.Settings.Secure.THEME_MODE;
+
+import android.content.Context;
+import android.provider.Settings;
+import android.support.v7.preference.ListPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+import android.util.FeatureFlagUtils;
+
+import com.android.settings.core.BasePreferenceController;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.core.AbstractPreferenceController;
+
+/**
+ * Setting where user can pick if SystemUI will be light, dark or try to match
+ * the wallpaper colors.
+ */
+public class SystemUiThemePreferenceController extends BasePreferenceController
+ implements Preference.OnPreferenceChangeListener {
+
+ private ListPreference mSystemUiThemePref;
+
+ public SystemUiThemePreferenceController(Context context, String preferenceKey) {
+ super(context, preferenceKey);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ boolean enabled = FeatureFlagUtils.isEnabled(mContext, "settings_systemui_theme");
+ return enabled ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ mSystemUiThemePref = (ListPreference) screen.findPreference(getPreferenceKey());
+ int value = Settings.Secure.getInt(mContext.getContentResolver(), THEME_MODE, 0);
+ mSystemUiThemePref.setValue(Integer.toString(value));
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ int value = Integer.parseInt((String) newValue);
+ Settings.Secure.putInt(mContext.getContentResolver(), THEME_MODE, value);
+ refreshSummary(preference);
+ return true;
+ }
+
+ @Override
+ public CharSequence getSummary() {
+ int value = Settings.Secure.getInt(mContext.getContentResolver(), THEME_MODE, 0);
+ int index = mSystemUiThemePref.findIndexOfValue(Integer.toString(value));
+ return mSystemUiThemePref.getEntries()[index];
+ }
+}
--- /dev/null
+/*
+ * Copyright (C) 2018 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 static android.provider.Settings.Secure.THEME_MODE;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.provider.Settings;
+import android.support.v7.preference.ListPreference;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+public class SystemUiThemePreferenceControllerTest {
+
+ @Mock
+ private PreferenceScreen mPreferenceScreen;
+ @Mock
+ private ListPreference mListPreference;
+ private Context mContext;
+ private SystemUiThemePreferenceController mController;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ mContext = RuntimeEnvironment.application;
+ when(mPreferenceScreen.findPreference(anyString())).thenReturn(mListPreference);
+ CharSequence[] entries = mContext.getResources().getStringArray(
+ R.array.systemui_theme_entries);
+ when(mListPreference.getEntries()).thenReturn(entries);
+ mController = spy(new SystemUiThemePreferenceController(mContext, "systemui_theme"));
+ }
+
+ @Test
+ public void displayPreference_readsSetting() {
+ Settings.Secure.putInt(mContext.getContentResolver(), THEME_MODE, 2);
+ mController.displayPreference(mPreferenceScreen);
+ verify(mListPreference).setValue(eq("2"));
+ }
+
+ @Test
+ public void onPreferenceChange_writesSetting() {
+ Settings.Secure.putInt(mContext.getContentResolver(), THEME_MODE, 2);
+ mController.displayPreference(mPreferenceScreen);
+ mController.onPreferenceChange(mListPreference, "0");
+ int value = Settings.Secure.getInt(mContext.getContentResolver(), THEME_MODE, 2);
+ assertThat(value).isEqualTo(0);
+ }
+
+ @Test
+ public void onPreferenceChange_updatesSummary() {
+ mController.displayPreference(mPreferenceScreen);
+ mController.onPreferenceChange(mListPreference, "0");
+ verify(mController).getSummary();
+ }
+
+}
\ No newline at end of file