diff --git a/debug_log_preload.js b/debug_log_preload.js index 158e602bdb60..ba4b99985baa 100644 --- a/debug_log_preload.js +++ b/debug_log_preload.js @@ -6,6 +6,7 @@ const config = url.parse(window.location.toString(), true).query; const { locale } = config; const localeMessages = ipcRenderer.sendSync('locale-data'); +window.theme = config.theme; window.i18n = i18n.setup(locale, localeMessages); // got.js appears to need this to successfully submit debug logs to the cloud diff --git a/js/debug_log_start.js b/js/debug_log_start.js index e17ab912e89c..77143076e8eb 100644 --- a/js/debug_log_start.js +++ b/js/debug_log_start.js @@ -5,6 +5,7 @@ $(document).on('keyup', function(e) { }); const $body = $(document.body); +$body.addClass(window.theme); // got.js appears to need this to successfully submit debug logs to the cloud window.setImmediate = window.nodeSetImmediate; diff --git a/js/permissions_popup_start.js b/js/permissions_popup_start.js index 765f35b30a36..397f1626fd81 100644 --- a/js/permissions_popup_start.js +++ b/js/permissions_popup_start.js @@ -5,6 +5,7 @@ $(document).on('keyup', function(e) { }); const $body = $(document.body); +$body.addClass(window.theme); window.view = new Whisper.ConfirmationDialogView({ message: i18n('audioPermissionNeeded'), diff --git a/js/settings_start.js b/js/settings_start.js index d8ae874abc18..2cf1cc97b508 100644 --- a/js/settings_start.js +++ b/js/settings_start.js @@ -5,6 +5,7 @@ $(document).on('keyup', function(e) { }); const $body = $(document.body); +$body.addClass(window.theme); const getInitialData = async () => ({ deviceName: await window.getDeviceName(), diff --git a/js/views/settings_view.js b/js/views/settings_view.js index f3713a8d8efc..686b2ea7ceae 100644 --- a/js/views/settings_view.js +++ b/js/views/settings_view.js @@ -1,5 +1,6 @@ /* global i18n: false */ /* global Whisper: false */ +/* global $: false */ /* eslint-disable no-new */ @@ -82,7 +83,14 @@ el: this.$('.theme-settings'), name: 'theme-setting', value: window.initialData.themeSetting, - setFn: window.setThemeSetting, + setFn: theme => { + $(document.body) + .removeClass('android') + .removeClass('android-dark') + .removeClass('ios') + .addClass(theme); + window.setThemeSetting(theme); + }, }); if (Settings.isAudioNotificationSupported()) { new CheckboxView({ diff --git a/main.js b/main.js index f0a7f208bd58..589c567037bf 100644 --- a/main.js +++ b/main.js @@ -115,7 +115,7 @@ const loadLocale = require('./app/locale').load; let logger; let locale; -function prepareURL(pathSegments) { +function prepareURL(pathSegments, moreKeys) { return url.format({ pathname: path.join.apply(null, pathSegments), protocol: 'file:', @@ -134,6 +134,7 @@ function prepareURL(pathSegments) { appInstance: process.env.NODE_APP_INSTANCE, proxyUrl: process.env.HTTPS_PROXY || process.env.https_proxy, importMode: importMode ? true : undefined, // for stringify() + ...moreKeys, }, }); } @@ -428,7 +429,7 @@ function showAbout() { } let settingsWindow; -function showSettingsWindow() { +async function showSettingsWindow() { if (settingsWindow) { settingsWindow.show(); return; @@ -437,6 +438,7 @@ function showSettingsWindow() { return; } + const theme = await pify(getDataFromMainWindow)('theme-setting'); const size = mainWindow.getSize(); const options = { width: Math.min(500, size[0]), @@ -461,7 +463,7 @@ function showSettingsWindow() { captureClicks(settingsWindow); - settingsWindow.loadURL(prepareURL([__dirname, 'settings.html'])); + settingsWindow.loadURL(prepareURL([__dirname, 'settings.html'], { theme })); settingsWindow.on('closed', () => { removeDarkOverlay(); @@ -475,12 +477,13 @@ function showSettingsWindow() { } let debugLogWindow; -function showDebugLogWindow() { +async function showDebugLogWindow() { if (debugLogWindow) { debugLogWindow.show(); return; } + const theme = await pify(getDataFromMainWindow)('theme-setting'); const size = mainWindow.getSize(); const options = { width: Math.max(size[0] - 100, MIN_WIDTH), @@ -505,7 +508,7 @@ function showDebugLogWindow() { captureClicks(debugLogWindow); - debugLogWindow.loadURL(prepareURL([__dirname, 'debug_log.html'])); + debugLogWindow.loadURL(prepareURL([__dirname, 'debug_log.html'], { theme })); debugLogWindow.on('closed', () => { removeDarkOverlay(); @@ -519,7 +522,7 @@ function showDebugLogWindow() { } let permissionsPopupWindow; -function showPermissionsPopupWindow() { +async function showPermissionsPopupWindow() { if (permissionsPopupWindow) { permissionsPopupWindow.show(); return; @@ -528,6 +531,7 @@ function showPermissionsPopupWindow() { return; } + const theme = await pify(getDataFromMainWindow)('theme-setting'); const size = mainWindow.getSize(); const options = { width: Math.min(400, size[0]), @@ -553,7 +557,7 @@ function showPermissionsPopupWindow() { captureClicks(permissionsPopupWindow); permissionsPopupWindow.loadURL( - prepareURL([__dirname, 'permissions_popup.html']) + prepareURL([__dirname, 'permissions_popup.html'], { theme }) ); permissionsPopupWindow.on('closed', () => { @@ -832,13 +836,19 @@ ipc.on('delete-all-data', () => { } }); +function getDataFromMainWindow(name, callback) { + ipc.once(`get-success-${name}`, (_event, error, value) => + callback(error, value) + ); + mainWindow.webContents.send(`get-${name}`); +} + function installSettingsGetter(name) { ipc.on(`get-${name}`, event => { if (mainWindow && mainWindow.webContents) { - ipc.once(`get-success-${name}`, (_event, error, value) => + getDataFromMainWindow(name, (error, value) => event.sender.send(`get-success-${name}`, error, value) ); - mainWindow.webContents.send(`get-${name}`); } }); } diff --git a/permissions_popup_preload.js b/permissions_popup_preload.js index 2d44f554b110..ae7e26a54b21 100644 --- a/permissions_popup_preload.js +++ b/permissions_popup_preload.js @@ -6,6 +6,7 @@ const config = url.parse(window.location.toString(), true).query; const { locale } = config; const localeMessages = ipcRenderer.sendSync('locale-data'); +window.theme = config.theme; window.i18n = i18n.setup(locale, localeMessages); require('./js/logging'); diff --git a/preload.js b/preload.js index d271b51fb345..32bd943db6c3 100644 --- a/preload.js +++ b/preload.js @@ -70,10 +70,6 @@ window.closeAbout = () => ipc.send('close-about'); window.updateTrayIcon = unreadCount => ipc.send('update-tray-icon', unreadCount); -ipc.on('debug-log', () => { - Whisper.events.trigger('showDebugLog'); -}); - ipc.on('set-up-with-import', () => { Whisper.events.trigger('setupWithImport'); }); diff --git a/settings_preload.js b/settings_preload.js index 3f0b0ffd2fe5..f020ad17f81c 100644 --- a/settings_preload.js +++ b/settings_preload.js @@ -6,6 +6,7 @@ const config = url.parse(window.location.toString(), true).query; const { locale } = config; const localeMessages = ipcRenderer.sendSync('locale-data'); +window.theme = config.theme; window.i18n = i18n.setup(locale, localeMessages); require('./js/logging'); diff --git a/stylesheets/android-dark.scss b/stylesheets/android-dark.scss index 7b5db886e844..48c9cb3ecf38 100644 --- a/stylesheets/android-dark.scss +++ b/stylesheets/android-dark.scss @@ -6,6 +6,10 @@ $button-dark: #ccc; $text-dark: #cccccc; $text-dark_l2: darken($text-dark, 30%); +body.android-dark { + background-color: $grey-dark; +} + .android-dark { .app-loading-screen { background-color: $grey-dark;