expo-dev-launcher 6.0.7 → 6.0.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 +4 -0
- package/android/build.gradle +2 -2
- package/android/src/debug/java/expo/modules/devlauncher/compose/DevLauncherBottomTabsNavigator.kt +2 -33
- package/android/src/debug/java/expo/modules/devlauncher/compose/primitives/Accordion.kt +8 -11
- package/android/src/debug/java/expo/modules/devlauncher/compose/primitives/AsyncImage.kt +17 -8
- package/android/src/debug/java/expo/modules/devlauncher/compose/primitives/CircularProgressBar.kt +0 -1
- package/android/src/debug/java/expo/modules/devlauncher/compose/primitives/DefaultScaffold.kt +4 -2
- package/android/src/debug/java/expo/modules/devlauncher/compose/routes/CrashReport.kt +1 -1
- package/android/src/debug/java/expo/modules/devlauncher/compose/routes/Home.kt +1 -1
- package/android/src/debug/java/expo/modules/devlauncher/compose/routes/Profile.kt +90 -85
- package/android/src/debug/java/expo/modules/devlauncher/compose/routes/Routes.kt +3 -0
- package/android/src/debug/java/expo/modules/devlauncher/compose/routes/Settings.kt +1 -1
- package/android/src/debug/java/expo/modules/devlauncher/compose/routes/Updates.kt +54 -44
- package/android/src/debug/java/expo/modules/devlauncher/compose/screens/BranchScreen.kt +11 -23
- package/android/src/debug/java/expo/modules/devlauncher/compose/screens/BranchesScreen.kt +17 -24
- package/android/src/debug/java/expo/modules/devlauncher/compose/screens/CrashReportScreen.kt +28 -130
- package/android/src/debug/java/expo/modules/devlauncher/compose/screens/ErrorScreen.kt +11 -8
- package/android/src/debug/java/expo/modules/devlauncher/compose/screens/HomeScreen.kt +84 -59
- package/android/src/debug/java/expo/modules/devlauncher/compose/screens/NoUpdatesScreen.kt +1 -1
- package/android/src/debug/java/expo/modules/devlauncher/compose/screens/SettingsScreen.kt +45 -49
- package/android/src/debug/java/expo/modules/devlauncher/compose/ui/AccountAvatar.kt +2 -6
- package/android/src/debug/java/expo/modules/devlauncher/compose/ui/AccountSelector.kt +3 -9
- package/android/src/debug/java/expo/modules/devlauncher/compose/ui/AppHeader.kt +5 -15
- package/android/src/debug/java/expo/modules/devlauncher/compose/ui/AppLoadingErrorDialog.kt +23 -6
- package/android/src/debug/java/expo/modules/devlauncher/compose/ui/BottomSheet.kt +4 -1
- package/android/src/debug/java/expo/modules/devlauncher/compose/ui/BottomTabBar.kt +30 -29
- package/android/src/debug/java/expo/modules/devlauncher/compose/ui/BottomTabButton.kt +7 -11
- package/android/src/debug/java/expo/modules/devlauncher/compose/ui/DefaultScreenContainer.kt +23 -0
- package/android/src/debug/java/expo/modules/devlauncher/compose/ui/FetchDevelopmentServersButton.kt +5 -12
- package/android/src/debug/java/expo/modules/devlauncher/compose/ui/LauncherIcons.kt +220 -0
- package/android/src/debug/java/expo/modules/devlauncher/compose/ui/RunningAppCard.kt +3 -10
- package/android/src/debug/java/expo/modules/devlauncher/compose/ui/ScanQRCodeButton.kt +5 -12
- package/android/src/debug/java/expo/modules/devlauncher/compose/ui/ServerUrlInput.kt +1 -10
- package/android/src/debug/java/expo/modules/devlauncher/compose/ui/StackTrace.kt +50 -0
- package/android/src/debug/java/expo/modules/devlauncher/compose/utils/Scrollbar.kt +65 -0
- package/android/src/debug/java/expo/modules/devlauncher/compose/utils/UrlUtils.kt +12 -0
- package/android/src/main/res/values/colors.xml +0 -3
- package/ios/SwiftUI/GraphQL/APIClient.swift +0 -4
- package/ios/SwiftUI/UpdatesTab/UpdateRow.swift +3 -1
- package/ios/SwiftUI/UpdatesTab/UpdatesListView.swift +37 -38
- package/ios/SwiftUI/UpdatesTab/UpdatesTabView.swift +9 -7
- package/package.json +4 -4
- package/android/src/debug/assets/Inter-Black.otf +0 -0
- package/android/src/debug/assets/Inter-Bold.otf +0 -0
- package/android/src/debug/assets/Inter-ExtraBold.otf +0 -0
- package/android/src/debug/assets/Inter-ExtraLight.otf +0 -0
- package/android/src/debug/assets/Inter-Light.otf +0 -0
- package/android/src/debug/assets/Inter-Medium.otf +0 -0
- package/android/src/debug/assets/Inter-Regular.otf +0 -0
- package/android/src/debug/assets/Inter-SemiBold.otf +0 -0
- package/android/src/debug/assets/Inter-Thin.otf +0 -0
- package/android/src/debug/java/expo/modules/devlauncher/launcher/errors/DevLauncherStackAdapter.kt +0 -39
- package/android/src/debug/res/drawable-mdpi/building_icon.png +0 -0
- package/android/src/debug/res/drawable-mdpi/check_icon.png +0 -0
- package/android/src/debug/res/drawable-mdpi/chevron_right_icon.png +0 -0
- package/android/src/debug/res/drawable-mdpi/home_icon.png +0 -0
- package/android/src/debug/res/drawable-mdpi/info_icon.png +0 -0
- package/android/src/debug/res/drawable-mdpi/qr_code.png +0 -0
- package/android/src/debug/res/drawable-mdpi/settings_icon.png +0 -0
- package/android/src/debug/res/drawable-mdpi/shake_device_icon.png +0 -0
- package/android/src/debug/res/drawable-mdpi/show_menu_at_launch_icon.png +0 -0
- package/android/src/debug/res/drawable-mdpi/terminal_icon.png +0 -0
- package/android/src/debug/res/drawable-mdpi/three_finger_long_press_icon.png +0 -0
- package/android/src/debug/res/drawable-mdpi/user_icon.png +0 -0
- package/android/src/debug/res/drawable-mdpi/x_icon.png +0 -0
- package/android/src/debug/res/drawable-night-mdpi/qr_code.png +0 -0
- package/android/src/debug/res/drawable-night-mdpi/shake_device_icon.png +0 -0
- package/android/src/debug/res/drawable-night-xhdpi/qr_code.png +0 -0
- package/android/src/debug/res/drawable-night-xhdpi/shake_device_icon.png +0 -0
- package/android/src/debug/res/drawable-night-xxhdpi/qr_code.png +0 -0
- package/android/src/debug/res/drawable-night-xxhdpi/shake_device_icon.png +0 -0
- package/android/src/debug/res/drawable-xhdpi/building_icon.png +0 -0
- package/android/src/debug/res/drawable-xhdpi/check_icon.png +0 -0
- package/android/src/debug/res/drawable-xhdpi/chevron_right_icon.png +0 -0
- package/android/src/debug/res/drawable-xhdpi/home_icon.png +0 -0
- package/android/src/debug/res/drawable-xhdpi/info_icon.png +0 -0
- package/android/src/debug/res/drawable-xhdpi/qr_code.png +0 -0
- package/android/src/debug/res/drawable-xhdpi/settings_icon.png +0 -0
- package/android/src/debug/res/drawable-xhdpi/shake_device_icon.png +0 -0
- package/android/src/debug/res/drawable-xhdpi/show_menu_at_launch_icon.png +0 -0
- package/android/src/debug/res/drawable-xhdpi/terminal_icon.png +0 -0
- package/android/src/debug/res/drawable-xhdpi/three_finger_long_press_icon.png +0 -0
- package/android/src/debug/res/drawable-xhdpi/user_icon.png +0 -0
- package/android/src/debug/res/drawable-xhdpi/x_icon.png +0 -0
- package/android/src/debug/res/drawable-xxhdpi/building_icon.png +0 -0
- package/android/src/debug/res/drawable-xxhdpi/check_icon.png +0 -0
- package/android/src/debug/res/drawable-xxhdpi/chevron_right_icon.png +0 -0
- package/android/src/debug/res/drawable-xxhdpi/home_icon.png +0 -0
- package/android/src/debug/res/drawable-xxhdpi/info_icon.png +0 -0
- package/android/src/debug/res/drawable-xxhdpi/qr_code.png +0 -0
- package/android/src/debug/res/drawable-xxhdpi/settings_icon.png +0 -0
- package/android/src/debug/res/drawable-xxhdpi/shake_device_icon.png +0 -0
- package/android/src/debug/res/drawable-xxhdpi/show_menu_at_launch_icon.png +0 -0
- package/android/src/debug/res/drawable-xxhdpi/terminal_icon.png +0 -0
- package/android/src/debug/res/drawable-xxhdpi/three_finger_long_press_icon.png +0 -0
- package/android/src/debug/res/drawable-xxhdpi/user_icon.png +0 -0
- package/android/src/debug/res/drawable-xxhdpi/x_icon.png +0 -0
- package/android/src/main/res/drawable/arrow_right.xml +0 -9
- package/android/src/main/res/drawable/copy.xml +0 -13
- package/android/src/main/res/drawable/inspect.xml +0 -10
- package/android/src/main/res/drawable/pulse.xml +0 -10
- package/android/src/main/res/drawable/signal.xml +0 -26
- package/android/src/main/res/drawable-hdpi/dev_laucher_ic_home_white_36dp.png +0 -0
- package/android/src/main/res/drawable-hdpi/dev_launcher_ic_refresh_white_36dp.png +0 -0
- package/android/src/main/res/drawable-mdpi/dev_laucher_ic_home_white_36dp.png +0 -0
- package/android/src/main/res/drawable-mdpi/dev_launcher_ic_refresh_white_36dp.png +0 -0
- package/android/src/main/res/drawable-mdpi/dev_menu_fab_icon.png +0 -0
- package/android/src/main/res/drawable-xhdpi/dev_laucher_ic_home_white_36dp.png +0 -0
- package/android/src/main/res/drawable-xhdpi/dev_launcher_ic_refresh_white_36dp.png +0 -0
- package/android/src/main/res/drawable-xhdpi/dev_menu_fab_icon.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/dev_laucher_ic_home_white_36dp.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/dev_launcher_ic_refresh_white_36dp.png +0 -0
- package/android/src/main/res/drawable-xxhdpi/dev_menu_fab_icon.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/dev_laucher_ic_home_white_36dp.png +0 -0
- package/android/src/main/res/drawable-xxxhdpi/dev_launcher_ic_refresh_white_36dp.png +0 -0
- package/android/src/main/res/layout/error_activity_content_view.xml +0 -7
- package/android/src/main/res/layout/error_console_fragment.xml +0 -53
- package/android/src/main/res/layout/error_console_list_item.xml +0 -23
- package/android/src/main/res/layout/error_fragment.xml +0 -102
- package/android/src/main/res/values/strings.xml +0 -10
- /package/android/src/main/res/drawable/{reload.xml → updates_nav.xml} +0 -0
|
@@ -9,7 +9,6 @@ import androidx.compose.foundation.layout.Row
|
|
|
9
9
|
import androidx.compose.foundation.layout.fillMaxSize
|
|
10
10
|
import androidx.compose.foundation.layout.fillMaxWidth
|
|
11
11
|
import androidx.compose.foundation.layout.padding
|
|
12
|
-
import androidx.compose.foundation.layout.size
|
|
13
12
|
import androidx.compose.foundation.lazy.LazyColumn
|
|
14
13
|
import androidx.compose.foundation.lazy.items
|
|
15
14
|
import androidx.compose.foundation.lazy.rememberLazyListState
|
|
@@ -33,21 +32,23 @@ import androidx.compose.ui.unit.sp
|
|
|
33
32
|
import com.composeunstyled.Icon
|
|
34
33
|
import expo.modules.devlauncher.R
|
|
35
34
|
import expo.modules.devlauncher.compose.Branch
|
|
36
|
-
import expo.modules.devlauncher.compose.DefaultScreenContainer
|
|
37
35
|
import expo.modules.devlauncher.compose.Update
|
|
38
36
|
import expo.modules.devlauncher.compose.models.BranchesAction
|
|
39
37
|
import expo.modules.devlauncher.compose.primitives.CircularProgressBar
|
|
40
38
|
import expo.modules.devlauncher.compose.ui.ActionButton
|
|
41
39
|
import expo.modules.devlauncher.compose.ui.AppHeader
|
|
40
|
+
import expo.modules.devlauncher.compose.ui.DefaultScreenContainer
|
|
41
|
+
import expo.modules.devlauncher.compose.ui.LauncherIcons
|
|
42
42
|
import expo.modules.devlauncher.compose.utils.DateFormat
|
|
43
43
|
import expo.modules.devmenu.compose.newtheme.NewAppTheme
|
|
44
44
|
import expo.modules.devmenu.compose.primitives.NewText
|
|
45
45
|
import expo.modules.devmenu.compose.primitives.RoundedSurface
|
|
46
46
|
import expo.modules.devmenu.compose.primitives.Spacer
|
|
47
|
+
import expo.modules.devmenu.compose.ui.MenuIcons
|
|
47
48
|
import kotlin.time.ExperimentalTime
|
|
48
49
|
|
|
49
50
|
@Composable
|
|
50
|
-
fun BranchBadge(
|
|
51
|
+
private fun BranchBadge(
|
|
51
52
|
name: String
|
|
52
53
|
) {
|
|
53
54
|
val backgroundColor = NewAppTheme.colors.background.info
|
|
@@ -61,11 +62,9 @@ fun BranchBadge(
|
|
|
61
62
|
.background(backgroundColor)
|
|
62
63
|
.padding(NewAppTheme.spacing.`2`)
|
|
63
64
|
) {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
tint = textColor,
|
|
68
|
-
modifier = Modifier.size(16.dp)
|
|
65
|
+
LauncherIcons.Branch(
|
|
66
|
+
size = 16.dp,
|
|
67
|
+
tint = textColor
|
|
69
68
|
)
|
|
70
69
|
|
|
71
70
|
NewText(
|
|
@@ -80,7 +79,7 @@ fun BranchBadge(
|
|
|
80
79
|
}
|
|
81
80
|
|
|
82
81
|
@Composable
|
|
83
|
-
fun NeedToSingInComponent(
|
|
82
|
+
private fun NeedToSingInComponent(
|
|
84
83
|
onProfileClick: () -> Unit = {}
|
|
85
84
|
) {
|
|
86
85
|
Box(
|
|
@@ -203,11 +202,9 @@ fun BranchesScreen(
|
|
|
203
202
|
) {
|
|
204
203
|
BranchBadge(branch.name)
|
|
205
204
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
tint = NewAppTheme.colors.icon.quaternary,
|
|
210
|
-
modifier = Modifier.size(20.dp)
|
|
205
|
+
LauncherIcons.Chevron(
|
|
206
|
+
size = 20.dp,
|
|
207
|
+
tint = NewAppTheme.colors.icon.quaternary
|
|
211
208
|
)
|
|
212
209
|
}
|
|
213
210
|
|
|
@@ -222,11 +219,9 @@ fun BranchesScreen(
|
|
|
222
219
|
.background(NewAppTheme.colors.background.warning)
|
|
223
220
|
.padding(NewAppTheme.spacing.`2`)
|
|
224
221
|
) {
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
tint = NewAppTheme.colors.icon.warning,
|
|
229
|
-
modifier = Modifier.size(20.dp)
|
|
222
|
+
MenuIcons.Warning(
|
|
223
|
+
size = 20.dp,
|
|
224
|
+
tint = NewAppTheme.colors.icon.warning
|
|
230
225
|
)
|
|
231
226
|
|
|
232
227
|
NewText(
|
|
@@ -244,11 +239,9 @@ fun BranchesScreen(
|
|
|
244
239
|
verticalAlignment = Alignment.CenterVertically,
|
|
245
240
|
horizontalArrangement = Arrangement.spacedBy(NewAppTheme.spacing.`2`)
|
|
246
241
|
) {
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
tint = NewAppTheme.colors.icon.quaternary,
|
|
251
|
-
modifier = Modifier.size(20.dp)
|
|
242
|
+
LauncherIcons.Updates(
|
|
243
|
+
size = 20.dp,
|
|
244
|
+
tint = NewAppTheme.colors.icon.quaternary
|
|
252
245
|
)
|
|
253
246
|
|
|
254
247
|
Column(
|
package/android/src/debug/java/expo/modules/devlauncher/compose/screens/CrashReportScreen.kt
CHANGED
|
@@ -1,29 +1,17 @@
|
|
|
1
1
|
package expo.modules.devlauncher.compose.screens
|
|
2
2
|
|
|
3
|
-
import androidx.compose.foundation.ScrollState
|
|
4
|
-
import androidx.compose.foundation.horizontalScroll
|
|
5
3
|
import androidx.compose.foundation.layout.Arrangement
|
|
6
|
-
import androidx.compose.foundation.layout.Box
|
|
7
4
|
import androidx.compose.foundation.layout.Column
|
|
8
5
|
import androidx.compose.foundation.layout.padding
|
|
9
6
|
import androidx.compose.foundation.layout.safeDrawingPadding
|
|
10
|
-
import androidx.compose.foundation.rememberScrollState
|
|
11
|
-
import androidx.compose.foundation.verticalScroll
|
|
12
7
|
import androidx.compose.runtime.Composable
|
|
13
8
|
import androidx.compose.ui.Modifier
|
|
14
|
-
import androidx.compose.ui.draw.drawWithContent
|
|
15
|
-
import androidx.compose.ui.geometry.Offset
|
|
16
|
-
import androidx.compose.ui.geometry.Size
|
|
17
|
-
import androidx.compose.ui.graphics.Color
|
|
18
9
|
import androidx.compose.ui.platform.LocalContext
|
|
19
|
-
import androidx.compose.ui.text.TextStyle
|
|
20
10
|
import androidx.compose.ui.text.font.FontWeight
|
|
21
11
|
import androidx.compose.ui.tooling.preview.Preview
|
|
22
|
-
import
|
|
23
|
-
import androidx.compose.ui.unit.dp
|
|
24
|
-
import androidx.compose.ui.unit.sp
|
|
25
|
-
import expo.modules.devlauncher.compose.DefaultScreenContainer
|
|
12
|
+
import expo.modules.devlauncher.compose.ui.DefaultScreenContainer
|
|
26
13
|
import expo.modules.devlauncher.compose.ui.ActionButton
|
|
14
|
+
import expo.modules.devlauncher.compose.ui.StackTrace
|
|
27
15
|
import expo.modules.devmenu.compose.newtheme.NewAppTheme
|
|
28
16
|
import expo.modules.devmenu.compose.primitives.NewText
|
|
29
17
|
import expo.modules.devmenu.compose.utils.copyToClipboard
|
|
@@ -31,94 +19,6 @@ import org.json.JSONObject
|
|
|
31
19
|
import java.text.SimpleDateFormat
|
|
32
20
|
import java.util.Date
|
|
33
21
|
|
|
34
|
-
@Composable
|
|
35
|
-
fun Modifier.verticalScrollbar(
|
|
36
|
-
scrollState: ScrollState,
|
|
37
|
-
width: Dp = 6.dp,
|
|
38
|
-
scrollBarColor: Color = Color.LightGray,
|
|
39
|
-
endPadding: Float = 12f
|
|
40
|
-
): Modifier {
|
|
41
|
-
return drawWithContent {
|
|
42
|
-
drawContent()
|
|
43
|
-
|
|
44
|
-
val viewportHeight = this.size.height
|
|
45
|
-
val totalContentHeight = scrollState.maxValue.toFloat() + viewportHeight
|
|
46
|
-
val scrollValue = scrollState.value.toFloat()
|
|
47
|
-
|
|
48
|
-
val scrollBarHeight =
|
|
49
|
-
(viewportHeight / totalContentHeight) * viewportHeight
|
|
50
|
-
val scrollBarStartOffset =
|
|
51
|
-
(scrollValue / totalContentHeight) * viewportHeight
|
|
52
|
-
|
|
53
|
-
drawRoundRect(
|
|
54
|
-
color = scrollBarColor,
|
|
55
|
-
topLeft = Offset(this.size.width - endPadding, scrollBarStartOffset),
|
|
56
|
-
size = Size(width.toPx(), scrollBarHeight)
|
|
57
|
-
)
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
@Composable
|
|
62
|
-
fun Modifier.horizontalScrollbar(
|
|
63
|
-
scrollState: ScrollState,
|
|
64
|
-
width: Dp = 6.dp,
|
|
65
|
-
scrollBarColor: Color = Color.LightGray,
|
|
66
|
-
endPadding: Float = 12f
|
|
67
|
-
): Modifier {
|
|
68
|
-
return drawWithContent {
|
|
69
|
-
drawContent()
|
|
70
|
-
|
|
71
|
-
val viewportWidth = this.size.width
|
|
72
|
-
val totalContentWidth = scrollState.maxValue.toFloat() + viewportWidth
|
|
73
|
-
val scrollValue = scrollState.value.toFloat()
|
|
74
|
-
|
|
75
|
-
val scrollBarHeight =
|
|
76
|
-
(viewportWidth / totalContentWidth) * viewportWidth
|
|
77
|
-
val scrollBarStartOffset =
|
|
78
|
-
(scrollValue / totalContentWidth) * viewportWidth
|
|
79
|
-
|
|
80
|
-
drawRoundRect(
|
|
81
|
-
color = scrollBarColor,
|
|
82
|
-
topLeft = Offset(scrollBarStartOffset, this.size.height - endPadding),
|
|
83
|
-
size = Size(scrollBarHeight, width.toPx())
|
|
84
|
-
)
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
@Composable
|
|
89
|
-
fun StackTrace(
|
|
90
|
-
stack: String,
|
|
91
|
-
modifier: Modifier = Modifier
|
|
92
|
-
) {
|
|
93
|
-
val verticalScrollState = rememberScrollState()
|
|
94
|
-
val horizontalScrollState = rememberScrollState()
|
|
95
|
-
Box(
|
|
96
|
-
modifier = Modifier
|
|
97
|
-
.verticalScrollbar(verticalScrollState)
|
|
98
|
-
.horizontalScrollbar(horizontalScrollState)
|
|
99
|
-
.then(modifier)
|
|
100
|
-
) {
|
|
101
|
-
Box(
|
|
102
|
-
Modifier
|
|
103
|
-
.verticalScroll(verticalScrollState)
|
|
104
|
-
.horizontalScroll(horizontalScrollState)
|
|
105
|
-
|
|
106
|
-
) {
|
|
107
|
-
Box(modifier = Modifier.padding(horizontal = NewAppTheme.spacing.`4`)) {
|
|
108
|
-
NewText(
|
|
109
|
-
stack,
|
|
110
|
-
style = TextStyle.Default.merge(
|
|
111
|
-
lineHeight = 16.sp,
|
|
112
|
-
fontSize = 10.sp,
|
|
113
|
-
fontFamily = NewAppTheme.font.mono,
|
|
114
|
-
fontWeight = FontWeight.Light
|
|
115
|
-
)
|
|
116
|
-
)
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
|
|
122
22
|
@Composable
|
|
123
23
|
fun CrashReportScreen(
|
|
124
24
|
timestamp: Long,
|
|
@@ -159,35 +59,15 @@ fun CrashReportScreen(
|
|
|
159
59
|
}
|
|
160
60
|
)
|
|
161
61
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
fontWeight = FontWeight.Medium
|
|
167
|
-
)
|
|
168
|
-
)
|
|
169
|
-
|
|
170
|
-
NewText(
|
|
171
|
-
SimpleDateFormat.getDateTimeInstance().format(Date(timestamp)).toString(),
|
|
172
|
-
style = NewAppTheme.font.md,
|
|
173
|
-
color = NewAppTheme.colors.text.secondary
|
|
174
|
-
)
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
Column(verticalArrangement = Arrangement.spacedBy(NewAppTheme.spacing.`1`)) {
|
|
178
|
-
NewText(
|
|
179
|
-
"Reason:",
|
|
180
|
-
style = NewAppTheme.font.lg.merge(
|
|
181
|
-
fontWeight = FontWeight.Medium
|
|
182
|
-
)
|
|
183
|
-
)
|
|
62
|
+
KeyValueRow(
|
|
63
|
+
"Occurred:",
|
|
64
|
+
SimpleDateFormat.getDateTimeInstance().format(Date(timestamp)).toString()
|
|
65
|
+
)
|
|
184
66
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
)
|
|
190
|
-
}
|
|
67
|
+
KeyValueRow(
|
|
68
|
+
"Reason:",
|
|
69
|
+
message
|
|
70
|
+
)
|
|
191
71
|
}
|
|
192
72
|
|
|
193
73
|
Column(
|
|
@@ -207,6 +87,24 @@ fun CrashReportScreen(
|
|
|
207
87
|
}
|
|
208
88
|
}
|
|
209
89
|
|
|
90
|
+
@Composable
|
|
91
|
+
private fun KeyValueRow(text: String, value: String) {
|
|
92
|
+
Column(verticalArrangement = Arrangement.spacedBy(NewAppTheme.spacing.`1`)) {
|
|
93
|
+
NewText(
|
|
94
|
+
text,
|
|
95
|
+
style = NewAppTheme.font.lg.merge(
|
|
96
|
+
fontWeight = FontWeight.Medium
|
|
97
|
+
)
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
NewText(
|
|
101
|
+
value,
|
|
102
|
+
style = NewAppTheme.font.md,
|
|
103
|
+
color = NewAppTheme.colors.text.secondary
|
|
104
|
+
)
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
210
108
|
@Composable
|
|
211
109
|
@Preview(showBackground = true)
|
|
212
110
|
fun CrashReportScreenPreview() {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
package expo.modules.devlauncher.compose.screens
|
|
2
2
|
|
|
3
3
|
import androidx.compose.foundation.background
|
|
4
|
+
import androidx.compose.foundation.layout.Arrangement
|
|
4
5
|
import androidx.compose.foundation.layout.Column
|
|
5
6
|
import androidx.compose.foundation.layout.fillMaxSize
|
|
6
7
|
import androidx.compose.foundation.layout.navigationBarsPadding
|
|
@@ -12,9 +13,9 @@ import androidx.compose.ui.text.font.FontWeight
|
|
|
12
13
|
import androidx.compose.ui.tooling.preview.Preview
|
|
13
14
|
import expo.modules.devlauncher.compose.models.ErrorAction
|
|
14
15
|
import expo.modules.devlauncher.compose.ui.ActionButton
|
|
16
|
+
import expo.modules.devlauncher.compose.ui.StackTrace
|
|
15
17
|
import expo.modules.devmenu.compose.newtheme.NewAppTheme
|
|
16
18
|
import expo.modules.devmenu.compose.primitives.NewText
|
|
17
|
-
import expo.modules.devmenu.compose.primitives.Spacer
|
|
18
19
|
|
|
19
20
|
@Composable
|
|
20
21
|
fun ErrorScreen(
|
|
@@ -27,8 +28,14 @@ fun ErrorScreen(
|
|
|
27
28
|
.fillMaxSize()
|
|
28
29
|
.statusBarsPadding()
|
|
29
30
|
) {
|
|
30
|
-
Column(
|
|
31
|
-
|
|
31
|
+
Column(
|
|
32
|
+
verticalArrangement = Arrangement.spacedBy(NewAppTheme.spacing.`3`),
|
|
33
|
+
modifier = Modifier
|
|
34
|
+
.padding(
|
|
35
|
+
horizontal = NewAppTheme.spacing.`2`,
|
|
36
|
+
vertical = NewAppTheme.spacing.`3`
|
|
37
|
+
)
|
|
38
|
+
) {
|
|
32
39
|
NewText(
|
|
33
40
|
"There was a problem loading the project.",
|
|
34
41
|
style = NewAppTheme.font.lg.merge(
|
|
@@ -36,10 +43,7 @@ fun ErrorScreen(
|
|
|
36
43
|
)
|
|
37
44
|
)
|
|
38
45
|
|
|
39
|
-
Spacer(NewAppTheme.spacing.`3`)
|
|
40
46
|
NewText("This development build encountered the following error.")
|
|
41
|
-
|
|
42
|
-
Spacer(NewAppTheme.spacing.`3`)
|
|
43
47
|
}
|
|
44
48
|
|
|
45
49
|
StackTrace(
|
|
@@ -49,6 +53,7 @@ fun ErrorScreen(
|
|
|
49
53
|
)
|
|
50
54
|
|
|
51
55
|
Column(
|
|
56
|
+
verticalArrangement = Arrangement.spacedBy(NewAppTheme.spacing.`2`),
|
|
52
57
|
modifier = Modifier
|
|
53
58
|
.background(NewAppTheme.colors.background.default)
|
|
54
59
|
.padding(NewAppTheme.spacing.`3`)
|
|
@@ -64,8 +69,6 @@ fun ErrorScreen(
|
|
|
64
69
|
}
|
|
65
70
|
)
|
|
66
71
|
|
|
67
|
-
Spacer(NewAppTheme.spacing.`2`)
|
|
68
|
-
|
|
69
72
|
ActionButton(
|
|
70
73
|
"Go To Home",
|
|
71
74
|
foreground = NewAppTheme.colors.buttons.secondary.foreground,
|
|
@@ -8,12 +8,10 @@ import androidx.compose.foundation.layout.padding
|
|
|
8
8
|
import androidx.compose.foundation.rememberScrollState
|
|
9
9
|
import androidx.compose.foundation.verticalScroll
|
|
10
10
|
import androidx.compose.runtime.Composable
|
|
11
|
-
import androidx.compose.runtime.LaunchedEffect
|
|
12
11
|
import androidx.compose.ui.Modifier
|
|
13
12
|
import androidx.compose.ui.tooling.preview.Preview
|
|
14
|
-
import com.composables.core.rememberDialogState
|
|
15
13
|
import com.composeunstyled.Button
|
|
16
|
-
import expo.modules.devlauncher.compose.DefaultScreenContainer
|
|
14
|
+
import expo.modules.devlauncher.compose.ui.DefaultScreenContainer
|
|
17
15
|
import expo.modules.devlauncher.compose.models.HomeAction
|
|
18
16
|
import expo.modules.devlauncher.compose.models.HomeState
|
|
19
17
|
import expo.modules.devlauncher.compose.primitives.Accordion
|
|
@@ -22,6 +20,7 @@ import expo.modules.devlauncher.compose.ui.AppLoadingErrorDialog
|
|
|
22
20
|
import expo.modules.devlauncher.compose.ui.DevelopmentSessionActions
|
|
23
21
|
import expo.modules.devlauncher.compose.ui.DevelopmentSessionSection
|
|
24
22
|
import expo.modules.devlauncher.compose.ui.RunningAppCard
|
|
23
|
+
import expo.modules.devlauncher.compose.ui.rememberAppLoadingErrorDialogState
|
|
25
24
|
import expo.modules.devlauncher.launcher.DevLauncherAppEntry
|
|
26
25
|
import expo.modules.devlauncher.launcher.errors.DevLauncherErrorInstance
|
|
27
26
|
import expo.modules.devlauncher.services.PackagerInfo
|
|
@@ -59,21 +58,8 @@ fun HomeScreen(
|
|
|
59
58
|
onProfileClick: () -> Unit,
|
|
60
59
|
onDevServersClick: () -> Unit
|
|
61
60
|
) {
|
|
62
|
-
val hasPackager = state.runningPackagers.isNotEmpty()
|
|
63
|
-
val errorDialogState = rememberDialogState(initiallyVisible = false)
|
|
64
61
|
val scrollState = rememberScrollState()
|
|
65
|
-
|
|
66
|
-
LaunchedEffect(state.loadingError) {
|
|
67
|
-
if (state.loadingError != null) {
|
|
68
|
-
errorDialogState.visible = true
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
LaunchedEffect(errorDialogState.visible) {
|
|
73
|
-
if (!errorDialogState.visible) {
|
|
74
|
-
onAction(HomeAction.ClearLoadingError)
|
|
75
|
-
}
|
|
76
|
-
}
|
|
62
|
+
val errorDialogState = rememberAppLoadingErrorDialogState(state, onAction)
|
|
77
63
|
|
|
78
64
|
AppLoadingErrorDialog(
|
|
79
65
|
errorDialogState,
|
|
@@ -112,59 +98,90 @@ fun HomeScreen(
|
|
|
112
98
|
|
|
113
99
|
Spacer(NewAppTheme.spacing.`3`)
|
|
114
100
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
}
|
|
101
|
+
val runningPackagers = state.runningPackagers
|
|
102
|
+
if (runningPackagers.isNotEmpty()) {
|
|
103
|
+
LocalPackagers(
|
|
104
|
+
state.isFetchingPackagers,
|
|
105
|
+
runningPackagers,
|
|
106
|
+
onAction
|
|
107
|
+
)
|
|
108
|
+
} else {
|
|
109
|
+
DevelopmentSessionSection(state.isFetchingPackagers, onAction)
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
Spacer(NewAppTheme.spacing.`6`)
|
|
128
113
|
|
|
129
|
-
|
|
114
|
+
RecentlyOpenedApps(
|
|
115
|
+
state.recentlyOpenedApps,
|
|
116
|
+
onAction
|
|
117
|
+
)
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
130
121
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
122
|
+
@Composable
|
|
123
|
+
private fun LocalPackagers(
|
|
124
|
+
isFetchingPackagers: Boolean,
|
|
125
|
+
runningPackagers: Set<PackagerInfo>,
|
|
126
|
+
onAction: (HomeAction) -> Unit
|
|
127
|
+
) {
|
|
128
|
+
Column(
|
|
129
|
+
verticalArrangement = Arrangement.spacedBy(NewAppTheme.spacing.`2`)
|
|
130
|
+
) {
|
|
131
|
+
Column(
|
|
132
|
+
verticalArrangement = Arrangement.spacedBy(NewAppTheme.spacing.`2`)
|
|
133
|
+
) {
|
|
134
|
+
for (packager in runningPackagers) {
|
|
135
|
+
RunningAppCard(
|
|
136
|
+
appIp = packager.url,
|
|
137
|
+
appName = packager.description
|
|
136
138
|
) {
|
|
137
|
-
|
|
139
|
+
onAction(HomeAction.OpenApp(packager.url))
|
|
138
140
|
}
|
|
139
|
-
} else {
|
|
140
|
-
DevelopmentSessionSection(state.isFetchingPackagers, onAction)
|
|
141
141
|
}
|
|
142
|
+
}
|
|
142
143
|
|
|
143
|
-
|
|
144
|
-
|
|
144
|
+
Accordion(
|
|
145
|
+
"New development server",
|
|
146
|
+
initialState = false,
|
|
147
|
+
modifier = Modifier
|
|
148
|
+
.fillMaxWidth()
|
|
149
|
+
) {
|
|
150
|
+
DevelopmentSessionActions(isFetchingPackagers, onAction)
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
145
154
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
155
|
+
@Composable
|
|
156
|
+
private fun RecentlyOpenedApps(
|
|
157
|
+
recentlyOpenedApps: List<DevLauncherAppEntry>,
|
|
158
|
+
onAction: (HomeAction) -> Unit
|
|
159
|
+
) {
|
|
160
|
+
if (recentlyOpenedApps.isEmpty()) {
|
|
161
|
+
return
|
|
162
|
+
}
|
|
151
163
|
|
|
152
|
-
|
|
153
|
-
|
|
164
|
+
Column(
|
|
165
|
+
verticalArrangement = Arrangement.spacedBy(NewAppTheme.spacing.`3`)
|
|
166
|
+
) {
|
|
167
|
+
Row(
|
|
168
|
+
horizontalArrangement = Arrangement.SpaceBetween,
|
|
169
|
+
modifier = Modifier.fillMaxWidth()
|
|
170
|
+
) {
|
|
171
|
+
Section.Header("RECENTLY OPENED")
|
|
154
172
|
|
|
155
|
-
|
|
173
|
+
Section.Button("RESET", { onAction(HomeAction.ResetRecentlyOpenedApps) })
|
|
174
|
+
}
|
|
156
175
|
|
|
157
|
-
|
|
158
|
-
|
|
176
|
+
Column(
|
|
177
|
+
verticalArrangement = Arrangement.spacedBy(NewAppTheme.spacing.`1`)
|
|
178
|
+
) {
|
|
179
|
+
for (packager in recentlyOpenedApps) {
|
|
180
|
+
RunningAppCard(
|
|
181
|
+
appIp = packager.url,
|
|
182
|
+
appName = packager.name
|
|
159
183
|
) {
|
|
160
|
-
|
|
161
|
-
RunningAppCard(
|
|
162
|
-
appIp = packager.url,
|
|
163
|
-
appName = packager.name
|
|
164
|
-
) {
|
|
165
|
-
onAction(HomeAction.OpenApp(packager.url))
|
|
166
|
-
}
|
|
167
|
-
}
|
|
184
|
+
onAction(HomeAction.OpenApp(packager.url))
|
|
168
185
|
}
|
|
169
186
|
}
|
|
170
187
|
}
|
|
@@ -190,6 +207,14 @@ fun HomeScreenPreview() {
|
|
|
190
207
|
)
|
|
191
208
|
),
|
|
192
209
|
recentlyOpenedApps = listOf(
|
|
210
|
+
DevLauncherAppEntry(
|
|
211
|
+
timestamp = 1752249592809L,
|
|
212
|
+
name = "BareExpo",
|
|
213
|
+
url = "http://10.0.2.2:8081",
|
|
214
|
+
isEASUpdate = false,
|
|
215
|
+
updateMessage = null,
|
|
216
|
+
branchName = null
|
|
217
|
+
),
|
|
193
218
|
DevLauncherAppEntry(
|
|
194
219
|
timestamp = 1752249592809L,
|
|
195
220
|
name = "BareExpo",
|
|
@@ -22,7 +22,7 @@ import androidx.compose.ui.text.withLink
|
|
|
22
22
|
import androidx.compose.ui.tooling.preview.Preview
|
|
23
23
|
import androidx.compose.ui.unit.dp
|
|
24
24
|
import expo.modules.devlauncher.R
|
|
25
|
-
import expo.modules.devlauncher.compose.DefaultScreenContainer
|
|
25
|
+
import expo.modules.devlauncher.compose.ui.DefaultScreenContainer
|
|
26
26
|
import expo.modules.devlauncher.compose.ui.AppHeader
|
|
27
27
|
import expo.modules.devmenu.compose.newtheme.NewAppTheme
|
|
28
28
|
import expo.modules.devmenu.compose.primitives.NewText
|