Commit 0998bbb0 authored by Natalie Chouinard's avatar Natalie Chouinard Committed by Commit Bot

[Android] Rename Themes Settings classes

Refactor only, no user-visible changes.

Following the naming conventions decided in
go/clank-preferences-refactor, this change replaces the "Preferences"
suffix in the Themes Settings fragment.

Also un-nest ThemeSetting inner class for clarity, and rename string
resource.

Bug: 1030446
Change-Id: I9813e0d8a3060d29dcb7e73ad2e3fe02c311b1cc
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1958828
Commit-Queue: Natalie Chouinard <chouinard@chromium.org>
Reviewed-by: default avatarBrandon Wylie <wylieb@chromium.org>
Reviewed-by: default avatarBoris Sazonov <bsazonov@chromium.org>
Cr-Commit-Position: refs/heads/master@{#723461}
parent 32c89c20
...@@ -1443,7 +1443,8 @@ chrome_java_sources = [ ...@@ -1443,7 +1443,8 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/settings/privacy/PrivacySettings.java", "java/src/org/chromium/chrome/browser/settings/privacy/PrivacySettings.java",
"java/src/org/chromium/chrome/browser/settings/privacy/PrivacyPreferencesManager.java", "java/src/org/chromium/chrome/browser/settings/privacy/PrivacyPreferencesManager.java",
"java/src/org/chromium/chrome/browser/settings/themes/RadioButtonGroupThemePreference.java", "java/src/org/chromium/chrome/browser/settings/themes/RadioButtonGroupThemePreference.java",
"java/src/org/chromium/chrome/browser/settings/themes/ThemePreferences.java", "java/src/org/chromium/chrome/browser/settings/themes/ThemeSettingsFragment.java",
"java/src/org/chromium/chrome/browser/settings/themes/ThemeType.java",
"java/src/org/chromium/chrome/browser/settings/website/AddExceptionPreference.java", "java/src/org/chromium/chrome/browser/settings/website/AddExceptionPreference.java",
"java/src/org/chromium/chrome/browser/settings/website/ChosenObjectInfo.java", "java/src/org/chromium/chrome/browser/settings/website/ChosenObjectInfo.java",
"java/src/org/chromium/chrome/browser/settings/website/ChosenObjectPreferences.java", "java/src/org/chromium/chrome/browser/settings/website/ChosenObjectPreferences.java",
......
...@@ -421,7 +421,7 @@ chrome_test_java_sources = [ ...@@ -421,7 +421,7 @@ chrome_test_java_sources = [
"javatests/src/org/chromium/chrome/browser/settings/privacy/ClearBrowsingDataFragmentBasicTest.java", "javatests/src/org/chromium/chrome/browser/settings/privacy/ClearBrowsingDataFragmentBasicTest.java",
"javatests/src/org/chromium/chrome/browser/settings/privacy/ClearBrowsingDataFragmentTest.java", "javatests/src/org/chromium/chrome/browser/settings/privacy/ClearBrowsingDataFragmentTest.java",
"javatests/src/org/chromium/chrome/browser/settings/privacy/PrivacyPreferencesManagerNativeTest.java", "javatests/src/org/chromium/chrome/browser/settings/privacy/PrivacyPreferencesManagerNativeTest.java",
"javatests/src/org/chromium/chrome/browser/settings/themes/ThemePreferencesTest.java", "javatests/src/org/chromium/chrome/browser/settings/themes/ThemeSettingsFragmentTest.java",
"javatests/src/org/chromium/chrome/browser/settings/website/ManageSpaceActivityTest.java", "javatests/src/org/chromium/chrome/browser/settings/website/ManageSpaceActivityTest.java",
"javatests/src/org/chromium/chrome/browser/settings/website/PermissionInfoTest.java", "javatests/src/org/chromium/chrome/browser/settings/website/PermissionInfoTest.java",
"javatests/src/org/chromium/chrome/browser/settings/website/SiteSettingsPreferencesTest.java", "javatests/src/org/chromium/chrome/browser/settings/website/SiteSettingsPreferencesTest.java",
......
...@@ -61,10 +61,10 @@ ...@@ -61,10 +61,10 @@
android:order="10" android:order="10"
android:title="@string/options_homepage_title"/> android:title="@string/options_homepage_title"/>
<Preference <Preference
android:fragment="org.chromium.chrome.browser.settings.themes.ThemePreferences" android:fragment="org.chromium.chrome.browser.settings.themes.ThemeSettingsFragment"
android:key="ui_theme" android:key="ui_theme"
android:order="11" android:order="11"
android:title="@string/prefs_themes" /> android:title="@string/theme_settings" />
<PreferenceCategory <PreferenceCategory
android:key="advanced_section" android:key="advanced_section"
......
...@@ -15,7 +15,7 @@ import org.chromium.base.ApplicationState; ...@@ -15,7 +15,7 @@ import org.chromium.base.ApplicationState;
import org.chromium.base.ApplicationStatus; import org.chromium.base.ApplicationStatus;
import org.chromium.base.ObserverList; import org.chromium.base.ObserverList;
import org.chromium.chrome.browser.preferences.SharedPreferencesManager; import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
import org.chromium.chrome.browser.settings.themes.ThemePreferences; import org.chromium.chrome.browser.settings.themes.ThemeType;
/** /**
* Maintains and provides the night mode state for the entire application. * Maintains and provides the night mode state for the entire application.
...@@ -128,10 +128,10 @@ class GlobalNightModeStateController implements NightModeStateProvider, ...@@ -128,10 +128,10 @@ class GlobalNightModeStateController implements NightModeStateProvider,
private void updateNightMode() { private void updateNightMode() {
boolean powerSaveModeOn = mPowerSaveModeMonitor.powerSavingIsOn(); boolean powerSaveModeOn = mPowerSaveModeMonitor.powerSavingIsOn();
final int themeSetting = NightModeUtils.getThemeSetting(); final int theme = NightModeUtils.getThemeSetting();
final boolean newNightModeOn = themeSetting == ThemePreferences.ThemeSetting.SYSTEM_DEFAULT final boolean newNightModeOn = theme == ThemeType.SYSTEM_DEFAULT
&& (powerSaveModeOn || mSystemNightModeMonitor.isSystemNightModeOn()) && (powerSaveModeOn || mSystemNightModeMonitor.isSystemNightModeOn())
|| themeSetting == ThemePreferences.ThemeSetting.DARK; || theme == ThemeType.DARK;
if (mNightModeOn != null && newNightModeOn == mNightModeOn) return; if (mNightModeOn != null && newNightModeOn == mNightModeOn) return;
mNightModeOn = newNightModeOn; mNightModeOn = newNightModeOn;
...@@ -140,9 +140,9 @@ class GlobalNightModeStateController implements NightModeStateProvider, ...@@ -140,9 +140,9 @@ class GlobalNightModeStateController implements NightModeStateProvider,
for (Observer observer : mObservers) observer.onNightModeStateChanged(); for (Observer observer : mObservers) observer.onNightModeStateChanged();
NightModeMetrics.recordNightModeState(mNightModeOn); NightModeMetrics.recordNightModeState(mNightModeOn);
NightModeMetrics.recordThemePreferencesState(themeSetting); NightModeMetrics.recordThemePreferencesState(theme);
if (mNightModeOn) { if (mNightModeOn) {
NightModeMetrics.recordNightModeEnabledReason(themeSetting, powerSaveModeOn); NightModeMetrics.recordNightModeEnabledReason(theme, powerSaveModeOn);
} }
} }
} }
...@@ -8,7 +8,7 @@ import androidx.annotation.IntDef; ...@@ -8,7 +8,7 @@ import androidx.annotation.IntDef;
import org.chromium.base.metrics.CachedMetrics; import org.chromium.base.metrics.CachedMetrics;
import org.chromium.base.metrics.RecordUserAction; import org.chromium.base.metrics.RecordUserAction;
import org.chromium.chrome.browser.settings.themes.ThemePreferences; import org.chromium.chrome.browser.settings.themes.ThemeType;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
...@@ -26,8 +26,8 @@ public class NightModeMetrics { ...@@ -26,8 +26,8 @@ public class NightModeMetrics {
"Android.DarkTheme.EnabledReason", NightModeEnabledReason.NUM_ENTRIES); "Android.DarkTheme.EnabledReason", NightModeEnabledReason.NUM_ENTRIES);
private static final CachedMetrics.EnumeratedHistogramSample ENUMERATED_THEME_PREFERENCE_STATE = private static final CachedMetrics.EnumeratedHistogramSample ENUMERATED_THEME_PREFERENCE_STATE =
new CachedMetrics.EnumeratedHistogramSample("Android.DarkTheme.Preference.State", new CachedMetrics.EnumeratedHistogramSample(
ThemePreferences.ThemeSetting.NUM_ENTRIES); "Android.DarkTheme.Preference.State", ThemeType.NUM_ENTRIES);
/** /**
* Different ways that night mode (aka dark theme) can be enabled. This is used for histograms * Different ways that night mode (aka dark theme) can be enabled. This is used for histograms
...@@ -55,19 +55,18 @@ public class NightModeMetrics { ...@@ -55,19 +55,18 @@ public class NightModeMetrics {
/** /**
* Records the reason that night mode is turned on. * Records the reason that night mode is turned on.
* @param setting The {@link ThemePreferences.ThemeSetting} that the user selects. * @param theme The {@link ThemeType} that the user selects.
* @param powerSaveModeOn Whether or not power save mode is on. * @param powerSaveModeOn Whether or not power save mode is on.
*/ */
public static void recordNightModeEnabledReason( public static void recordNightModeEnabledReason(@ThemeType int theme, boolean powerSaveModeOn) {
@ThemePreferences.ThemeSetting int setting, boolean powerSaveModeOn) {
ENUMERATED_NIGHT_MODE_ENABLED_REASON.record( ENUMERATED_NIGHT_MODE_ENABLED_REASON.record(
calculateNightModeEnabledReason(setting, powerSaveModeOn)); calculateNightModeEnabledReason(theme, powerSaveModeOn));
} }
@NightModeEnabledReason @NightModeEnabledReason
private static int calculateNightModeEnabledReason( private static int calculateNightModeEnabledReason(
@ThemePreferences.ThemeSetting int setting, boolean powerSaveModeOn) { @ThemeType int theme, boolean powerSaveModeOn) {
if (setting == ThemePreferences.ThemeSetting.DARK) { if (theme == ThemeType.DARK) {
return NightModeEnabledReason.USER_PREFERENCE; return NightModeEnabledReason.USER_PREFERENCE;
} }
if (powerSaveModeOn) return NightModeEnabledReason.POWER_SAVE_MODE; if (powerSaveModeOn) return NightModeEnabledReason.POWER_SAVE_MODE;
...@@ -76,30 +75,30 @@ public class NightModeMetrics { ...@@ -76,30 +75,30 @@ public class NightModeMetrics {
/** /**
* Records the theme preference state on start up and when theme preference changes. * Records the theme preference state on start up and when theme preference changes.
* @param setting The new {@link ThemePreferences.ThemeSetting} that the user selects. * @param theme The new {@link ThemeType} that the user selects.
*/ */
public static void recordThemePreferencesState(@ThemePreferences.ThemeSetting int setting) { public static void recordThemePreferencesState(@ThemeType int theme) {
ENUMERATED_THEME_PREFERENCE_STATE.record(setting); ENUMERATED_THEME_PREFERENCE_STATE.record(theme);
} }
/** /**
* Records when user changes the theme preferences. * Records when user changes the theme preferences.
* @param setting The new {@link ThemePreferences.ThemeSetting} that the user selects. * @param theme The new {@link ThemeType} that the user selects.
*/ */
public static void recordThemePreferencesChanged(@ThemePreferences.ThemeSetting int setting) { public static void recordThemePreferencesChanged(@ThemeType int theme) {
switch (setting) { switch (theme) {
case ThemePreferences.ThemeSetting.SYSTEM_DEFAULT: case ThemeType.SYSTEM_DEFAULT:
RecordUserAction.record("Android.DarkTheme.Preference.SystemDefault"); RecordUserAction.record("Android.DarkTheme.Preference.SystemDefault");
break; break;
case ThemePreferences.ThemeSetting.LIGHT: case ThemeType.LIGHT:
RecordUserAction.record("Android.DarkTheme.Preference.Light"); RecordUserAction.record("Android.DarkTheme.Preference.Light");
break; break;
case ThemePreferences.ThemeSetting.DARK: case ThemeType.DARK:
RecordUserAction.record("Android.DarkTheme.Preference.Dark"); RecordUserAction.record("Android.DarkTheme.Preference.Dark");
break; break;
default: default:
assert false : "Theme preferences change should be recorded."; assert false : "Theme preferences change should be recorded.";
} }
recordThemePreferencesState(setting); recordThemePreferencesState(theme);
} }
} }
...@@ -19,7 +19,7 @@ import androidx.annotation.VisibleForTesting; ...@@ -19,7 +19,7 @@ import androidx.annotation.VisibleForTesting;
import org.chromium.chrome.browser.ChromeBaseAppCompatActivity; import org.chromium.chrome.browser.ChromeBaseAppCompatActivity;
import org.chromium.chrome.browser.flags.FeatureUtilities; import org.chromium.chrome.browser.flags.FeatureUtilities;
import org.chromium.chrome.browser.preferences.SharedPreferencesManager; import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
import org.chromium.chrome.browser.settings.themes.ThemePreferences; import org.chromium.chrome.browser.settings.themes.ThemeType;
/** /**
* Helper methods for supporting night mode. * Helper methods for supporting night mode.
...@@ -133,14 +133,13 @@ public class NightModeUtils { ...@@ -133,14 +133,13 @@ public class NightModeUtils {
/** /**
* The current theme setting, reflecting either the user setting or the default if the user has * The current theme setting, reflecting either the user setting or the default if the user has
* not explicitly set a preference. * not explicitly set a preference.
* @return The current theme setting. See {@link ThemePreferences.ThemeSetting}. * @return The current theme setting. See {@link ThemeType}.
*/ */
public static @ThemePreferences.ThemeSetting int getThemeSetting() { public static @ThemeType int getThemeSetting() {
int userSetting = SharedPreferencesManager.getInstance().readInt(UI_THEME_SETTING_KEY, -1); int userSetting = SharedPreferencesManager.getInstance().readInt(UI_THEME_SETTING_KEY, -1);
if (userSetting == -1) { if (userSetting == -1) {
return FeatureUtilities.isNightModeDefaultToLight() return FeatureUtilities.isNightModeDefaultToLight() ? ThemeType.LIGHT
? ThemePreferences.ThemeSetting.LIGHT : ThemeType.SYSTEM_DEFAULT;
: ThemePreferences.ThemeSetting.SYSTEM_DEFAULT;
} else { } else {
return userSetting; return userSetting;
} }
......
...@@ -19,7 +19,6 @@ import org.chromium.base.BuildInfo; ...@@ -19,7 +19,6 @@ import org.chromium.base.BuildInfo;
import org.chromium.chrome.R; import org.chromium.chrome.R;
import org.chromium.chrome.browser.ChromeFeatureList; import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.night_mode.NightModeMetrics; import org.chromium.chrome.browser.night_mode.NightModeMetrics;
import org.chromium.chrome.browser.settings.themes.ThemePreferences.ThemeSetting;
import org.chromium.chrome.browser.ui.widget.RadioButtonWithDescription; import org.chromium.chrome.browser.ui.widget.RadioButtonWithDescription;
import org.chromium.chrome.browser.ui.widget.RadioButtonWithDescriptionLayout; import org.chromium.chrome.browser.ui.widget.RadioButtonWithDescriptionLayout;
...@@ -34,7 +33,7 @@ import java.util.Collections; ...@@ -34,7 +33,7 @@ import java.util.Collections;
*/ */
public class RadioButtonGroupThemePreference public class RadioButtonGroupThemePreference
extends Preference implements RadioGroup.OnCheckedChangeListener { extends Preference implements RadioGroup.OnCheckedChangeListener {
private @ThemeSetting int mSetting; private @ThemeType int mSetting;
private RadioButtonWithDescription mSettingRadioButton; private RadioButtonWithDescription mSettingRadioButton;
private RadioButtonWithDescriptionLayout mGroup; private RadioButtonWithDescriptionLayout mGroup;
private ArrayList<RadioButtonWithDescription> mButtons; private ArrayList<RadioButtonWithDescription> mButtons;
...@@ -51,13 +50,13 @@ public class RadioButtonGroupThemePreference ...@@ -51,13 +50,13 @@ public class RadioButtonGroupThemePreference
// Initialize entries with null objects so that calling ArrayList#set() would not throw // Initialize entries with null objects so that calling ArrayList#set() would not throw
// java.lang.IndexOutOfBoundsException. // java.lang.IndexOutOfBoundsException.
mButtons = new ArrayList<>(Collections.nCopies(ThemeSetting.NUM_ENTRIES, null)); mButtons = new ArrayList<>(Collections.nCopies(ThemeType.NUM_ENTRIES, null));
} }
/** /**
* @param setting The initial setting for this Preference * @param setting The initial setting for this Preference
*/ */
public void initialize(@ThemeSetting int setting, boolean darkenWebsitesEnabled) { public void initialize(@ThemeType int setting, boolean darkenWebsitesEnabled) {
mSetting = setting; mSetting = setting;
mDarkenWebsitesEnabled = darkenWebsitesEnabled; mDarkenWebsitesEnabled = darkenWebsitesEnabled;
} }
...@@ -78,18 +77,16 @@ public class RadioButtonGroupThemePreference ...@@ -78,18 +77,16 @@ public class RadioButtonGroupThemePreference
mCheckBox.setChecked(mDarkenWebsitesEnabled); mCheckBox.setChecked(mDarkenWebsitesEnabled);
assert ThemeSetting.NUM_ENTRIES == 3; assert ThemeType.NUM_ENTRIES == 3;
mButtons.set(ThemeSetting.SYSTEM_DEFAULT, mButtons.set(ThemeType.SYSTEM_DEFAULT,
(RadioButtonWithDescription) holder.findViewById(R.id.system_default)); (RadioButtonWithDescription) holder.findViewById(R.id.system_default));
if (BuildInfo.isAtLeastQ()) { if (BuildInfo.isAtLeastQ()) {
mButtons.get(ThemeSetting.SYSTEM_DEFAULT) mButtons.get(ThemeType.SYSTEM_DEFAULT)
.setDescriptionText( .setDescriptionText(
getContext().getString(R.string.themes_system_default_summary_api_29)); getContext().getString(R.string.themes_system_default_summary_api_29));
} }
mButtons.set( mButtons.set(ThemeType.LIGHT, (RadioButtonWithDescription) holder.findViewById(R.id.light));
ThemeSetting.LIGHT, (RadioButtonWithDescription) holder.findViewById(R.id.light)); mButtons.set(ThemeType.DARK, (RadioButtonWithDescription) holder.findViewById(R.id.dark));
mButtons.set(
ThemeSetting.DARK, (RadioButtonWithDescription) holder.findViewById(R.id.dark));
mSettingRadioButton = mButtons.get(mSetting); mSettingRadioButton = mButtons.get(mSetting);
mSettingRadioButton.setChecked(true); mSettingRadioButton.setChecked(true);
...@@ -102,7 +99,7 @@ public class RadioButtonGroupThemePreference ...@@ -102,7 +99,7 @@ public class RadioButtonGroupThemePreference
private void positionCheckbox() { private void positionCheckbox() {
if (ChromeFeatureList.isEnabled( if (ChromeFeatureList.isEnabled(
ChromeFeatureList.DARKEN_WEBSITES_CHECKBOX_IN_THEMES_SETTING)) { ChromeFeatureList.DARKEN_WEBSITES_CHECKBOX_IN_THEMES_SETTING)) {
if (mSetting == ThemeSetting.SYSTEM_DEFAULT || mSetting == ThemeSetting.DARK) { if (mSetting == ThemeType.SYSTEM_DEFAULT || mSetting == ThemeType.DARK) {
mGroup.attachAccessoryView(mCheckboxContainer, mSettingRadioButton); mGroup.attachAccessoryView(mCheckboxContainer, mSettingRadioButton);
mCheckboxContainer.setVisibility(View.VISIBLE); mCheckboxContainer.setVisibility(View.VISIBLE);
} else { } else {
...@@ -113,14 +110,14 @@ public class RadioButtonGroupThemePreference ...@@ -113,14 +110,14 @@ public class RadioButtonGroupThemePreference
@Override @Override
public void onCheckedChanged(RadioGroup group, int checkedId) { public void onCheckedChanged(RadioGroup group, int checkedId) {
for (int i = 0; i < ThemeSetting.NUM_ENTRIES; i++) { for (int i = 0; i < ThemeType.NUM_ENTRIES; i++) {
if (mButtons.get(i).isChecked()) { if (mButtons.get(i).isChecked()) {
mSetting = i; mSetting = i;
mSettingRadioButton = mButtons.get(i); mSettingRadioButton = mButtons.get(i);
break; break;
} }
} }
assert mSetting >= 0 && mSetting < ThemeSetting.NUM_ENTRIES : "No matching setting found."; assert mSetting >= 0 && mSetting < ThemeType.NUM_ENTRIES : "No matching setting found.";
positionCheckbox(); positionCheckbox();
callChangeListener(mSetting); callChangeListener(mSetting);
......
...@@ -11,7 +11,6 @@ import android.os.Build; ...@@ -11,7 +11,6 @@ import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.support.v7.preference.PreferenceFragmentCompat; import android.support.v7.preference.PreferenceFragmentCompat;
import androidx.annotation.IntDef;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import org.chromium.chrome.R; import org.chromium.chrome.R;
...@@ -21,34 +20,16 @@ import org.chromium.chrome.browser.preferences.SharedPreferencesManager; ...@@ -21,34 +20,16 @@ import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
import org.chromium.chrome.browser.settings.SettingsUtils; import org.chromium.chrome.browser.settings.SettingsUtils;
import org.chromium.ui.UiUtils; import org.chromium.ui.UiUtils;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/** /**
* Fragment to manage the theme user settings. * Fragment to manage the theme user settings.
*/ */
public class ThemePreferences extends PreferenceFragmentCompat { public class ThemeSettingsFragment extends PreferenceFragmentCompat {
/**
* Theme preference variations. This is also used for histograms and should therefore be treated
* as append-only. See DarkThemePreferences in tools/metrics/histograms/enums.xml.
*/
@IntDef({ThemeSetting.SYSTEM_DEFAULT, ThemeSetting.LIGHT, ThemeSetting.DARK})
@Retention(RetentionPolicy.SOURCE)
public @interface ThemeSetting {
// Values are used for indexing tables - should start from 0 and can't have gaps.
int SYSTEM_DEFAULT = 0;
int LIGHT = 1;
int DARK = 2;
int NUM_ENTRIES = 3;
}
static final String PREF_UI_THEME_PREF = "ui_theme_pref"; static final String PREF_UI_THEME_PREF = "ui_theme_pref";
@Override @Override
public void onCreatePreferences(@Nullable Bundle savedInstanceState, String rootKey) { public void onCreatePreferences(@Nullable Bundle savedInstanceState, String rootKey) {
SettingsUtils.addPreferencesFromResource(this, R.xml.theme_preferences); SettingsUtils.addPreferencesFromResource(this, R.xml.theme_preferences);
getActivity().setTitle(R.string.prefs_themes); getActivity().setTitle(R.string.theme_settings);
SharedPreferencesManager sharedPreferencesManager = SharedPreferencesManager.getInstance(); SharedPreferencesManager sharedPreferencesManager = SharedPreferencesManager.getInstance();
RadioButtonGroupThemePreference radioButtonGroupThemePreference = RadioButtonGroupThemePreference radioButtonGroupThemePreference =
......
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.settings.themes;
import androidx.annotation.IntDef;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
* Theme setting variations. This is also used for histograms and should therefore be treated
* as append-only. See DarkThemePreferences in tools/metrics/histograms/enums.xml.
*/
@IntDef({ThemeType.SYSTEM_DEFAULT, ThemeType.LIGHT, ThemeType.DARK})
@Retention(RetentionPolicy.SOURCE)
public @interface ThemeType {
// Values are used for indexing tables - should start from 0 and can't have gaps.
int SYSTEM_DEFAULT = 0;
int LIGHT = 1;
int DARK = 2;
int NUM_ENTRIES = 3;
}
...@@ -11,7 +11,7 @@ import org.chromium.base.test.params.ParameterSet; ...@@ -11,7 +11,7 @@ import org.chromium.base.test.params.ParameterSet;
import org.chromium.chrome.browser.flags.FeatureUtilities; import org.chromium.chrome.browser.flags.FeatureUtilities;
import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
import org.chromium.chrome.browser.preferences.SharedPreferencesManager; import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
import org.chromium.chrome.browser.settings.themes.ThemePreferences; import org.chromium.chrome.browser.settings.themes.ThemeType;
import org.chromium.ui.test.util.DummyUiActivity; import org.chromium.ui.test.util.DummyUiActivity;
import java.util.Arrays; import java.util.Arrays;
...@@ -66,8 +66,7 @@ public class NightModeTestUtils { ...@@ -66,8 +66,7 @@ public class NightModeTestUtils {
*/ */
public static void setUpNightModeForChromeActivity(boolean nightModeEnabled) { public static void setUpNightModeForChromeActivity(boolean nightModeEnabled) {
SharedPreferencesManager.getInstance().writeInt(ChromePreferenceKeys.UI_THEME_SETTING_KEY, SharedPreferencesManager.getInstance().writeInt(ChromePreferenceKeys.UI_THEME_SETTING_KEY,
nightModeEnabled ? ThemePreferences.ThemeSetting.DARK nightModeEnabled ? ThemeType.DARK : ThemeType.LIGHT);
: ThemePreferences.ThemeSetting.LIGHT);
} }
/** /**
......
...@@ -29,7 +29,6 @@ import org.chromium.chrome.browser.night_mode.NightModeUtils; ...@@ -29,7 +29,6 @@ import org.chromium.chrome.browser.night_mode.NightModeUtils;
import org.chromium.chrome.browser.preferences.SharedPreferencesManager; import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
import org.chromium.chrome.browser.settings.SettingsActivity; import org.chromium.chrome.browser.settings.SettingsActivity;
import org.chromium.chrome.browser.settings.SettingsActivityTest; import org.chromium.chrome.browser.settings.SettingsActivityTest;
import org.chromium.chrome.browser.settings.themes.ThemePreferences.ThemeSetting;
import org.chromium.chrome.browser.ui.widget.RadioButtonWithDescription; import org.chromium.chrome.browser.ui.widget.RadioButtonWithDescription;
import org.chromium.chrome.browser.ui.widget.RadioButtonWithDescriptionLayout; import org.chromium.chrome.browser.ui.widget.RadioButtonWithDescriptionLayout;
import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate; import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate;
...@@ -41,13 +40,13 @@ import java.util.Arrays; ...@@ -41,13 +40,13 @@ import java.util.Arrays;
import java.util.List; import java.util.List;
/** /**
* Tests for ThemePreferences. * Tests for ThemeSettingsFragment.
*/ */
// clang-format off // clang-format off
@Features.EnableFeatures(ANDROID_NIGHT_MODE) @Features.EnableFeatures(ANDROID_NIGHT_MODE)
@RunWith(ParameterizedRunner.class) @RunWith(ParameterizedRunner.class)
@ParameterAnnotations.UseRunnerDelegate(ChromeJUnit4RunnerDelegate.class) @ParameterAnnotations.UseRunnerDelegate(ChromeJUnit4RunnerDelegate.class)
public class ThemePreferencesTest extends DummyUiActivityTestCase { public class ThemeSettingsFragmentTest extends DummyUiActivityTestCase {
// clang-format on // clang-format on
@ParameterAnnotations.ClassParameter @ParameterAnnotations.ClassParameter
private static List<ParameterSet> sClassParams = private static List<ParameterSet> sClassParams =
...@@ -55,10 +54,10 @@ public class ThemePreferencesTest extends DummyUiActivityTestCase { ...@@ -55,10 +54,10 @@ public class ThemePreferencesTest extends DummyUiActivityTestCase {
new ParameterSet().value(true).name("DefaultLightEnabled")); new ParameterSet().value(true).name("DefaultLightEnabled"));
private boolean mDefaultToLight; private boolean mDefaultToLight;
private ThemePreferences mFragment; private ThemeSettingsFragment mFragment;
private RadioButtonGroupThemePreference mPreference; private RadioButtonGroupThemePreference mPreference;
public ThemePreferencesTest(boolean defaultToLight) { public ThemeSettingsFragmentTest(boolean defaultToLight) {
mDefaultToLight = defaultToLight; mDefaultToLight = defaultToLight;
FeatureUtilities.setNightModeDefaultToLightForTesting(defaultToLight); FeatureUtilities.setNightModeDefaultToLightForTesting(defaultToLight);
} }
...@@ -69,10 +68,11 @@ public class ThemePreferencesTest extends DummyUiActivityTestCase { ...@@ -69,10 +68,11 @@ public class ThemePreferencesTest extends DummyUiActivityTestCase {
SharedPreferencesManager.getInstance().removeKey(UI_THEME_SETTING_KEY); SharedPreferencesManager.getInstance().removeKey(UI_THEME_SETTING_KEY);
SharedPreferencesManager.getInstance().removeKey(DARKEN_WEBSITES_ENABLED_KEY); SharedPreferencesManager.getInstance().removeKey(DARKEN_WEBSITES_ENABLED_KEY);
SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity( SettingsActivity settingsActivity = SettingsActivityTest.startSettingsActivity(
InstrumentationRegistry.getInstrumentation(), ThemePreferences.class.getName()); InstrumentationRegistry.getInstrumentation(),
mFragment = (ThemePreferences) settingsActivity.getMainFragment(); ThemeSettingsFragment.class.getName());
mFragment = (ThemeSettingsFragment) settingsActivity.getMainFragment();
mPreference = (RadioButtonGroupThemePreference) mFragment.findPreference( mPreference = (RadioButtonGroupThemePreference) mFragment.findPreference(
ThemePreferences.PREF_UI_THEME_PREF); ThemeSettingsFragment.PREF_UI_THEME_PREF);
} }
@Override @Override
...@@ -98,8 +98,7 @@ public class ThemePreferencesTest extends DummyUiActivityTestCase { ...@@ -98,8 +98,7 @@ public class ThemePreferencesTest extends DummyUiActivityTestCase {
return; return;
} }
int expectedDefaultTheme = int expectedDefaultTheme = mDefaultToLight ? ThemeType.LIGHT : ThemeType.SYSTEM_DEFAULT;
mDefaultToLight ? ThemeSetting.LIGHT : ThemeSetting.SYSTEM_DEFAULT;
Assert.assertEquals("Incorrect default theme setting.", expectedDefaultTheme, Assert.assertEquals("Incorrect default theme setting.", expectedDefaultTheme,
NightModeUtils.getThemeSetting()); NightModeUtils.getThemeSetting());
assertButtonCheckedCorrectly( assertButtonCheckedCorrectly(
...@@ -109,7 +108,7 @@ public class ThemePreferencesTest extends DummyUiActivityTestCase { ...@@ -109,7 +108,7 @@ public class ThemePreferencesTest extends DummyUiActivityTestCase {
Assert.assertEquals(R.id.system_default, getButton(0).getId()); Assert.assertEquals(R.id.system_default, getButton(0).getId());
selectButton(0); selectButton(0);
assertButtonCheckedCorrectly("System default", 0); assertButtonCheckedCorrectly("System default", 0);
Assert.assertEquals(ThemeSetting.SYSTEM_DEFAULT, mPreference.getSetting()); Assert.assertEquals(ThemeType.SYSTEM_DEFAULT, mPreference.getSetting());
Assert.assertEquals(mPreference.getSetting(), Assert.assertEquals(mPreference.getSetting(),
SharedPreferencesManager.getInstance().readInt(UI_THEME_SETTING_KEY)); SharedPreferencesManager.getInstance().readInt(UI_THEME_SETTING_KEY));
...@@ -117,7 +116,7 @@ public class ThemePreferencesTest extends DummyUiActivityTestCase { ...@@ -117,7 +116,7 @@ public class ThemePreferencesTest extends DummyUiActivityTestCase {
Assert.assertEquals(R.id.light, getButton(1).getId()); Assert.assertEquals(R.id.light, getButton(1).getId());
selectButton(1); selectButton(1);
assertButtonCheckedCorrectly("Light", 1); assertButtonCheckedCorrectly("Light", 1);
Assert.assertEquals(ThemeSetting.LIGHT, mPreference.getSetting()); Assert.assertEquals(ThemeType.LIGHT, mPreference.getSetting());
Assert.assertEquals(mPreference.getSetting(), Assert.assertEquals(mPreference.getSetting(),
SharedPreferencesManager.getInstance().readInt(UI_THEME_SETTING_KEY)); SharedPreferencesManager.getInstance().readInt(UI_THEME_SETTING_KEY));
...@@ -125,7 +124,7 @@ public class ThemePreferencesTest extends DummyUiActivityTestCase { ...@@ -125,7 +124,7 @@ public class ThemePreferencesTest extends DummyUiActivityTestCase {
Assert.assertEquals(R.id.dark, getButton(2).getId()); Assert.assertEquals(R.id.dark, getButton(2).getId());
selectButton(2); selectButton(2);
assertButtonCheckedCorrectly("Dark", 2); assertButtonCheckedCorrectly("Dark", 2);
Assert.assertEquals(ThemeSetting.DARK, mPreference.getSetting()); Assert.assertEquals(ThemeType.DARK, mPreference.getSetting());
Assert.assertEquals(mPreference.getSetting(), Assert.assertEquals(mPreference.getSetting(),
SharedPreferencesManager.getInstance().readInt(UI_THEME_SETTING_KEY)); SharedPreferencesManager.getInstance().readInt(UI_THEME_SETTING_KEY));
}); });
...@@ -147,8 +146,7 @@ public class ThemePreferencesTest extends DummyUiActivityTestCase { ...@@ -147,8 +146,7 @@ public class ThemePreferencesTest extends DummyUiActivityTestCase {
LinearLayout checkboxContainer = mPreference.getCheckboxContainerForTesting(); LinearLayout checkboxContainer = mPreference.getCheckboxContainerForTesting();
RadioButtonWithDescriptionLayout group = mPreference.getGroupForTesting(); RadioButtonWithDescriptionLayout group = mPreference.getGroupForTesting();
int expectedDefaultTheme = int expectedDefaultTheme = mDefaultToLight ? ThemeType.LIGHT : ThemeType.SYSTEM_DEFAULT;
mDefaultToLight ? ThemeSetting.LIGHT : ThemeSetting.SYSTEM_DEFAULT;
Assert.assertEquals("Incorrect default theme setting.", expectedDefaultTheme, Assert.assertEquals("Incorrect default theme setting.", expectedDefaultTheme,
NightModeUtils.getThemeSetting()); NightModeUtils.getThemeSetting());
assertButtonCheckedCorrectly( assertButtonCheckedCorrectly(
...@@ -209,7 +207,7 @@ public class ThemePreferencesTest extends DummyUiActivityTestCase { ...@@ -209,7 +207,7 @@ public class ThemePreferencesTest extends DummyUiActivityTestCase {
} }
private boolean isRestUnchecked(int selectedIndex) { private boolean isRestUnchecked(int selectedIndex) {
for (int i = 0; i < ThemeSetting.NUM_ENTRIES; i++) { for (int i = 0; i < ThemeType.NUM_ENTRIES; i++) {
if (i != selectedIndex && getButton(i).isChecked()) { if (i != selectedIndex && getButton(i).isChecked()) {
return false; return false;
} }
......
...@@ -32,7 +32,7 @@ import org.chromium.base.test.BaseRobolectricTestRunner; ...@@ -32,7 +32,7 @@ import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.base.test.util.DisableIf; import org.chromium.base.test.util.DisableIf;
import org.chromium.chrome.browser.flags.FeatureUtilities; import org.chromium.chrome.browser.flags.FeatureUtilities;
import org.chromium.chrome.browser.preferences.SharedPreferencesManager; import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
import org.chromium.chrome.browser.settings.themes.ThemePreferences; import org.chromium.chrome.browser.settings.themes.ThemeType;
/** /**
* Unit tests for {@link GlobalNightModeStateController}. * Unit tests for {@link GlobalNightModeStateController}.
...@@ -97,7 +97,7 @@ public class GlobalNightModeStateControllerTest { ...@@ -97,7 +97,7 @@ public class GlobalNightModeStateControllerTest {
public void testUpdateNightMode_PowerSaveMode_DefaultsToSystem() { public void testUpdateNightMode_PowerSaveMode_DefaultsToSystem() {
// Set preference to system default and verify that the night mode isn't enabled. // Set preference to system default and verify that the night mode isn't enabled.
SharedPreferencesManager.getInstance().writeInt( SharedPreferencesManager.getInstance().writeInt(
UI_THEME_SETTING_KEY, ThemePreferences.ThemeSetting.SYSTEM_DEFAULT); UI_THEME_SETTING_KEY, ThemeType.SYSTEM_DEFAULT);
assertFalse(mGlobalNightModeStateController.isInNightMode()); assertFalse(mGlobalNightModeStateController.isInNightMode());
// Enable power save mode and verify night mode is enabled. // Enable power save mode and verify night mode is enabled.
...@@ -125,7 +125,7 @@ public class GlobalNightModeStateControllerTest { ...@@ -125,7 +125,7 @@ public class GlobalNightModeStateControllerTest {
public void testUpdateNightMode_SystemNightMode_DefaultsToSystem() { public void testUpdateNightMode_SystemNightMode_DefaultsToSystem() {
// Set preference to system default and verify that the night mode isn't enabled. // Set preference to system default and verify that the night mode isn't enabled.
SharedPreferencesManager.getInstance().writeInt( SharedPreferencesManager.getInstance().writeInt(
UI_THEME_SETTING_KEY, ThemePreferences.ThemeSetting.SYSTEM_DEFAULT); UI_THEME_SETTING_KEY, ThemeType.SYSTEM_DEFAULT);
assertFalse(mGlobalNightModeStateController.isInNightMode()); assertFalse(mGlobalNightModeStateController.isInNightMode());
// Enable system night mode and verify night mode is enabled. // Enable system night mode and verify night mode is enabled.
...@@ -152,13 +152,11 @@ public class GlobalNightModeStateControllerTest { ...@@ -152,13 +152,11 @@ public class GlobalNightModeStateControllerTest {
@Test @Test
public void testUpdateNightMode_Preference() { public void testUpdateNightMode_Preference() {
// Set preference to dark theme and verify night mode is enabled. // Set preference to dark theme and verify night mode is enabled.
SharedPreferencesManager.getInstance().writeInt( SharedPreferencesManager.getInstance().writeInt(UI_THEME_SETTING_KEY, ThemeType.DARK);
UI_THEME_SETTING_KEY, ThemePreferences.ThemeSetting.DARK);
assertTrue(mGlobalNightModeStateController.isInNightMode()); assertTrue(mGlobalNightModeStateController.isInNightMode());
// Set preference to light theme and verify night mode is disabled. // Set preference to light theme and verify night mode is disabled.
SharedPreferencesManager.getInstance().writeInt( SharedPreferencesManager.getInstance().writeInt(UI_THEME_SETTING_KEY, ThemeType.LIGHT);
UI_THEME_SETTING_KEY, ThemePreferences.ThemeSetting.LIGHT);
assertFalse(mGlobalNightModeStateController.isInNightMode()); assertFalse(mGlobalNightModeStateController.isInNightMode());
// Regardless of power save mode and system night mode, night mode is disabled with light // Regardless of power save mode and system night mode, night mode is disabled with light
...@@ -181,8 +179,7 @@ public class GlobalNightModeStateControllerTest { ...@@ -181,8 +179,7 @@ public class GlobalNightModeStateControllerTest {
setSystemNightMode(true); setSystemNightMode(true);
assertFalse(mGlobalNightModeStateController.isInNightMode()); assertFalse(mGlobalNightModeStateController.isInNightMode());
SharedPreferencesManager.getInstance().writeInt( SharedPreferencesManager.getInstance().writeInt(UI_THEME_SETTING_KEY, ThemeType.DARK);
UI_THEME_SETTING_KEY, ThemePreferences.ThemeSetting.DARK);
assertFalse(mGlobalNightModeStateController.isInNightMode()); assertFalse(mGlobalNightModeStateController.isInNightMode());
// Simulate to start listening to night mode state changes. Verify that // Simulate to start listening to night mode state changes. Verify that
...@@ -193,7 +190,7 @@ public class GlobalNightModeStateControllerTest { ...@@ -193,7 +190,7 @@ public class GlobalNightModeStateControllerTest {
assertTrue(mGlobalNightModeStateController.isInNightMode()); assertTrue(mGlobalNightModeStateController.isInNightMode());
SharedPreferencesManager.getInstance().writeInt( SharedPreferencesManager.getInstance().writeInt(
UI_THEME_SETTING_KEY, ThemePreferences.ThemeSetting.SYSTEM_DEFAULT); UI_THEME_SETTING_KEY, ThemeType.SYSTEM_DEFAULT);
assertTrue(mGlobalNightModeStateController.isInNightMode()); assertTrue(mGlobalNightModeStateController.isInNightMode());
setIsPowerSaveMode(false); setIsPowerSaveMode(false);
...@@ -208,8 +205,7 @@ public class GlobalNightModeStateControllerTest { ...@@ -208,8 +205,7 @@ public class GlobalNightModeStateControllerTest {
mGlobalNightModeStateController.addObserver(mObserver); mGlobalNightModeStateController.addObserver(mObserver);
// Verify that observer is called on night mode state changed from false to true. // Verify that observer is called on night mode state changed from false to true.
SharedPreferencesManager.getInstance().writeInt( SharedPreferencesManager.getInstance().writeInt(UI_THEME_SETTING_KEY, ThemeType.DARK);
UI_THEME_SETTING_KEY, ThemePreferences.ThemeSetting.DARK);
assertTrue(mGlobalNightModeStateController.isInNightMode()); assertTrue(mGlobalNightModeStateController.isInNightMode());
verify(mObserver, times(1)).onNightModeStateChanged(); verify(mObserver, times(1)).onNightModeStateChanged();
...@@ -224,15 +220,13 @@ public class GlobalNightModeStateControllerTest { ...@@ -224,15 +220,13 @@ public class GlobalNightModeStateControllerTest {
verify(mObserver, times(1)).onNightModeStateChanged(); verify(mObserver, times(1)).onNightModeStateChanged();
// Verify that observer is called when set to light theme. // Verify that observer is called when set to light theme.
SharedPreferencesManager.getInstance().writeInt( SharedPreferencesManager.getInstance().writeInt(UI_THEME_SETTING_KEY, ThemeType.LIGHT);
UI_THEME_SETTING_KEY, ThemePreferences.ThemeSetting.LIGHT);
assertFalse(mGlobalNightModeStateController.isInNightMode()); assertFalse(mGlobalNightModeStateController.isInNightMode());
verify(mObserver, times(2)).onNightModeStateChanged(); verify(mObserver, times(2)).onNightModeStateChanged();
// Verify that observer is not called after it is removed. // Verify that observer is not called after it is removed.
mGlobalNightModeStateController.removeObserver(mObserver); mGlobalNightModeStateController.removeObserver(mObserver);
SharedPreferencesManager.getInstance().writeInt( SharedPreferencesManager.getInstance().writeInt(UI_THEME_SETTING_KEY, ThemeType.DARK);
UI_THEME_SETTING_KEY, ThemePreferences.ThemeSetting.DARK);
assertTrue(mGlobalNightModeStateController.isInNightMode()); assertTrue(mGlobalNightModeStateController.isInNightMode());
verify(mObserver, times(2)).onNightModeStateChanged(); verify(mObserver, times(2)).onNightModeStateChanged();
} }
......
...@@ -17,7 +17,7 @@ import org.robolectric.annotation.Config; ...@@ -17,7 +17,7 @@ import org.robolectric.annotation.Config;
import org.chromium.base.test.BaseRobolectricTestRunner; import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.chrome.browser.flags.FeatureUtilities; import org.chromium.chrome.browser.flags.FeatureUtilities;
import org.chromium.chrome.browser.preferences.SharedPreferencesManager; import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
import org.chromium.chrome.browser.settings.themes.ThemePreferences; import org.chromium.chrome.browser.settings.themes.ThemeType;
/** /**
* Unit tests for {@link GlobalNightModeStateProviderHolder}. * Unit tests for {@link GlobalNightModeStateProviderHolder}.
...@@ -40,8 +40,7 @@ public class GlobalNightModeStateProviderHolderTest { ...@@ -40,8 +40,7 @@ public class GlobalNightModeStateProviderHolderTest {
assertFalse(GlobalNightModeStateProviderHolder.getInstance().isInNightMode()); assertFalse(GlobalNightModeStateProviderHolder.getInstance().isInNightMode());
// Verify that night mode cannot be enabled. // Verify that night mode cannot be enabled.
SharedPreferencesManager.getInstance().writeInt( SharedPreferencesManager.getInstance().writeInt(UI_THEME_SETTING_KEY, ThemeType.DARK);
UI_THEME_SETTING_KEY, ThemePreferences.ThemeSetting.DARK);
assertFalse(GlobalNightModeStateProviderHolder.getInstance().isInNightMode()); assertFalse(GlobalNightModeStateProviderHolder.getInstance().isInNightMode());
} }
......
...@@ -720,8 +720,8 @@ CHAR-LIMIT guidelines: ...@@ -720,8 +720,8 @@ CHAR-LIMIT guidelines:
Search and site suggestions disabled Search and site suggestions disabled
</message> </message>
<!-- Themes preferences --> <!-- Themes settings -->
<message name="IDS_PREFS_THEMES" desc="Title for the Themes preferences. [CHAR-LIMIT=32]"> <message name="IDS_THEME_SETTINGS" desc="Title for the Theme settings. [CHAR-LIMIT=32]">
Themes Themes
</message> </message>
<message name="IDS_THEMES_SYSTEM_DEFAULT_TITLE" desc="Title for the System Default option. [CHAR-LIMIT=32]"> <message name="IDS_THEMES_SYSTEM_DEFAULT_TITLE" desc="Title for the System Default option. [CHAR-LIMIT=32]">
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment