diff --git a/frontend/assets/pwa-manifest.webmanifest b/frontend/assets/pwa-manifest.webmanifest index a0c4f47838..8bac8203fe 100644 --- a/frontend/assets/pwa-manifest.webmanifest +++ b/frontend/assets/pwa-manifest.webmanifest @@ -23,6 +23,5 @@ "type": "image/svg+xml" } ], - "background_color": "#EDEDED", - "theme_color": "#EDEDED" + "background_color": "#EDEDED" } diff --git a/frontend/index.html b/frontend/index.html index 478611b7c4..47715d3b52 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -5,6 +5,7 @@ Group Income + diff --git a/frontend/main.js b/frontend/main.js index f055ab9f97..fe2285fad3 100644 --- a/frontend/main.js +++ b/frontend/main.js @@ -13,7 +13,7 @@ import type { GIMessage } from '~/shared/domains/chelonia/chelonia.js' import '~/shared/domains/chelonia/chelonia.js' import { CONTRACT_IS_SYNCING } from '~/shared/domains/chelonia/events.js' import * as Common from '@common/common.js' -import { LOGIN, LOGOUT, SWITCH_GROUP } from './utils/events.js' +import { LOGIN, LOGOUT, SWITCH_GROUP, THEME_CHANGE } from './utils/events.js' import './controller/namespace.js' import './controller/actions/index.js' import './controller/backend.js' @@ -339,6 +339,7 @@ async function startApp () { ) } + sbp('okTurtles.events/emit', THEME_CHANGE, this.$store.state.settings.themeColor) this.setBadgeOnTab() }, computed: { diff --git a/frontend/model/settings/vuexModule.js b/frontend/model/settings/vuexModule.js index 90cbd4bbe9..4880cc895f 100644 --- a/frontend/model/settings/vuexModule.js +++ b/frontend/model/settings/vuexModule.js @@ -3,7 +3,7 @@ import sbp from '@sbp/sbp' import Colors from './colors.js' -import { LOGOUT, SET_APP_LOGS_FILTER } from '@utils/events.js' +import { LOGOUT, SET_APP_LOGS_FILTER, THEME_CHANGE } from '@utils/events.js' import { cloneDeep } from '~/frontend/model/contracts/shared/giLodash.js' import { THEME_LIGHT, THEME_DARK } from './themes.js' @@ -13,6 +13,15 @@ const checkSystemColor = () => { : THEME_LIGHT } +const updateMetaThemeTag = (theme: string) => { + // update the content of according to the changed theme + const metaTag: any = document.querySelector('meta[name="theme-color"]') + + if (metaTag) { + metaTag.content = theme === THEME_DARK ? '#2E3032' : '#F5F5F5' + } +} + const defaultTheme = 'system' const defaultColor: string = checkSystemColor() @@ -72,13 +81,19 @@ const mutations = { }, setTheme (state, theme) { state.theme = theme - state.themeColor = theme === 'system' ? checkSystemColor() : theme + + const themeColor = theme === 'system' ? checkSystemColor() : theme + state.themeColor = themeColor + sbp('okTurtles.events/emit', THEME_CHANGE, themeColor) } } // Default application settings must apply again when we're no longer logged in (#1344). sbp('okTurtles.events/on', LOGOUT, () => sbp('state/vuex/commit', 'resetSettings')) +// make sure to set the status bar color according to the theme setting change. +sbp('okTurtles.events/on', THEME_CHANGE, updateMetaThemeTag) + export default ({ state: () => cloneDeep(defaultSettings), getters, diff --git a/frontend/utils/events.js b/frontend/utils/events.js index 0a76a6627c..6c6bad3c20 100644 --- a/frontend/utils/events.js +++ b/frontend/utils/events.js @@ -32,3 +32,5 @@ export const INCOME_DETAILS_UPDATE = 'income-details-update' export const PAYMENTS_RECORDED = 'payments-recorded' export const AVATAR_EDITED = 'avatar-edited' + +export const THEME_CHANGE = 'theme-change'