diff --git a/packages/mobile/src/App.tsx b/packages/mobile/src/App.tsx index f6a52073d..f339ebd68 100644 --- a/packages/mobile/src/App.tsx +++ b/packages/mobile/src/App.tsx @@ -5,6 +5,7 @@ import { ApplicationGroup } from '@Lib/ApplicationGroup' import { navigationRef } from '@Lib/NavigationService' import { DefaultTheme, NavigationContainer } from '@react-navigation/native' import { ApplicationGroupContext } from '@Root/ApplicationGroupContext' +import { EnvironmentContext } from '@Root/EnvironmentContext' import { MobileThemeVariables } from '@Root/Style/Themes/styled-components' import { ApplicationGroupEvent, DeinitMode, DeinitSource } from '@standardnotes/snjs' import { ThemeService, ThemeServiceContext } from '@Style/ThemeService' @@ -111,11 +112,13 @@ const AppComponent: React.FC<{ {themeService.current && ( <> - - - - - + + + + + + + diff --git a/packages/mobile/src/EnvironmentContext.tsx b/packages/mobile/src/EnvironmentContext.tsx new file mode 100644 index 000000000..382ca6cb4 --- /dev/null +++ b/packages/mobile/src/EnvironmentContext.tsx @@ -0,0 +1,6 @@ +import { TEnvironment } from '@Root/App' +import React from 'react' + +export const EnvironmentContext = React.createContext(undefined) + +export const SafeEnvironmentContext = EnvironmentContext as React.Context diff --git a/packages/mobile/src/Hooks/useSafeEnvironmentContext.ts b/packages/mobile/src/Hooks/useSafeEnvironmentContext.ts new file mode 100644 index 000000000..65820046c --- /dev/null +++ b/packages/mobile/src/Hooks/useSafeEnvironmentContext.ts @@ -0,0 +1,8 @@ +import { TEnvironment } from '@Root/App' +import { EnvironmentContext } from '@Root/EnvironmentContext' +import { useContext } from 'react' + +export const useSafeEnvironmentContext = () => { + const env = useContext(EnvironmentContext) as TEnvironment + return env +} diff --git a/packages/mobile/src/Lib/Interface.ts b/packages/mobile/src/Lib/Interface.ts index 370da7490..25a5bb6cc 100644 --- a/packages/mobile/src/Lib/Interface.ts +++ b/packages/mobile/src/Lib/Interface.ts @@ -1,3 +1,4 @@ +import { IsDev } from '@Lib/Utils' import AsyncStorage from '@react-native-community/async-storage' import SNReactNative from '@standardnotes/react-native-utils' import { @@ -315,7 +316,9 @@ export class MobileDeviceInterface implements DeviceInterface { } performSoftReset() { - SNReactNative.exitApp() + if (IsDev) { + SNReactNative.exitApp() + } } // eslint-disable-next-line @typescript-eslint/no-empty-function diff --git a/packages/mobile/src/Screens/Settings/Sections/OptionsSection.tsx b/packages/mobile/src/Screens/Settings/Sections/OptionsSection.tsx index 4cf618580..748311151 100644 --- a/packages/mobile/src/Screens/Settings/Sections/OptionsSection.tsx +++ b/packages/mobile/src/Screens/Settings/Sections/OptionsSection.tsx @@ -1,4 +1,5 @@ import { useSignedIn } from '@Lib/SnjsHelperHooks' +import { isUnfinishedFeaturesEnabled } from '@Lib/Utils' import { useNavigation } from '@react-navigation/native' import { ButtonCell } from '@Root/Components/ButtonCell' import { SectionedAccessoryTableCell } from '@Root/Components/SectionedAccessoryTableCell' @@ -6,6 +7,7 @@ import { SectionedOptionsTableCell } from '@Root/Components/SectionedOptionsTabl import { SectionHeader } from '@Root/Components/SectionHeader' import { TableSection } from '@Root/Components/TableSection' import { useSafeApplicationContext } from '@Root/Hooks/useSafeApplicationContext' +import { useSafeEnvironmentContext } from '@Root/Hooks/useSafeEnvironmentContext' import { ModalStackNavigationProp } from '@Root/ModalStack' import { SCREEN_MANAGE_SESSIONS, SCREEN_SETTINGS } from '@Root/Screens/screens' import { ButtonType, PrefKey } from '@standardnotes/snjs' @@ -26,6 +28,7 @@ export const OptionsSection = ({ title, encryptionAvailable }: Props) => { const [signedIn] = useSignedIn() const navigation = useNavigation['navigation']>() + const env = useSafeEnvironmentContext() // State const [importing, setImporting] = useState(false) @@ -76,14 +79,14 @@ export const OptionsSection = ({ title, encryptionAvailable }: Props) => { }, [encryptionAvailable]) const destroyLocalData = async () => { - if ( - await application.alertService.confirm( - 'Signing out will remove all data from this device, including notes and tags. Make sure your data is synced before proceeding.', - 'Sign Out?', - 'Sign Out', - ButtonType.Danger, - ) - ) { + let signoutText = + 'Signing out will remove all data from this device, including notes and tags. Make sure your data is synced before proceeding.' + + if (isUnfinishedFeaturesEnabled(env)) { + signoutText += '\n\nYour app will quit after sign out completes.' + } + + if (await application.alertService.confirm(signoutText, 'Sign Out?', 'Sign Out', ButtonType.Danger)) { await application.user.signOut() } } diff --git a/packages/mobile/src/Screens/Settings/Sections/WorkspacesSection.tsx b/packages/mobile/src/Screens/Settings/Sections/WorkspacesSection.tsx index c97ce20f7..92c5e2e85 100644 --- a/packages/mobile/src/Screens/Settings/Sections/WorkspacesSection.tsx +++ b/packages/mobile/src/Screens/Settings/Sections/WorkspacesSection.tsx @@ -67,7 +67,7 @@ export const WorkspacesSection = () => { break case Remove: message = - 'This action will remove this workspace and its related data from this device. Your synced data will not be affected.' + 'This action will remove this workspace and its related data from this device. Your synced data will not be affected.\n\nYour app will quit after workspace removal completes.' buttonText = 'Delete Workspace' buttonType = Danger break diff --git a/packages/mobile/src/Screens/Settings/Settings.tsx b/packages/mobile/src/Screens/Settings/Settings.tsx index 15ad7850d..7739ea671 100644 --- a/packages/mobile/src/Screens/Settings/Settings.tsx +++ b/packages/mobile/src/Screens/Settings/Settings.tsx @@ -1,5 +1,7 @@ import { useSignedIn } from '@Lib/SnjsHelperHooks' +import { isUnfinishedFeaturesEnabled } from '@Lib/Utils' import { useSafeApplicationContext } from '@Root/Hooks/useSafeApplicationContext' +import { useSafeEnvironmentContext } from '@Root/Hooks/useSafeEnvironmentContext' import { ModalStackNavigationProp } from '@Root/ModalStack' import { SCREEN_SETTINGS } from '@Root/Screens/screens' import { FilesSection } from '@Screens/Settings/Sections/FilesSection' @@ -20,6 +22,7 @@ type Props = ModalStackNavigationProp export const Settings = (props: Props) => { // Context const application = useSafeApplicationContext() + const env = useSafeEnvironmentContext() // State const [hasPasscode, setHasPasscode] = useState(() => Boolean(application.hasPasscode())) @@ -55,7 +58,7 @@ export const Settings = (props: Props) => { - + {isUnfinishedFeaturesEnabled(env) && } {application.hasAccount() && isEntitledToFiles && }