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 && }