Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c7a226c2 authored by Lucas Dupin's avatar Lucas Dupin Committed by android-build-merger
Browse files

Merge "Setting to change sysui theme" into pi-dev

am: 71792063

Change-Id: I34f0fa82b9b9ebb9d6ba7707363a5b948c9f0421
parents bc375150 71792063
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -1120,6 +1120,20 @@
        <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>
+10 −1
Original line number Diff line number Diff line
@@ -9870,12 +9870,21 @@
    </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] -->
+8 −1
Original line number Diff line number Diff line
@@ -131,9 +131,16 @@

    <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"
+73 −0
Original line number Diff line number Diff line
/*
 * 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];
    }
}
+88 −0
Original line number Diff line number Diff line
/*
 * 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