Feature flag for auto app theme
If feature flag is disabled, Auto App theme is behaving like
Light App theme.
Google-Bug-Id: b/244586175
Release-Notes: skip
Change-Id: I1f1ae85dc3623142ad060cceec4338c49ecd99aa
diff --git a/polygerrit-ui/app/elements/gr-app-element.ts b/polygerrit-ui/app/elements/gr-app-element.ts
index ece88ae..2476a5e 100644
--- a/polygerrit-ui/app/elements/gr-app-element.ts
+++ b/polygerrit-ui/app/elements/gr-app-element.ts
@@ -71,6 +71,7 @@
import {isDarkTheme, prefersDarkColorScheme} from '../utils/theme-util';
import {AppTheme} from '../constants/constants';
import {subscribe} from './lit/subscription-controller';
+import {KnownExperimentId} from '../services/flags/flags';
interface ErrorInfo {
text: string;
@@ -171,6 +172,8 @@
private readonly restApiService = getAppContext().restApiService;
+ private readonly flagsService = getAppContext().flagsService;
+
private readonly getBrowserModel = resolve(this, browserModelToken);
private readonly shortcuts = new ShortcutController(this);
@@ -645,7 +648,10 @@
}
private applyTheme() {
- const showDarkTheme = isDarkTheme(this.theme);
+ const showDarkTheme = isDarkTheme(
+ this.theme,
+ this.flagsService.isEnabled(KnownExperimentId.AUTO_APP_THEME)
+ );
document.documentElement.classList.toggle('darkTheme', showDarkTheme);
document.documentElement.classList.toggle('lightTheme', !showDarkTheme);
if (showDarkTheme) {
diff --git a/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view.ts b/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view.ts
index 39d44cf..1ad78a6 100644
--- a/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view.ts
+++ b/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view.ts
@@ -62,6 +62,7 @@
import {pageNavStyles} from '../../../styles/gr-page-nav-styles';
import {menuPageStyles} from '../../../styles/gr-menu-page-styles';
import {formStyles} from '../../../styles/gr-form-styles';
+import {KnownExperimentId} from '../../../services/flags/flags';
const GERRIT_DOCS_BASE_URL =
'https://gerrit-review.googlesource.com/' + 'Documentation';
@@ -199,6 +200,8 @@
private readonly userModel = getAppContext().userModel;
+ private readonly flagsService = getAppContext().flagsService;
+
override connectedCallback() {
super.connectedCallback();
// Polymer 2: anchor tag won't work on shadow DOM
@@ -712,20 +715,32 @@
super.disconnectedCallback();
}
+ private mapTheme(theme: AppTheme) {
+ if (this.flagsService.isEnabled(KnownExperimentId.AUTO_APP_THEME)) {
+ return theme;
+ }
+ if (theme === AppTheme.AUTO) return AppTheme.LIGHT;
+ return theme;
+ }
+
private renderTheme() {
return html`
<section>
<label class="title" for="themeSelect">Theme</label>
<span class="value">
<gr-select
- .bindValue=${this.localPrefs.theme ?? AppTheme.AUTO}
+ .bindValue=${this.mapTheme(this.localPrefs.theme ?? AppTheme.AUTO)}
@change=${() => {
this.localPrefs.theme = this.themeSelect.value as AppTheme;
this.prefsChanged = true;
}}
>
<select id="themeSelect">
- <option value="AUTO">Auto (based on OS prefs)</option>
+ ${when(
+ this.flagsService.isEnabled(KnownExperimentId.AUTO_APP_THEME),
+ () =>
+ html`<option value="AUTO">Auto (based on OS prefs)</option>`
+ )}
<option value="LIGHT">Light</option>
<option value="DARK">Dark</option>
</select>
diff --git a/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view_test.ts b/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view_test.ts
index c6eb31b..10be124 100644
--- a/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view_test.ts
+++ b/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view_test.ts
@@ -173,7 +173,6 @@
<span class="value">
<gr-select>
<select id="themeSelect">
- <option value="AUTO">Auto (based on OS prefs)</option>
<option value="LIGHT">Light</option>
<option value="DARK">Dark</option>
</select>
diff --git a/polygerrit-ui/app/services/flags/flags.ts b/polygerrit-ui/app/services/flags/flags.ts
index 78c0631..9ca2cef 100644
--- a/polygerrit-ui/app/services/flags/flags.ts
+++ b/polygerrit-ui/app/services/flags/flags.ts
@@ -24,4 +24,5 @@
MENTION_USERS = 'UiFeature__mention_users',
PATCHSET_LEVEL_COMMENT_USES_GRCOMMENT = 'UiFeature__patchset_level_comment_uses_GrComment',
RENDER_MARKDOWN = 'UiFeature__render_markdown',
+ AUTO_APP_THEME = 'UiFeature__auto_app_theme',
}
diff --git a/polygerrit-ui/app/utils/theme-util.ts b/polygerrit-ui/app/utils/theme-util.ts
index da4500a..d113bcf 100644
--- a/polygerrit-ui/app/utils/theme-util.ts
+++ b/polygerrit-ui/app/utils/theme-util.ts
@@ -16,8 +16,8 @@
return window.matchMedia('(prefers-color-scheme: dark)');
}
-export function isDarkTheme(theme: AppTheme) {
- if (theme === AppTheme.AUTO) return isDarkThemeInOs();
+export function isDarkTheme(theme: AppTheme, autoModeEnabled: boolean) {
+ if (autoModeEnabled && theme === AppTheme.AUTO) return isDarkThemeInOs();
return theme === AppTheme.DARK;
}