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
|
@@ -4,21 +4,18 @@ import androidx.compose.foundation.layout.Arrangement
|
|
|
4
4
|
import androidx.compose.foundation.layout.Column
|
|
5
5
|
import androidx.compose.foundation.layout.fillMaxWidth
|
|
6
6
|
import androidx.compose.foundation.layout.padding
|
|
7
|
-
import androidx.compose.foundation.layout.size
|
|
8
7
|
import androidx.compose.foundation.layout.statusBarsPadding
|
|
9
8
|
import androidx.compose.runtime.Composable
|
|
10
9
|
import androidx.compose.ui.Alignment
|
|
11
10
|
import androidx.compose.ui.Modifier
|
|
12
|
-
import androidx.compose.ui.res.painterResource
|
|
13
11
|
import androidx.compose.ui.text.font.FontWeight
|
|
14
12
|
import androidx.compose.ui.tooling.preview.Preview
|
|
15
13
|
import androidx.compose.ui.unit.dp
|
|
16
14
|
import androidx.compose.ui.unit.sp
|
|
17
|
-
import
|
|
18
|
-
import expo.modules.devlauncher.R
|
|
19
|
-
import expo.modules.devlauncher.compose.DefaultScreenContainer
|
|
15
|
+
import expo.modules.devlauncher.compose.ui.DefaultScreenContainer
|
|
20
16
|
import expo.modules.devlauncher.compose.models.SettingsAction
|
|
21
17
|
import expo.modules.devlauncher.compose.models.SettingsState
|
|
18
|
+
import expo.modules.devlauncher.compose.ui.LauncherIcons
|
|
22
19
|
import expo.modules.devlauncher.services.ApplicationInfo
|
|
23
20
|
import expo.modules.devmenu.compose.newtheme.NewAppTheme
|
|
24
21
|
import expo.modules.devmenu.compose.primitives.Divider
|
|
@@ -26,6 +23,7 @@ import expo.modules.devmenu.compose.primitives.NewText
|
|
|
26
23
|
import expo.modules.devmenu.compose.primitives.RoundedSurface
|
|
27
24
|
import expo.modules.devmenu.compose.primitives.Spacer
|
|
28
25
|
import expo.modules.devmenu.compose.primitives.ToggleSwitch
|
|
26
|
+
import expo.modules.devmenu.compose.ui.MenuIcons
|
|
29
27
|
import expo.modules.devmenu.compose.ui.NewMenuButton
|
|
30
28
|
import expo.modules.devmenu.compose.ui.Section
|
|
31
29
|
import expo.modules.devmenu.compose.ui.SystemSection
|
|
@@ -47,10 +45,9 @@ fun SettingsScreen(
|
|
|
47
45
|
.fillMaxWidth()
|
|
48
46
|
.padding(vertical = NewAppTheme.spacing.`6`)
|
|
49
47
|
) {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
modifier = Modifier.size(48.dp)
|
|
48
|
+
LauncherIcons.Settings(
|
|
49
|
+
size = 48.dp,
|
|
50
|
+
tint = NewAppTheme.colors.icon.quaternary
|
|
54
51
|
)
|
|
55
52
|
|
|
56
53
|
NewText(
|
|
@@ -63,11 +60,9 @@ fun SettingsScreen(
|
|
|
63
60
|
|
|
64
61
|
NewMenuButton(
|
|
65
62
|
icon = {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
tint = NewAppTheme.colors.icon.tertiary,
|
|
70
|
-
modifier = Modifier.size(20.dp)
|
|
63
|
+
LauncherIcons.ShowAtLaunch(
|
|
64
|
+
size = 20.dp,
|
|
65
|
+
tint = NewAppTheme.colors.icon.tertiary
|
|
71
66
|
)
|
|
72
67
|
},
|
|
73
68
|
content = {
|
|
@@ -85,20 +80,44 @@ fun SettingsScreen(
|
|
|
85
80
|
|
|
86
81
|
Spacer(NewAppTheme.spacing.`6`)
|
|
87
82
|
|
|
88
|
-
|
|
83
|
+
MenuGesturesSection(state, onAction)
|
|
89
84
|
|
|
90
85
|
Spacer(NewAppTheme.spacing.`3`)
|
|
91
86
|
|
|
87
|
+
NewText(
|
|
88
|
+
"Selected gestures will toggle the developer menu while inside a preview. The menu allows you to reload or return to home and exposes developer tools.",
|
|
89
|
+
style = NewAppTheme.font.md.merge(
|
|
90
|
+
lineHeight = 21.sp
|
|
91
|
+
),
|
|
92
|
+
color = NewAppTheme.colors.text.quaternary
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
Spacer(NewAppTheme.spacing.`6`)
|
|
96
|
+
|
|
97
|
+
val info = state.applicationInfo
|
|
98
|
+
SystemSection(
|
|
99
|
+
appVersion = info?.appVersion,
|
|
100
|
+
runtimeVersion = (info as? ApplicationInfo.Updates)?.runtimeVersion,
|
|
101
|
+
fullDataProvider = { info?.toJson() ?: "No application info available" }
|
|
102
|
+
)
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
@Composable
|
|
107
|
+
private fun MenuGesturesSection(state: SettingsState, onAction: (SettingsAction) -> Unit) {
|
|
108
|
+
Column(
|
|
109
|
+
verticalArrangement = Arrangement.spacedBy(NewAppTheme.spacing.`3`)
|
|
110
|
+
) {
|
|
111
|
+
Section.Header("MENU GESTURES")
|
|
112
|
+
|
|
92
113
|
RoundedSurface {
|
|
93
114
|
Column {
|
|
94
115
|
NewMenuButton(
|
|
95
116
|
withSurface = false,
|
|
96
117
|
icon = {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
tint = NewAppTheme.colors.icon.tertiary,
|
|
101
|
-
modifier = Modifier.size(20.dp)
|
|
118
|
+
MenuIcons.Performance(
|
|
119
|
+
size = 20.dp,
|
|
120
|
+
tint = NewAppTheme.colors.icon.tertiary
|
|
102
121
|
)
|
|
103
122
|
},
|
|
104
123
|
content = {
|
|
@@ -122,11 +141,9 @@ fun SettingsScreen(
|
|
|
122
141
|
NewMenuButton(
|
|
123
142
|
withSurface = false,
|
|
124
143
|
icon = {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
tint = NewAppTheme.colors.icon.tertiary,
|
|
129
|
-
modifier = Modifier.size(20.dp)
|
|
144
|
+
MenuIcons.Inspect(
|
|
145
|
+
size = 20.dp,
|
|
146
|
+
tint = NewAppTheme.colors.icon.tertiary
|
|
130
147
|
)
|
|
131
148
|
},
|
|
132
149
|
content = {
|
|
@@ -150,11 +167,9 @@ fun SettingsScreen(
|
|
|
150
167
|
NewMenuButton(
|
|
151
168
|
withSurface = false,
|
|
152
169
|
icon = {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
tint = NewAppTheme.colors.icon.tertiary,
|
|
157
|
-
modifier = Modifier.size(20.dp)
|
|
170
|
+
MenuIcons.Fab(
|
|
171
|
+
size = 20.dp,
|
|
172
|
+
tint = NewAppTheme.colors.icon.tertiary
|
|
158
173
|
)
|
|
159
174
|
},
|
|
160
175
|
content = {
|
|
@@ -171,25 +186,6 @@ fun SettingsScreen(
|
|
|
171
186
|
)
|
|
172
187
|
}
|
|
173
188
|
}
|
|
174
|
-
|
|
175
|
-
Spacer(NewAppTheme.spacing.`3`)
|
|
176
|
-
|
|
177
|
-
NewText(
|
|
178
|
-
"Selected gestures will toggle the developer menu while inside a preview. The menu allows you to reload or return to home and exposes developer tools.",
|
|
179
|
-
style = NewAppTheme.font.md.merge(
|
|
180
|
-
lineHeight = 21.sp
|
|
181
|
-
),
|
|
182
|
-
color = NewAppTheme.colors.text.quaternary
|
|
183
|
-
)
|
|
184
|
-
|
|
185
|
-
Spacer(NewAppTheme.spacing.`6`)
|
|
186
|
-
|
|
187
|
-
val info = state.applicationInfo
|
|
188
|
-
SystemSection(
|
|
189
|
-
appVersion = info?.appVersion,
|
|
190
|
-
runtimeVersion = (info as? ApplicationInfo.Updates)?.runtimeVersion,
|
|
191
|
-
fullDataProvider = { info?.toJson() ?: "No application info available" }
|
|
192
|
-
)
|
|
193
189
|
}
|
|
194
190
|
}
|
|
195
191
|
|
|
@@ -5,11 +5,8 @@ import androidx.compose.foundation.layout.padding
|
|
|
5
5
|
import androidx.compose.foundation.layout.size
|
|
6
6
|
import androidx.compose.runtime.Composable
|
|
7
7
|
import androidx.compose.ui.Modifier
|
|
8
|
-
import androidx.compose.ui.res.painterResource
|
|
9
8
|
import androidx.compose.ui.unit.Dp
|
|
10
9
|
import androidx.compose.ui.unit.dp
|
|
11
|
-
import com.composeunstyled.Icon
|
|
12
|
-
import expo.modules.devlauncher.R
|
|
13
10
|
import expo.modules.devlauncher.compose.primitives.AsyncImage
|
|
14
11
|
import expo.modules.devmenu.compose.newtheme.NewAppTheme
|
|
15
12
|
import expo.modules.devmenu.compose.primitives.RoundedSurface
|
|
@@ -31,9 +28,8 @@ fun AccountAvatar(
|
|
|
31
28
|
url = url
|
|
32
29
|
)
|
|
33
30
|
} else {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
contentDescription = "User Icon",
|
|
31
|
+
LauncherIcons.User(
|
|
32
|
+
size = size,
|
|
37
33
|
tint = NewAppTheme.colors.icon.tertiary,
|
|
38
34
|
modifier = Modifier
|
|
39
35
|
.background(NewAppTheme.colors.background.element)
|
|
@@ -4,17 +4,13 @@ import androidx.compose.foundation.layout.Arrangement
|
|
|
4
4
|
import androidx.compose.foundation.layout.Column
|
|
5
5
|
import androidx.compose.foundation.layout.fillMaxWidth
|
|
6
6
|
import androidx.compose.foundation.layout.padding
|
|
7
|
-
import androidx.compose.foundation.layout.size
|
|
8
7
|
import androidx.compose.runtime.Composable
|
|
9
8
|
import androidx.compose.ui.Modifier
|
|
10
9
|
import androidx.compose.ui.graphics.Color
|
|
11
|
-
import androidx.compose.ui.res.painterResource
|
|
12
10
|
import androidx.compose.ui.text.font.FontWeight
|
|
13
11
|
import androidx.compose.ui.text.style.TextAlign
|
|
14
12
|
import androidx.compose.ui.unit.dp
|
|
15
13
|
import androidx.compose.ui.unit.sp
|
|
16
|
-
import com.composeunstyled.Icon
|
|
17
|
-
import expo.modules.devlauncher.R
|
|
18
14
|
import expo.modules.devlauncher.compose.models.Account
|
|
19
15
|
import expo.modules.devmenu.compose.newtheme.NewAppTheme
|
|
20
16
|
import expo.modules.devmenu.compose.primitives.NewText
|
|
@@ -61,11 +57,9 @@ fun AccountSelector(
|
|
|
61
57
|
},
|
|
62
58
|
rightComponent = {
|
|
63
59
|
if (account.isSelected) {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
tint = Color(0xFF34C759),
|
|
68
|
-
modifier = Modifier.size(20.dp)
|
|
60
|
+
LauncherIcons.CheckCircle(
|
|
61
|
+
size = 20.dp,
|
|
62
|
+
tint = Color(0xFF34C759)
|
|
69
63
|
)
|
|
70
64
|
}
|
|
71
65
|
},
|
|
@@ -10,15 +10,12 @@ import androidx.compose.foundation.layout.size
|
|
|
10
10
|
import androidx.compose.runtime.Composable
|
|
11
11
|
import androidx.compose.ui.Alignment
|
|
12
12
|
import androidx.compose.ui.Modifier
|
|
13
|
-
import androidx.compose.ui.res.painterResource
|
|
14
13
|
import androidx.compose.ui.text.font.FontWeight
|
|
15
14
|
import androidx.compose.ui.tooling.preview.Preview
|
|
16
15
|
import androidx.compose.ui.unit.dp
|
|
17
16
|
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
|
18
17
|
import com.composeunstyled.Button
|
|
19
|
-
import com.composeunstyled.Icon
|
|
20
18
|
import expo.modules.devlauncher.MeQuery
|
|
21
|
-
import expo.modules.devlauncher.R
|
|
22
19
|
import expo.modules.devlauncher.compose.primitives.AsyncImage
|
|
23
20
|
import expo.modules.devlauncher.services.AppService
|
|
24
21
|
import expo.modules.devlauncher.services.SessionService
|
|
@@ -28,7 +25,6 @@ import expo.modules.devmenu.compose.newtheme.NewAppTheme
|
|
|
28
25
|
import expo.modules.devmenu.compose.primitives.AppIcon
|
|
29
26
|
import expo.modules.devmenu.compose.primitives.NewText
|
|
30
27
|
import expo.modules.devmenu.compose.primitives.RoundedSurface
|
|
31
|
-
import expo.modules.devmenu.compose.primitives.Spacer
|
|
32
28
|
|
|
33
29
|
@Composable
|
|
34
30
|
fun AppHeader(
|
|
@@ -79,7 +75,8 @@ fun AppHeader(
|
|
|
79
75
|
AppIcon()
|
|
80
76
|
|
|
81
77
|
Column(
|
|
82
|
-
verticalArrangement = Arrangement.spacedBy(NewAppTheme.spacing.`1`)
|
|
78
|
+
verticalArrangement = Arrangement.spacedBy(NewAppTheme.spacing.`1`),
|
|
79
|
+
modifier = Modifier.weight(1f)
|
|
83
80
|
) {
|
|
84
81
|
NewText(
|
|
85
82
|
appName,
|
|
@@ -94,10 +91,6 @@ fun AppHeader(
|
|
|
94
91
|
)
|
|
95
92
|
}
|
|
96
93
|
|
|
97
|
-
Spacer(
|
|
98
|
-
modifier = Modifier.weight(1f)
|
|
99
|
-
)
|
|
100
|
-
|
|
101
94
|
RoundedSurface(
|
|
102
95
|
borderRadius = NewAppTheme.borderRadius.full,
|
|
103
96
|
color = NewAppTheme.colors.background.element
|
|
@@ -114,12 +107,9 @@ fun AppHeader(
|
|
|
114
107
|
url = profilePhoto
|
|
115
108
|
)
|
|
116
109
|
} else {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
tint = NewAppTheme.colors.icon.tertiary,
|
|
121
|
-
modifier = Modifier
|
|
122
|
-
.size(24.dp)
|
|
110
|
+
LauncherIcons.User(
|
|
111
|
+
size = 24.dp,
|
|
112
|
+
tint = NewAppTheme.colors.icon.tertiary
|
|
123
113
|
)
|
|
124
114
|
}
|
|
125
115
|
}
|
|
@@ -10,10 +10,10 @@ import androidx.compose.foundation.layout.padding
|
|
|
10
10
|
import androidx.compose.foundation.layout.systemBarsPadding
|
|
11
11
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
|
12
12
|
import androidx.compose.runtime.Composable
|
|
13
|
+
import androidx.compose.runtime.LaunchedEffect
|
|
13
14
|
import androidx.compose.ui.Alignment
|
|
14
15
|
import androidx.compose.ui.Modifier
|
|
15
16
|
import androidx.compose.ui.draw.clip
|
|
16
|
-
import androidx.compose.ui.res.painterResource
|
|
17
17
|
import androidx.compose.ui.text.font.FontWeight
|
|
18
18
|
import androidx.compose.ui.tooling.preview.Preview
|
|
19
19
|
import androidx.compose.ui.unit.dp
|
|
@@ -23,12 +23,30 @@ import com.composables.core.DialogState
|
|
|
23
23
|
import com.composables.core.Scrim
|
|
24
24
|
import com.composables.core.rememberDialogState
|
|
25
25
|
import com.composeunstyled.Button
|
|
26
|
-
import com.composeunstyled.Icon
|
|
27
26
|
import com.composeunstyled.Text
|
|
28
|
-
import expo.modules.devlauncher.
|
|
27
|
+
import expo.modules.devlauncher.compose.models.HomeAction
|
|
28
|
+
import expo.modules.devlauncher.compose.models.HomeState
|
|
29
29
|
import expo.modules.devmenu.compose.newtheme.NewAppTheme
|
|
30
30
|
import expo.modules.devmenu.compose.primitives.Divider
|
|
31
31
|
import expo.modules.devmenu.compose.primitives.NewText
|
|
32
|
+
import expo.modules.devmenu.compose.ui.MenuIcons
|
|
33
|
+
|
|
34
|
+
@Composable
|
|
35
|
+
fun rememberAppLoadingErrorDialogState(state: HomeState, onAction: (HomeAction) -> Unit): DialogState {
|
|
36
|
+
val errorDialogState = rememberDialogState(initiallyVisible = false)
|
|
37
|
+
LaunchedEffect(state.loadingError) {
|
|
38
|
+
if (state.loadingError != null) {
|
|
39
|
+
errorDialogState.visible = true
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
LaunchedEffect(errorDialogState.visible) {
|
|
44
|
+
if (!errorDialogState.visible) {
|
|
45
|
+
onAction(HomeAction.ClearLoadingError)
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return errorDialogState
|
|
49
|
+
}
|
|
32
50
|
|
|
33
51
|
@Composable
|
|
34
52
|
fun AppLoadingErrorDialog(
|
|
@@ -64,9 +82,8 @@ fun AppLoadingErrorDialog(
|
|
|
64
82
|
Button(onClick = {
|
|
65
83
|
dialogState.visible = false
|
|
66
84
|
}) {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
contentDescription = "Close dialog",
|
|
85
|
+
MenuIcons.Close(
|
|
86
|
+
size = 20.dp,
|
|
70
87
|
tint = NewAppTheme.colors.icon.tertiary
|
|
71
88
|
)
|
|
72
89
|
}
|
|
@@ -74,7 +74,10 @@ fun BottomSheet(
|
|
|
74
74
|
Box(
|
|
75
75
|
modifier = Modifier
|
|
76
76
|
.size(width = 60.dp, height = 5.dp)
|
|
77
|
-
.background(
|
|
77
|
+
.background(
|
|
78
|
+
NewAppTheme.colors.border.secondary,
|
|
79
|
+
shape = RoundedCornerShape(size = 5.dp)
|
|
80
|
+
)
|
|
78
81
|
)
|
|
79
82
|
}
|
|
80
83
|
content()
|
|
@@ -13,12 +13,11 @@ import androidx.compose.runtime.Composable
|
|
|
13
13
|
import androidx.compose.runtime.getValue
|
|
14
14
|
import androidx.compose.ui.Alignment
|
|
15
15
|
import androidx.compose.ui.Modifier
|
|
16
|
-
import androidx.compose.ui.
|
|
16
|
+
import androidx.compose.ui.graphics.Color
|
|
17
|
+
import androidx.compose.ui.unit.Dp
|
|
17
18
|
import androidx.navigation.NavController
|
|
18
19
|
import androidx.navigation.NavDestination.Companion.hasRoute
|
|
19
20
|
import androidx.navigation.compose.currentBackStackEntryAsState
|
|
20
|
-
import expo.modules.devlauncher.R
|
|
21
|
-
import expo.modules.devlauncher.compose.Tab
|
|
22
21
|
import expo.modules.devlauncher.compose.routes.Routes
|
|
23
22
|
import expo.modules.devmenu.compose.newtheme.NewAppTheme
|
|
24
23
|
|
|
@@ -40,40 +39,42 @@ fun BottomTabBar(
|
|
|
40
39
|
val navBackStackEntry by navController.currentBackStackEntryAsState()
|
|
41
40
|
val currentDestination = navBackStackEntry?.destination
|
|
42
41
|
|
|
43
|
-
val
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
Tab(
|
|
48
|
-
label = "Home",
|
|
49
|
-
icon = painterResource(id = R.drawable.home),
|
|
50
|
-
screen = Routes.Home
|
|
51
|
-
),
|
|
52
|
-
Tab(
|
|
53
|
-
label = "Updates",
|
|
54
|
-
icon = painterResource(id = R.drawable.reload),
|
|
55
|
-
screen = Routes.Updates
|
|
56
|
-
),
|
|
57
|
-
Tab(
|
|
58
|
-
label = "Settings",
|
|
59
|
-
icon = painterResource(id = R.drawable.settings),
|
|
60
|
-
screen = Routes.Settings
|
|
61
|
-
)
|
|
62
|
-
)
|
|
63
|
-
for (tab in icons) {
|
|
64
|
-
val isSelected = currentDestination?.hasRoute(tab.screen::class) == true
|
|
42
|
+
val button = @Composable { label: String,
|
|
43
|
+
icon: @Composable (size: Dp, tint: Color) -> Unit,
|
|
44
|
+
screen: Any ->
|
|
45
|
+
val isSelected = currentDestination?.hasRoute(screen::class) == true
|
|
65
46
|
BottomTabButton(
|
|
66
|
-
label =
|
|
67
|
-
icon =
|
|
68
|
-
modifier =
|
|
47
|
+
label = label,
|
|
48
|
+
icon = icon,
|
|
49
|
+
modifier = Modifier
|
|
50
|
+
.weight(1f)
|
|
51
|
+
.fillMaxHeight(),
|
|
69
52
|
isSelected = isSelected,
|
|
70
53
|
onClick = {
|
|
71
|
-
navController.navigate(
|
|
54
|
+
navController.navigate(screen) {
|
|
72
55
|
popUpTo(navController.graph.id) { inclusive = true }
|
|
73
56
|
}
|
|
74
57
|
}
|
|
75
58
|
)
|
|
76
59
|
}
|
|
60
|
+
|
|
61
|
+
button(
|
|
62
|
+
"Home",
|
|
63
|
+
{ size, tint -> LauncherIcons.Home(size, tint) },
|
|
64
|
+
Routes.Home
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
button(
|
|
68
|
+
"Updates",
|
|
69
|
+
{ size, tint -> LauncherIcons.UpdatesNav(size, tint) },
|
|
70
|
+
Routes.Updates
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
button(
|
|
74
|
+
"Settings",
|
|
75
|
+
{ size, tint -> LauncherIcons.Settings(size, tint) },
|
|
76
|
+
Routes.Settings
|
|
77
|
+
)
|
|
77
78
|
}
|
|
78
79
|
}
|
|
79
80
|
}
|
|
@@ -5,30 +5,28 @@ import androidx.compose.foundation.clickable
|
|
|
5
5
|
import androidx.compose.foundation.layout.Arrangement
|
|
6
6
|
import androidx.compose.foundation.layout.Column
|
|
7
7
|
import androidx.compose.foundation.layout.padding
|
|
8
|
-
import androidx.compose.foundation.layout.size
|
|
9
8
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
|
10
9
|
import androidx.compose.runtime.Composable
|
|
11
10
|
import androidx.compose.ui.Alignment
|
|
12
11
|
import androidx.compose.ui.Modifier
|
|
13
12
|
import androidx.compose.ui.draw.clip
|
|
14
13
|
import androidx.compose.ui.graphics.Color
|
|
15
|
-
import androidx.compose.ui.graphics.painter.Painter
|
|
16
14
|
import androidx.compose.ui.text.font.FontWeight
|
|
15
|
+
import androidx.compose.ui.unit.Dp
|
|
17
16
|
import androidx.compose.ui.unit.dp
|
|
18
|
-
import com.composeunstyled.Icon
|
|
19
17
|
import expo.modules.devmenu.compose.newtheme.NewAppTheme
|
|
20
18
|
import expo.modules.devmenu.compose.primitives.NewText
|
|
21
19
|
|
|
22
20
|
@Composable
|
|
23
21
|
fun BottomTabButton(
|
|
24
22
|
label: String,
|
|
25
|
-
icon:
|
|
23
|
+
icon: @Composable (size: Dp, tint: Color) -> Unit,
|
|
26
24
|
isSelected: Boolean,
|
|
27
25
|
modifier: Modifier = Modifier,
|
|
28
26
|
onClick: () -> Unit
|
|
29
27
|
) {
|
|
30
28
|
Column(
|
|
31
|
-
horizontalAlignment = Alignment.
|
|
29
|
+
horizontalAlignment = Alignment.CenterHorizontally,
|
|
32
30
|
verticalArrangement = Arrangement.spacedBy(NewAppTheme.spacing.`1`),
|
|
33
31
|
modifier = modifier
|
|
34
32
|
.clip(
|
|
@@ -46,15 +44,13 @@ fun BottomTabButton(
|
|
|
46
44
|
)
|
|
47
45
|
.padding(vertical = NewAppTheme.spacing.`2`)
|
|
48
46
|
) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
47
|
+
icon(
|
|
48
|
+
24.dp,
|
|
49
|
+
if (isSelected) {
|
|
52
50
|
NewAppTheme.colors.icon.info
|
|
53
51
|
} else {
|
|
54
52
|
NewAppTheme.colors.icon.quaternary
|
|
55
|
-
}
|
|
56
|
-
contentDescription = "$label Icon",
|
|
57
|
-
modifier = Modifier.size(24.dp)
|
|
53
|
+
}
|
|
58
54
|
)
|
|
59
55
|
|
|
60
56
|
NewText(
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
package expo.modules.devlauncher.compose.ui
|
|
2
|
+
|
|
3
|
+
import androidx.compose.foundation.background
|
|
4
|
+
import androidx.compose.foundation.layout.Box
|
|
5
|
+
import androidx.compose.foundation.layout.fillMaxSize
|
|
6
|
+
import androidx.compose.foundation.layout.statusBarsPadding
|
|
7
|
+
import androidx.compose.runtime.Composable
|
|
8
|
+
import androidx.compose.ui.Modifier
|
|
9
|
+
import expo.modules.devmenu.compose.newtheme.NewAppTheme
|
|
10
|
+
|
|
11
|
+
@Composable
|
|
12
|
+
fun DefaultScreenContainer(
|
|
13
|
+
content: @Composable () -> Unit
|
|
14
|
+
) {
|
|
15
|
+
Box(
|
|
16
|
+
modifier = Modifier
|
|
17
|
+
.fillMaxSize()
|
|
18
|
+
.background(NewAppTheme.colors.background.default)
|
|
19
|
+
.statusBarsPadding()
|
|
20
|
+
) {
|
|
21
|
+
content()
|
|
22
|
+
}
|
|
23
|
+
}
|
package/android/src/debug/java/expo/modules/devlauncher/compose/ui/FetchDevelopmentServersButton.kt
CHANGED
|
@@ -4,7 +4,6 @@ import androidx.compose.foundation.layout.Arrangement
|
|
|
4
4
|
import androidx.compose.foundation.layout.Row
|
|
5
5
|
import androidx.compose.foundation.layout.fillMaxWidth
|
|
6
6
|
import androidx.compose.foundation.layout.padding
|
|
7
|
-
import androidx.compose.foundation.layout.size
|
|
8
7
|
import androidx.compose.runtime.Composable
|
|
9
8
|
import androidx.compose.runtime.LaunchedEffect
|
|
10
9
|
import androidx.compose.runtime.getValue
|
|
@@ -13,12 +12,9 @@ import androidx.compose.runtime.remember
|
|
|
13
12
|
import androidx.compose.runtime.setValue
|
|
14
13
|
import androidx.compose.ui.Alignment
|
|
15
14
|
import androidx.compose.ui.Modifier
|
|
16
|
-
import androidx.compose.ui.res.painterResource
|
|
17
15
|
import androidx.compose.ui.tooling.preview.Preview
|
|
18
16
|
import androidx.compose.ui.unit.dp
|
|
19
17
|
import com.composeunstyled.Button
|
|
20
|
-
import com.composeunstyled.Icon
|
|
21
|
-
import expo.modules.devlauncher.R
|
|
22
18
|
import expo.modules.devlauncher.compose.models.HomeAction
|
|
23
19
|
import expo.modules.devlauncher.compose.primitives.CircularProgressBar
|
|
24
20
|
import expo.modules.devmenu.compose.newtheme.NewAppTheme
|
|
@@ -86,8 +82,8 @@ fun FetchDevelopmentServersButton(
|
|
|
86
82
|
) {
|
|
87
83
|
Row(
|
|
88
84
|
horizontalArrangement = Arrangement.SpaceBetween,
|
|
89
|
-
verticalAlignment = Alignment.
|
|
90
|
-
modifier = Modifier
|
|
85
|
+
verticalAlignment = Alignment.CenterVertically,
|
|
86
|
+
modifier = Modifier
|
|
91
87
|
.fillMaxWidth()
|
|
92
88
|
.padding(NewAppTheme.spacing.`3`)
|
|
93
89
|
) {
|
|
@@ -102,12 +98,9 @@ fun FetchDevelopmentServersButton(
|
|
|
102
98
|
if (isFetchingUIState) {
|
|
103
99
|
CircularProgressBar(size = 20.dp)
|
|
104
100
|
} else {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
tint = NewAppTheme.colors.icon.quaternary,
|
|
109
|
-
modifier = Modifier
|
|
110
|
-
.size(20.dp)
|
|
101
|
+
LauncherIcons.Download(
|
|
102
|
+
size = 20.dp,
|
|
103
|
+
tint = NewAppTheme.colors.icon.quaternary
|
|
111
104
|
)
|
|
112
105
|
}
|
|
113
106
|
}
|