expo-dev-menu 6.1.6 → 6.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/android/build.gradle +2 -2
- package/android/src/debug/java/expo/modules/devmenu/DevMenuActivity.kt +15 -0
- package/android/src/main/res/values/styles.xml +5 -1
- package/app/components/AppProviders.tsx +8 -5
- package/app/components/Main.tsx +237 -230
- package/assets/EXDevMenuApp.android.js +54 -40
- package/assets/EXDevMenuApp.ios.js +54 -40
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -10,6 +10,18 @@
|
|
|
10
10
|
|
|
11
11
|
### 💡 Others
|
|
12
12
|
|
|
13
|
+
## 6.1.8 — 2025-04-30
|
|
14
|
+
|
|
15
|
+
### 🐛 Bug fixes
|
|
16
|
+
|
|
17
|
+
- Fixed Property "require" doesn't exist error. ([#36484](https://github.com/expo/expo/pull/36484) by [@kudo](https://github.com/kudo))
|
|
18
|
+
|
|
19
|
+
## 6.1.7 — 2025-04-28
|
|
20
|
+
|
|
21
|
+
### 💡 Others
|
|
22
|
+
|
|
23
|
+
- [Android] Enable edge-to-edge. ([#36370](https://github.com/expo/expo/pull/36370) by [@behenate](https://github.com/behenate))
|
|
24
|
+
|
|
13
25
|
## 6.1.6 — 2025-04-25
|
|
14
26
|
|
|
15
27
|
_This version does not introduce any user-facing changes._
|
package/android/build.gradle
CHANGED
|
@@ -4,7 +4,7 @@ plugins {
|
|
|
4
4
|
}
|
|
5
5
|
|
|
6
6
|
group = 'host.exp.exponent'
|
|
7
|
-
version = '6.1.
|
|
7
|
+
version = '6.1.8'
|
|
8
8
|
|
|
9
9
|
expoModule {
|
|
10
10
|
canBePublished false
|
|
@@ -14,7 +14,7 @@ android {
|
|
|
14
14
|
namespace "expo.modules.devmenu"
|
|
15
15
|
defaultConfig {
|
|
16
16
|
versionCode 10
|
|
17
|
-
versionName '6.1.
|
|
17
|
+
versionName '6.1.8'
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
sourceSets {
|
|
@@ -9,7 +9,11 @@ import android.view.View
|
|
|
9
9
|
import android.view.ViewGroup
|
|
10
10
|
import android.widget.FrameLayout
|
|
11
11
|
import androidx.coordinatorlayout.widget.CoordinatorLayout
|
|
12
|
+
import androidx.core.view.ViewCompat
|
|
13
|
+
import androidx.core.view.WindowCompat
|
|
14
|
+
import androidx.core.view.WindowInsetsCompat
|
|
12
15
|
import androidx.core.view.doOnLayout
|
|
16
|
+
import androidx.core.view.updatePadding
|
|
13
17
|
import com.facebook.react.ReactActivity
|
|
14
18
|
import com.facebook.react.ReactActivityDelegate
|
|
15
19
|
import com.facebook.react.ReactDelegate
|
|
@@ -126,10 +130,21 @@ class DevMenuActivity : ReactActivity() {
|
|
|
126
130
|
}
|
|
127
131
|
|
|
128
132
|
override fun setContentView(view: View?) {
|
|
133
|
+
// Enables edge-to-edge
|
|
134
|
+
WindowCompat.setDecorFitsSystemWindows(window, false)
|
|
135
|
+
|
|
129
136
|
super.setContentView(R.layout.bottom_sheet)
|
|
130
137
|
|
|
131
138
|
val mainLayout = findViewById<CoordinatorLayout>(R.id.main_layout)
|
|
132
139
|
val bottomSheet = findViewById<FrameLayout>(R.id.bottom_sheet)
|
|
140
|
+
|
|
141
|
+
// Adds transparent top padding to avoid the status bar
|
|
142
|
+
ViewCompat.setOnApplyWindowInsetsListener(bottomSheet) { view, windowInsets ->
|
|
143
|
+
val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
|
|
144
|
+
view.updatePadding(top = insets.top)
|
|
145
|
+
WindowInsetsCompat.CONSUMED
|
|
146
|
+
}
|
|
147
|
+
|
|
133
148
|
(view?.parent as? ViewGroup)?.removeView(view)
|
|
134
149
|
bottomSheet.addView(view)
|
|
135
150
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
-
<resources>
|
|
2
|
+
<resources xmlns:tools="http://schemas.android.com/tools">
|
|
3
3
|
|
|
4
4
|
<style name="Theme.AppCompat.Transparent.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
|
|
5
5
|
<item name="android:windowIsTranslucent">true</item>
|
|
@@ -9,6 +9,10 @@
|
|
|
9
9
|
<item name="android:windowIsFloating">false</item>
|
|
10
10
|
<item name="android:backgroundDimEnabled">false</item>
|
|
11
11
|
<item name="android:windowAnimationStyle">@null</item>
|
|
12
|
+
<item name="android:enforceNavigationBarContrast" tools:targetApi="q">true</item>
|
|
13
|
+
<item name="android:navigationBarColor">@android:color/transparent</item>
|
|
14
|
+
<item name="android:statusBarColor">@android:color/transparent</item>
|
|
15
|
+
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
|
|
12
16
|
</style>
|
|
13
17
|
|
|
14
18
|
</resources>
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ThemeProvider } from 'expo-dev-client-components';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
|
|
4
|
+
import { SafeAreaProvider } from '../../vendored/react-native-safe-area-context/src';
|
|
4
5
|
import { AppInfoContextProvider, AppInfoContextProviderProps } from '../hooks/useAppInfo';
|
|
5
6
|
import { DevSettingsProviderProps, DevSettingsProvider } from '../hooks/useDevSettings';
|
|
6
7
|
import { MenuPreferencesProvider, MenuPreferencesProviderProps } from '../hooks/useMenuPreferences';
|
|
@@ -20,11 +21,13 @@ export function AppProviders({
|
|
|
20
21
|
}: AppProvidersProps) {
|
|
21
22
|
return (
|
|
22
23
|
<DevSettingsProvider devSettings={devSettings}>
|
|
23
|
-
<
|
|
24
|
-
<
|
|
25
|
-
<
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
<SafeAreaProvider>
|
|
25
|
+
<AppInfoContextProvider appInfo={appInfo}>
|
|
26
|
+
<MenuPreferencesProvider menuPreferences={menuPreferences}>
|
|
27
|
+
<ThemeProvider themePreference="no-preference">{children}</ThemeProvider>
|
|
28
|
+
</MenuPreferencesProvider>
|
|
29
|
+
</AppInfoContextProvider>
|
|
30
|
+
</SafeAreaProvider>
|
|
28
31
|
</DevSettingsProvider>
|
|
29
32
|
);
|
|
30
33
|
}
|
package/app/components/Main.tsx
CHANGED
|
@@ -24,6 +24,7 @@ import * as React from 'react';
|
|
|
24
24
|
import { Platform, ScrollView, Switch } from 'react-native';
|
|
25
25
|
|
|
26
26
|
import { Onboarding } from './Onboarding';
|
|
27
|
+
import { SafeAreaView } from '../../vendored/react-native-safe-area-context/src';
|
|
27
28
|
import { useAppInfo } from '../hooks/useAppInfo';
|
|
28
29
|
import { useClipboard } from '../hooks/useClipboard';
|
|
29
30
|
import { useDevSettings } from '../hooks/useDevSettings';
|
|
@@ -64,279 +65,285 @@ export function Main({ registeredCallbacks = [], isDevice }: MainProps) {
|
|
|
64
65
|
|
|
65
66
|
return (
|
|
66
67
|
<View flex="1" bg="secondary">
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
<Row align="
|
|
71
|
-
<
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
68
|
+
{/*Use default edges for android, do not enable for iOS*/}
|
|
69
|
+
<SafeAreaView style={{ flex: 1 }} edges={Platform.OS === 'android' ? undefined : []}>
|
|
70
|
+
<View py="medium" bg="default">
|
|
71
|
+
<Row align="start">
|
|
72
|
+
<Spacer.Horizontal size="medium" />
|
|
73
|
+
<Row align="center" shrink="1">
|
|
74
|
+
<View>
|
|
75
|
+
<View height="xl" width="xl" overflow="hidden" bg="secondary" rounded="medium">
|
|
76
|
+
{Boolean(appInfo?.appIcon) && (
|
|
77
|
+
<Image
|
|
78
|
+
source={{ uri: appInfo?.appIcon }}
|
|
79
|
+
style={{ flex: 1, resizeMode: 'contain' }}
|
|
80
|
+
/>
|
|
81
|
+
)}
|
|
82
|
+
</View>
|
|
79
83
|
</View>
|
|
80
|
-
</View>
|
|
81
84
|
|
|
82
|
-
|
|
85
|
+
<Spacer.Horizontal size="small" />
|
|
83
86
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
87
|
+
<View shrink="1">
|
|
88
|
+
<Row style={{ flexWrap: 'wrap' }}>
|
|
89
|
+
<Heading weight="bold" numberOfLines={1}>
|
|
90
|
+
{appInfo?.appName}
|
|
91
|
+
</Heading>
|
|
92
|
+
</Row>
|
|
90
93
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
94
|
+
{Boolean(appInfo?.runtimeVersion) && (
|
|
95
|
+
<>
|
|
96
|
+
<Text size="small" color="secondary">
|
|
97
|
+
{`Runtime version: ${appInfo?.runtimeVersion}`}
|
|
98
|
+
</Text>
|
|
99
|
+
</>
|
|
100
|
+
)}
|
|
98
101
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
102
|
+
{Boolean(appInfo?.sdkVersion) && !appInfo?.runtimeVersion && (
|
|
103
|
+
<>
|
|
104
|
+
<Text size="small" color="secondary">
|
|
105
|
+
{`SDK version: ${appInfo?.sdkVersion}`}
|
|
106
|
+
</Text>
|
|
107
|
+
</>
|
|
108
|
+
)}
|
|
109
|
+
</View>
|
|
107
110
|
|
|
108
|
-
|
|
111
|
+
<Spacer.Horizontal />
|
|
109
112
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
113
|
+
<View width="large" style={{ alignSelf: 'flex-start' }}>
|
|
114
|
+
<Button.FadeOnPressContainer onPress={hideMenu} bg="ghost" rounded="full">
|
|
115
|
+
<View padding="micro">
|
|
116
|
+
<XIcon />
|
|
117
|
+
</View>
|
|
118
|
+
</Button.FadeOnPressContainer>
|
|
119
|
+
</View>
|
|
117
120
|
|
|
118
|
-
|
|
121
|
+
<Spacer.Horizontal size="small" />
|
|
122
|
+
</Row>
|
|
119
123
|
</Row>
|
|
120
|
-
</
|
|
121
|
-
</View>
|
|
122
|
-
|
|
123
|
-
<Divider />
|
|
124
|
-
<View style={{ flex: 1 }}>
|
|
125
|
-
<ScrollView nestedScrollEnabled>
|
|
126
|
-
{Boolean(appInfo?.hostUrl) && (
|
|
127
|
-
<>
|
|
128
|
-
<View bg="default" padding="medium">
|
|
129
|
-
<Text color="secondary">Connected to:</Text>
|
|
124
|
+
</View>
|
|
130
125
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
<Spacer.Horizontal size="small" />
|
|
139
|
-
<Row flex="1" justify="between">
|
|
140
|
-
<Text type="mono" numberOfLines={2} size="small">
|
|
141
|
-
{appInfo?.hostUrl}
|
|
142
|
-
</Text>
|
|
126
|
+
<Divider />
|
|
127
|
+
<View style={{ flex: 1 }}>
|
|
128
|
+
<ScrollView nestedScrollEnabled>
|
|
129
|
+
{Boolean(appInfo?.hostUrl) && (
|
|
130
|
+
<>
|
|
131
|
+
<View bg="default" padding="medium">
|
|
132
|
+
<Text color="secondary">Connected to:</Text>
|
|
143
133
|
|
|
144
|
-
|
|
134
|
+
<Spacer.Vertical size="small" />
|
|
135
|
+
<Button.FadeOnPressContainer
|
|
136
|
+
bg="default"
|
|
137
|
+
onPress={onCopyUrlPress}
|
|
138
|
+
testID="main.copyUrlButton">
|
|
139
|
+
<Row align="center">
|
|
140
|
+
<StatusIndicator style={{ width: 10, height: 10 }} status="success" />
|
|
141
|
+
<Spacer.Horizontal size="small" />
|
|
142
|
+
<Row flex="1" justify="between">
|
|
143
|
+
<Text type="mono" numberOfLines={2} size="small">
|
|
144
|
+
{appInfo?.hostUrl}
|
|
145
|
+
</Text>
|
|
146
|
+
|
|
147
|
+
<ClipboardIcon />
|
|
148
|
+
</Row>
|
|
149
|
+
<Spacer.Horizontal size="small" />
|
|
145
150
|
</Row>
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
</Button.FadeOnPressContainer>
|
|
149
|
-
</View>
|
|
151
|
+
</Button.FadeOnPressContainer>
|
|
152
|
+
</View>
|
|
150
153
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
{registeredCallbacks.length > 0 && (
|
|
156
|
-
<View>
|
|
157
|
-
<View mx="large">
|
|
158
|
-
<Heading size="small" color="secondary">
|
|
159
|
-
Custom Menu Items
|
|
160
|
-
</Heading>
|
|
161
|
-
</View>
|
|
154
|
+
<Divider />
|
|
155
|
+
</>
|
|
156
|
+
)}
|
|
162
157
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
return (
|
|
172
|
-
<View key={name + index}>
|
|
173
|
-
<View
|
|
174
|
-
bg="default"
|
|
175
|
-
roundedTop={isFirst ? 'large' : 'none'}
|
|
176
|
-
roundedBottom={isLast ? 'large' : 'none'}>
|
|
177
|
-
<SettingsRowButton label={name} icon={null} onPress={onPress} />
|
|
178
|
-
</View>
|
|
179
|
-
{!isLast && <Divider />}
|
|
180
|
-
</View>
|
|
181
|
-
);
|
|
182
|
-
})}
|
|
183
|
-
</View>
|
|
158
|
+
{registeredCallbacks.length > 0 && (
|
|
159
|
+
<View>
|
|
160
|
+
<View mx="large">
|
|
161
|
+
<Heading size="small" color="secondary">
|
|
162
|
+
Custom Menu Items
|
|
163
|
+
</Heading>
|
|
164
|
+
</View>
|
|
184
165
|
|
|
185
|
-
|
|
186
|
-
</View>
|
|
187
|
-
)}
|
|
166
|
+
<Spacer.Vertical size="small" />
|
|
188
167
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
168
|
+
<View mx="small">
|
|
169
|
+
{registeredCallbacks.map((name, index, arr) => {
|
|
170
|
+
const isFirst = index === 0;
|
|
171
|
+
const isLast = index === arr.length - 1;
|
|
172
|
+
const onPress = () => fireCallbackAsync(name);
|
|
173
|
+
|
|
174
|
+
return (
|
|
175
|
+
<View key={name + index}>
|
|
176
|
+
<View
|
|
177
|
+
bg="default"
|
|
178
|
+
roundedTop={isFirst ? 'large' : 'none'}
|
|
179
|
+
roundedBottom={isLast ? 'large' : 'none'}>
|
|
180
|
+
<SettingsRowButton label={name} icon={null} onPress={onPress} />
|
|
181
|
+
</View>
|
|
182
|
+
{!isLast && <Divider />}
|
|
183
|
+
</View>
|
|
184
|
+
);
|
|
185
|
+
})}
|
|
204
186
|
</View>
|
|
205
|
-
|
|
187
|
+
|
|
188
|
+
<Spacer.Vertical size="medium" />
|
|
189
|
+
</View>
|
|
206
190
|
)}
|
|
207
|
-
</View>
|
|
208
191
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
label="
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
192
|
+
<View margin="small">
|
|
193
|
+
<View
|
|
194
|
+
{...(isDevLauncherInstalled ? { roundedTop: 'large' } : { rounded: 'large' })}
|
|
195
|
+
bg="default">
|
|
196
|
+
<SettingsRowButton label="Reload" icon={<RefreshIcon />} onPress={actions.reload} />
|
|
197
|
+
</View>
|
|
198
|
+
{isDevLauncherInstalled && (
|
|
199
|
+
<>
|
|
200
|
+
<Divider />
|
|
201
|
+
<View roundedBottom="large" bg="default">
|
|
202
|
+
<SettingsRowButton
|
|
203
|
+
label="Go home"
|
|
204
|
+
icon={<HomeFilledIcon tintColor={lightTheme.icon.default} />}
|
|
205
|
+
onPress={actions.navigateToLauncher}
|
|
206
|
+
/>
|
|
207
|
+
</View>
|
|
208
|
+
</>
|
|
209
|
+
)}
|
|
226
210
|
</View>
|
|
227
|
-
|
|
228
|
-
|
|
211
|
+
|
|
212
|
+
<View mx="small">
|
|
213
|
+
<View bg="default" roundedTop="large">
|
|
214
|
+
<SettingsRowButton
|
|
215
|
+
disabled={!devSettings.isPerfMonitorAvailable}
|
|
216
|
+
label="Toggle performance monitor"
|
|
217
|
+
icon={<PerformanceIcon />}
|
|
218
|
+
onPress={actions.togglePerformanceMonitor}
|
|
219
|
+
/>
|
|
220
|
+
</View>
|
|
221
|
+
<Divider />
|
|
229
222
|
<View bg="default">
|
|
230
223
|
<SettingsRowButton
|
|
231
|
-
disabled={!devSettings.
|
|
232
|
-
label="
|
|
233
|
-
icon={<
|
|
234
|
-
onPress={actions.
|
|
224
|
+
disabled={!devSettings.isElementInspectorAvailable}
|
|
225
|
+
label="Toggle element inspector"
|
|
226
|
+
icon={<InspectElementIcon />}
|
|
227
|
+
onPress={actions.toggleElementInspector}
|
|
228
|
+
/>
|
|
229
|
+
</View>
|
|
230
|
+
<Divider />
|
|
231
|
+
{devSettings.isJSInspectorAvailable && (
|
|
232
|
+
<View bg="default">
|
|
233
|
+
<SettingsRowButton
|
|
234
|
+
disabled={!devSettings.isJSInspectorAvailable}
|
|
235
|
+
label="Open JS debugger"
|
|
236
|
+
icon={<DebugIcon />}
|
|
237
|
+
onPress={actions.openJSInspector}
|
|
238
|
+
/>
|
|
239
|
+
</View>
|
|
240
|
+
)}
|
|
241
|
+
<Divider />
|
|
242
|
+
<View bg="default" roundedBottom="large">
|
|
243
|
+
<SettingsRowSwitch
|
|
244
|
+
disabled={!devSettings.isHotLoadingAvailable}
|
|
245
|
+
testID="fast-refresh"
|
|
246
|
+
label="Fast refresh"
|
|
247
|
+
icon={<RunIcon />}
|
|
248
|
+
isEnabled={devSettings.isHotLoadingEnabled}
|
|
249
|
+
setIsEnabled={actions.toggleFastRefresh}
|
|
235
250
|
/>
|
|
236
251
|
</View>
|
|
237
|
-
)}
|
|
238
|
-
<Divider />
|
|
239
|
-
<View bg="default" roundedBottom="large">
|
|
240
|
-
<SettingsRowSwitch
|
|
241
|
-
disabled={!devSettings.isHotLoadingAvailable}
|
|
242
|
-
testID="fast-refresh"
|
|
243
|
-
label="Fast refresh"
|
|
244
|
-
icon={<RunIcon />}
|
|
245
|
-
isEnabled={devSettings.isHotLoadingEnabled}
|
|
246
|
-
setIsEnabled={actions.toggleFastRefresh}
|
|
247
|
-
/>
|
|
248
252
|
</View>
|
|
249
|
-
</View>
|
|
250
253
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
+
{appInfo?.engine === 'Hermes' && (
|
|
255
|
+
<>
|
|
256
|
+
<Spacer.Vertical size="large" />
|
|
254
257
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
258
|
+
<View mx="small">
|
|
259
|
+
<View bg="warning" padding="medium" rounded="medium" border="warning">
|
|
260
|
+
<Row align="center">
|
|
261
|
+
<WarningIcon />
|
|
259
262
|
|
|
260
|
-
|
|
263
|
+
<Spacer.Horizontal size="tiny" />
|
|
261
264
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
265
|
+
<Heading color="warning" size="small" style={{ top: 1 }}>
|
|
266
|
+
Warning
|
|
267
|
+
</Heading>
|
|
268
|
+
</Row>
|
|
266
269
|
|
|
267
|
-
|
|
270
|
+
<Spacer.Vertical size="small" />
|
|
268
271
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
272
|
+
<View>
|
|
273
|
+
<Text size="small" color="warning">
|
|
274
|
+
Debugging not working? Try manually reloading first
|
|
275
|
+
</Text>
|
|
276
|
+
</View>
|
|
273
277
|
</View>
|
|
274
278
|
</View>
|
|
275
|
-
</View>
|
|
276
|
-
</>
|
|
277
|
-
)}
|
|
278
|
-
|
|
279
|
-
{!hasDisabledDevSettingOption && (
|
|
280
|
-
<>
|
|
281
|
-
<Spacer.Vertical size="large" />
|
|
282
|
-
<Text size="small" color="secondary" align="center">
|
|
283
|
-
Some settings are unavailable for this development build.
|
|
284
|
-
</Text>
|
|
285
|
-
</>
|
|
286
|
-
)}
|
|
287
|
-
|
|
288
|
-
<Spacer.Vertical size="large" />
|
|
289
|
-
|
|
290
|
-
<View mx="small" rounded="large" overflow="hidden">
|
|
291
|
-
<AppInfoRow title="Version" value={appInfo?.appVersion || 'Unknown'} />
|
|
292
|
-
<Divider />
|
|
293
|
-
{Boolean(appInfo?.runtimeVersion) && (
|
|
294
|
-
<>
|
|
295
|
-
<AppInfoRow title="Runtime version" value={appInfo?.runtimeVersion || 'Unknown'} />
|
|
296
|
-
<Divider />
|
|
297
279
|
</>
|
|
298
280
|
)}
|
|
299
281
|
|
|
300
|
-
{
|
|
282
|
+
{!hasDisabledDevSettingOption && (
|
|
301
283
|
<>
|
|
302
|
-
<
|
|
303
|
-
<
|
|
284
|
+
<Spacer.Vertical size="large" />
|
|
285
|
+
<Text size="small" color="secondary" align="center">
|
|
286
|
+
Some settings are unavailable for this development build.
|
|
287
|
+
</Text>
|
|
304
288
|
</>
|
|
305
289
|
)}
|
|
306
290
|
|
|
307
|
-
<
|
|
308
|
-
bg="default"
|
|
309
|
-
roundedTop="none"
|
|
310
|
-
roundedBottom="large"
|
|
311
|
-
onPress={onCopyAppInfoPress}
|
|
312
|
-
disabled={hasCopiedAppInfoContent}>
|
|
313
|
-
<Row px="medium" py="small" align="center" bg="default">
|
|
314
|
-
<Text color="link" size="medium">
|
|
315
|
-
{hasCopiedAppInfoContent ? 'Copied to clipboard!' : 'Tap to Copy All'}
|
|
316
|
-
</Text>
|
|
317
|
-
</Row>
|
|
318
|
-
</Button.FadeOnPressContainer>
|
|
319
|
-
</View>
|
|
291
|
+
<Spacer.Vertical size="large" />
|
|
320
292
|
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
293
|
+
<View mx="small" rounded="large" overflow="hidden">
|
|
294
|
+
<AppInfoRow title="Version" value={appInfo?.appVersion || 'Unknown'} />
|
|
295
|
+
<Divider />
|
|
296
|
+
{Boolean(appInfo?.runtimeVersion) && (
|
|
297
|
+
<>
|
|
298
|
+
<AppInfoRow
|
|
299
|
+
title="Runtime version"
|
|
300
|
+
value={appInfo?.runtimeVersion || 'Unknown'}
|
|
301
|
+
/>
|
|
302
|
+
<Divider />
|
|
303
|
+
</>
|
|
304
|
+
)}
|
|
333
305
|
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
306
|
+
{Boolean(appInfo?.sdkVersion) && !appInfo?.runtimeVersion && (
|
|
307
|
+
<>
|
|
308
|
+
<AppInfoRow title="SDK Version" value={appInfo?.sdkVersion || 'Unknown'} />
|
|
309
|
+
<Divider />
|
|
310
|
+
</>
|
|
311
|
+
)}
|
|
337
312
|
|
|
338
|
-
|
|
339
|
-
|
|
313
|
+
<Button.FadeOnPressContainer
|
|
314
|
+
bg="default"
|
|
315
|
+
roundedTop="none"
|
|
316
|
+
roundedBottom="large"
|
|
317
|
+
onPress={onCopyAppInfoPress}
|
|
318
|
+
disabled={hasCopiedAppInfoContent}>
|
|
319
|
+
<Row px="medium" py="small" align="center" bg="default">
|
|
320
|
+
<Text color="link" size="medium">
|
|
321
|
+
{hasCopiedAppInfoContent ? 'Copied to clipboard!' : 'Tap to Copy All'}
|
|
322
|
+
</Text>
|
|
323
|
+
</Row>
|
|
324
|
+
</Button.FadeOnPressContainer>
|
|
325
|
+
</View>
|
|
326
|
+
|
|
327
|
+
<Spacer.Vertical size="large" />
|
|
328
|
+
<View mx="small" rounded="large" overflow="hidden">
|
|
329
|
+
<Button.FadeOnPressContainer
|
|
330
|
+
bg="default"
|
|
331
|
+
roundedTop="none"
|
|
332
|
+
roundedBottom="large"
|
|
333
|
+
onPress={actions.openRNDevMenu}>
|
|
334
|
+
<Row px="medium" py="small" align="center" bg="default">
|
|
335
|
+
<Text>Open React Native dev menu</Text>
|
|
336
|
+
</Row>
|
|
337
|
+
</Button.FadeOnPressContainer>
|
|
338
|
+
</View>
|
|
339
|
+
|
|
340
|
+
{Platform.OS === 'android' && <View style={{ height: 50 }} />}
|
|
341
|
+
<Spacer.Vertical size="large" />
|
|
342
|
+
</ScrollView>
|
|
343
|
+
|
|
344
|
+
<Onboarding isDevice={isDevice} />
|
|
345
|
+
</View>
|
|
346
|
+
</SafeAreaView>
|
|
340
347
|
</View>
|
|
341
348
|
);
|
|
342
349
|
}
|