Add an override for the theme

So we can force the light theme on unthemeable pages like the login
& complete security page.

Fixes https://github.com/vector-im/riot-web/issues/12149
Fixes https://github.com/vector-im/riot-web/issues/12157
This commit is contained in:
David Baker 2020-01-31 12:28:14 +00:00
parent 630507304a
commit 2d9b111680
2 changed files with 19 additions and 0 deletions

View file

@ -53,6 +53,7 @@ import createRoom from "../../createRoom";
import KeyRequestHandler from '../../KeyRequestHandler'; import KeyRequestHandler from '../../KeyRequestHandler';
import { _t, getCurrentLanguage } from '../../languageHandler'; import { _t, getCurrentLanguage } from '../../languageHandler';
import SettingsStore, {SettingLevel} from "../../settings/SettingsStore"; import SettingsStore, {SettingLevel} from "../../settings/SettingsStore";
import ThemeController from "../../settings/controllers/ThemeController";
import { startAnyRegistrationFlow } from "../../Registration.js"; import { startAnyRegistrationFlow } from "../../Registration.js";
import { messageForSyncError } from '../../utils/ErrorUtils'; import { messageForSyncError } from '../../utils/ErrorUtils';
import ResizeNotifier from "../../utils/ResizeNotifier"; import ResizeNotifier from "../../utils/ResizeNotifier";
@ -506,6 +507,8 @@ export default createReactClass({
view: VIEWS.LOGIN, view: VIEWS.LOGIN,
}); });
this.notifyNewScreen('login'); this.notifyNewScreen('login');
ThemeController.setIsLogin(true);
this._themeWatcher.recheck();
break; break;
case 'start_post_registration': case 'start_post_registration':
this.setState({ this.setState({
@ -760,6 +763,8 @@ export default createReactClass({
} }
this.setStateForNewView(newState); this.setStateForNewView(newState);
ThemeController.setIsLogin(true);
this._themeWatcher.recheck();
this.notifyNewScreen('register'); this.notifyNewScreen('register');
}, },
@ -910,6 +915,8 @@ export default createReactClass({
view: VIEWS.WELCOME, view: VIEWS.WELCOME,
}); });
this.notifyNewScreen('welcome'); this.notifyNewScreen('welcome');
ThemeController.setIsLogin(true);
this._themeWatcher.recheck();
}, },
_viewHome: function() { _viewHome: function() {
@ -919,6 +926,8 @@ export default createReactClass({
}); });
this._setPage(PageTypes.HomePage); this._setPage(PageTypes.HomePage);
this.notifyNewScreen('home'); this.notifyNewScreen('home');
ThemeController.setIsLogin(false);
this._themeWatcher.recheck();
}, },
_viewUser: function(userId, subAction) { _viewUser: function(userId, subAction) {
@ -1231,6 +1240,8 @@ export default createReactClass({
}); });
this.subTitleStatus = ''; this.subTitleStatus = '';
this._setPageSubtitle(); this._setPageSubtitle();
ThemeController.setIsLogin(true);
this._themeWatcher.recheck();
}, },
/** /**

View file

@ -19,9 +19,17 @@ import SettingController from "./SettingController";
import {DEFAULT_THEME, enumerateThemes} from "../../theme"; import {DEFAULT_THEME, enumerateThemes} from "../../theme";
export default class ThemeController extends SettingController { export default class ThemeController extends SettingController {
static isLogin = false;
static setIsLogin(val) {
ThemeController.isLogin = val;
}
getValueOverride(level, roomId, calculatedValue, calculatedAtLevel) { getValueOverride(level, roomId, calculatedValue, calculatedAtLevel) {
if (!calculatedValue) return null; // Don't override null themes if (!calculatedValue) return null; // Don't override null themes
if (ThemeController.isLogin) return 'light';
const themes = enumerateThemes(); const themes = enumerateThemes();
// Override in case some no longer supported theme is stored here // Override in case some no longer supported theme is stored here
if (!themes[calculatedValue]) { if (!themes[calculatedValue]) {