diff --git a/app/actions/local/channel.ts b/app/actions/local/channel.ts index 57c5b20dd..113bb817f 100644 --- a/app/actions/local/channel.ts +++ b/app/actions/local/channel.ts @@ -6,7 +6,6 @@ import {DeviceEventEmitter} from 'react-native'; import {General, Navigation as NavigationConstants, Preferences, Screens} from '@constants'; import {SYSTEM_IDENTIFIERS} from '@constants/database'; -import {getDefaultThemeByAppearance} from '@context/theme'; import DatabaseManager from '@database/manager'; import {getTeammateNameDisplaySetting} from '@helpers/api/preference'; import {extractChannelDisplayName} from '@helpers/database'; @@ -22,7 +21,6 @@ import {getCurrentUser, queryUsersById} from '@queries/servers/user'; import {dismissAllModalsAndPopToRoot, dismissAllModalsAndPopToScreen} from '@screens/navigation'; import EphemeralStore from '@store/ephemeral_store'; import {isTablet} from '@utils/helpers'; -import {setThemeDefaults, updateThemeIfNeeded} from '@utils/theme'; import {displayGroupMessageName, displayUsername, getUserIdFromChannelName} from '@utils/user'; import type ChannelModel from '@typings/database/models/servers/channel'; @@ -86,18 +84,6 @@ export async function switchToChannel(serverUrl: string, channelId: string, team await operator.batchRecords(models); } - if (!EphemeralStore.theme) { - // When opening the app from a push notification the theme may not be set in the EphemeralStore - // causing the goToScreen to use the Appearance theme instead and that causes the screen background color to potentially - // not match the theme - const themes = await queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_THEME, toTeamId).fetch(); - let theme = getDefaultThemeByAppearance(); - if (themes.length) { - theme = setThemeDefaults(JSON.parse(themes[0].value) as Theme); - } - updateThemeIfNeeded(theme, true); - } - if (isTabletDevice) { dismissAllModalsAndPopToRoot(); DeviceEventEmitter.emit(NavigationConstants.NAVIGATION_HOME, Screens.CHANNEL); diff --git a/app/actions/local/thread.ts b/app/actions/local/thread.ts index 64e263346..a3fad2294 100644 --- a/app/actions/local/thread.ts +++ b/app/actions/local/thread.ts @@ -3,13 +3,11 @@ import {DeviceEventEmitter} from 'react-native'; -import {ActionType, General, Navigation, Preferences, Screens} from '@constants'; -import {getDefaultThemeByAppearance} from '@context/theme'; +import {ActionType, General, Navigation, Screens} from '@constants'; import DatabaseManager from '@database/manager'; import {getTranslations, t} from '@i18n'; import {getChannelById} from '@queries/servers/channel'; import {getPostById} from '@queries/servers/post'; -import {queryPreferencesByCategoryAndName} from '@queries/servers/preference'; import {getCommonSystemValues, getCurrentTeamId, getCurrentUserId, prepareCommonSystemValues, PrepareCommonSystemValuesArgs, setCurrentTeamAndChannelId} from '@queries/servers/system'; import {addChannelToTeamHistory, addTeamToTeamHistory} from '@queries/servers/team'; import {getIsCRTEnabled, getThreadById, prepareThreadsFromReceivedPosts, queryThreadsInTeam} from '@queries/servers/thread'; @@ -18,7 +16,7 @@ import {dismissAllModalsAndPopToRoot, goToScreen} from '@screens/navigation'; import EphemeralStore from '@store/ephemeral_store'; import NavigationStore from '@store/navigation_store'; import {isTablet} from '@utils/helpers'; -import {changeOpacity, setThemeDefaults, updateThemeIfNeeded} from '@utils/theme'; +import {changeOpacity} from '@utils/theme'; import type Model from '@nozbe/watermelondb/Model'; @@ -95,20 +93,6 @@ export const switchToThread = async (serverUrl: string, rootId: string, isFromNo } } - let theme = EphemeralStore.theme; - if (!theme) { - theme = getDefaultThemeByAppearance(); - - // When opening the app from a push notification the theme may not be set in the EphemeralStore - // causing the goToScreen to use the Appearance theme instead and that causes the screen background color to potentially - // not match the theme - const themes = await queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_THEME, teamId).fetch(); - if (themes.length) { - theme = setThemeDefaults(JSON.parse(themes[0].value) as Theme); - } - updateThemeIfNeeded(theme!, true); - } - // Modal right buttons const rightButtons = []; @@ -158,7 +142,7 @@ export const switchToThread = async (serverUrl: string, rootId: string, isFromNo text: title, }, subtitle: { - color: changeOpacity(theme!.sidebarHeaderTextColor, 0.72), + color: changeOpacity(EphemeralStore.theme!.sidebarHeaderTextColor, 0.72), text: subtitle, }, noBorder: true, diff --git a/app/actions/remote/entry/notification.ts b/app/actions/remote/entry/notification.ts index 0bdfe0d49..f7486de54 100644 --- a/app/actions/remote/entry/notification.ts +++ b/app/actions/remote/entry/notification.ts @@ -3,16 +3,20 @@ import {switchToChannelById} from '@actions/remote/channel'; import {fetchAndSwitchToThread} from '@actions/remote/thread'; -import {Screens} from '@constants'; +import {Preferences, Screens} from '@constants'; +import {getDefaultThemeByAppearance} from '@context/theme'; import DatabaseManager from '@database/manager'; import {getMyChannel} from '@queries/servers/channel'; +import {queryPreferencesByCategoryAndName} from '@queries/servers/preference'; import {getCommonSystemValues, getCurrentTeamId, getWebSocketLastDisconnected, setCurrentTeamAndChannelId} from '@queries/servers/system'; import {getMyTeamById} from '@queries/servers/team'; import {getIsCRTEnabled} from '@queries/servers/thread'; import {getCurrentUser} from '@queries/servers/user'; +import EphemeralStore from '@store/ephemeral_store'; import NavigationStore from '@store/navigation_store'; import {isTablet} from '@utils/helpers'; import {emitNotificationError} from '@utils/notification'; +import {setThemeDefaults, updateThemeIfNeeded} from '@utils/theme'; import {deferredAppEntryActions, entry, syncOtherServers} from './common'; @@ -51,6 +55,18 @@ export async function pushNotificationEntry(serverUrl: string, notification: Not const isCRTEnabled = await getIsCRTEnabled(database); const isThreadNotification = isCRTEnabled && Boolean(rootId); + if (!EphemeralStore.theme) { + // When opening the app from a push notification the theme may not be set in the EphemeralStore + // causing the goToScreen to use the Appearance theme instead and that causes the screen background color to potentially + // not match the theme + const themes = await queryPreferencesByCategoryAndName(database, Preferences.CATEGORY_THEME, teamId).fetch(); + let theme = getDefaultThemeByAppearance(); + if (themes.length) { + theme = setThemeDefaults(JSON.parse(themes[0].value) as Theme); + } + updateThemeIfNeeded(theme, true); + } + await NavigationStore.waitUntilScreenHasLoaded(Screens.HOME); let switchedToScreen = false;