expo-dev-launcher 6.0.6-canary-20250826-f475166 → 6.0.7
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 +8 -0
- package/android/build.gradle +2 -2
- package/android/src/debug/java/expo/modules/devlauncher/compose/BindingView.kt +3 -5
- package/android/src/debug/java/expo/modules/devlauncher/compose/DevLauncherBottomTabsNavigator.kt +16 -4
- package/android/src/debug/java/expo/modules/devlauncher/compose/primitives/Accordion.kt +48 -42
- package/android/src/debug/java/expo/modules/devlauncher/compose/primitives/CircularProgressBar.kt +6 -13
- package/android/src/debug/java/expo/modules/devlauncher/compose/routes/DevelopmentServers.kt +53 -0
- package/android/src/debug/java/expo/modules/devlauncher/compose/routes/Home.kt +4 -2
- package/android/src/debug/java/expo/modules/devlauncher/compose/routes/Profile.kt +2 -2
- package/android/src/debug/java/expo/modules/devlauncher/compose/screens/BranchScreen.kt +1 -2
- package/android/src/debug/java/expo/modules/devlauncher/compose/screens/BranchesScreen.kt +121 -129
- package/android/src/debug/java/expo/modules/devlauncher/compose/screens/ErrorScreen.kt +24 -15
- package/android/src/debug/java/expo/modules/devlauncher/compose/screens/HomeScreen.kt +20 -236
- package/android/src/debug/java/expo/modules/devlauncher/compose/screens/SettingsScreen.kt +8 -103
- package/android/src/debug/java/expo/modules/devlauncher/compose/ui/ActionButton.kt +0 -29
- package/android/src/debug/java/expo/modules/devlauncher/compose/ui/AppHeader.kt +4 -6
- package/android/src/debug/java/expo/modules/devlauncher/compose/ui/AppLoadingErrorDialog.kt +33 -20
- package/android/src/debug/java/expo/modules/devlauncher/compose/ui/DevelopmentSession.kt +122 -0
- package/android/src/debug/java/expo/modules/devlauncher/compose/ui/FetchDevelopmentServersButton.kt +125 -0
- package/android/src/debug/java/expo/modules/devlauncher/compose/ui/RunningAppCard.kt +1 -2
- package/android/src/debug/java/expo/modules/devlauncher/compose/ui/ScanQRCodeButton.kt +62 -0
- package/android/src/debug/java/expo/modules/devlauncher/compose/ui/ServerUrlInput.kt +12 -14
- package/android/src/main/res/drawable/download.xml +13 -0
- package/android/src/main/res/drawable/plus.xml +9 -0
- package/package.json +6 -5
- package/android/src/debug/java/expo/modules/devlauncher/compose/ui/DevelopmentServerHelp.kt +0 -55
- package/android/src/debug/java/expo/modules/devlauncher/compose/ui/ProfileLayout.kt +0 -53
- package/android/src/debug/java/expo/modules/devlauncher/compose/ui/ScreenHeaderContainer.kt +0 -25
- package/android/src/debug/java/expo/modules/devlauncher/compose/ui/SectionHeader.kt +0 -20
- /package/android/src/debug/java/expo/modules/devlauncher/compose/primitives/{Asyncimage.kt → AsyncImage.kt} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -10,6 +10,14 @@
|
|
|
10
10
|
|
|
11
11
|
### 💡 Others
|
|
12
12
|
|
|
13
|
+
## 6.0.7 — 2025-08-28
|
|
14
|
+
|
|
15
|
+
_This version does not introduce any user-facing changes._
|
|
16
|
+
|
|
17
|
+
## 6.0.6 — 2025-08-27
|
|
18
|
+
|
|
19
|
+
_This version does not introduce any user-facing changes._
|
|
20
|
+
|
|
13
21
|
## 6.0.5 — 2025-08-25
|
|
14
22
|
|
|
15
23
|
_This version does not introduce any user-facing changes._
|
package/android/build.gradle
CHANGED
|
@@ -20,13 +20,13 @@ expoModule {
|
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
group = "host.exp.exponent"
|
|
23
|
-
version = "6.0.
|
|
23
|
+
version = "6.0.7"
|
|
24
24
|
|
|
25
25
|
android {
|
|
26
26
|
namespace "expo.modules.devlauncher"
|
|
27
27
|
defaultConfig {
|
|
28
28
|
versionCode 9
|
|
29
|
-
versionName "6.0.
|
|
29
|
+
versionName "6.0.7"
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
buildTypes {
|
|
@@ -3,17 +3,15 @@ package expo.modules.devlauncher.compose
|
|
|
3
3
|
import android.content.Context
|
|
4
4
|
import android.widget.LinearLayout
|
|
5
5
|
import androidx.compose.ui.platform.ComposeView
|
|
6
|
-
import expo.modules.devmenu.compose.
|
|
6
|
+
import expo.modules.devmenu.compose.newtheme.AppTheme
|
|
7
7
|
|
|
8
8
|
class BindingView(context: Context) : LinearLayout(context) {
|
|
9
9
|
init {
|
|
10
10
|
addView(
|
|
11
11
|
ComposeView(context).apply {
|
|
12
12
|
setContent {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
DevLauncherBottomTabsNavigator()
|
|
16
|
-
}
|
|
13
|
+
AppTheme {
|
|
14
|
+
DevLauncherBottomTabsNavigator()
|
|
17
15
|
}
|
|
18
16
|
}
|
|
19
17
|
}
|
package/android/src/debug/java/expo/modules/devlauncher/compose/DevLauncherBottomTabsNavigator.kt
CHANGED
|
@@ -18,6 +18,7 @@ import androidx.navigation.compose.rememberNavController
|
|
|
18
18
|
import expo.modules.devlauncher.compose.primitives.DefaultScaffold
|
|
19
19
|
import expo.modules.devlauncher.compose.routes.CrashReport
|
|
20
20
|
import expo.modules.devlauncher.compose.routes.CrashReportRoute
|
|
21
|
+
import expo.modules.devlauncher.compose.routes.DevelopmentServersRoute
|
|
21
22
|
import expo.modules.devlauncher.compose.routes.HomeRoute
|
|
22
23
|
import expo.modules.devlauncher.compose.routes.ProfileRoute
|
|
23
24
|
import expo.modules.devlauncher.compose.routes.Routes
|
|
@@ -56,10 +57,15 @@ object Main
|
|
|
56
57
|
fun DevLauncherBottomTabsNavigator() {
|
|
57
58
|
val mainNavController = rememberNavController()
|
|
58
59
|
val bottomTabsNavController = rememberNavController()
|
|
59
|
-
val
|
|
60
|
+
val profileBottomSheetState = rememberBottomSheetState()
|
|
61
|
+
val developmentServersBottomSheetState = rememberBottomSheetState()
|
|
60
62
|
|
|
61
63
|
val navigateToProfile = remember {
|
|
62
|
-
{
|
|
64
|
+
{ profileBottomSheetState.targetDetent = Full }
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
val openDevelopmentServers = remember {
|
|
68
|
+
{ developmentServersBottomSheetState.targetDetent = Full }
|
|
63
69
|
}
|
|
64
70
|
|
|
65
71
|
NavHost(
|
|
@@ -94,7 +100,11 @@ fun DevLauncherBottomTabsNavigator() {
|
|
|
94
100
|
}
|
|
95
101
|
) {
|
|
96
102
|
composable<Routes.Home> {
|
|
97
|
-
HomeRoute(
|
|
103
|
+
HomeRoute(
|
|
104
|
+
navController = mainNavController,
|
|
105
|
+
onProfileClick = navigateToProfile,
|
|
106
|
+
onDevServersClick = openDevelopmentServers
|
|
107
|
+
)
|
|
98
108
|
}
|
|
99
109
|
composable<Routes.Updates> {
|
|
100
110
|
UpdatesRoute(onProfileClick = navigateToProfile)
|
|
@@ -124,5 +134,7 @@ fun DevLauncherBottomTabsNavigator() {
|
|
|
124
134
|
}
|
|
125
135
|
}
|
|
126
136
|
|
|
127
|
-
ProfileRoute(
|
|
137
|
+
ProfileRoute(profileBottomSheetState)
|
|
138
|
+
|
|
139
|
+
DevelopmentServersRoute(developmentServersBottomSheetState)
|
|
128
140
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
package expo.modules.devlauncher.compose.primitives
|
|
2
2
|
|
|
3
3
|
import androidx.compose.animation.AnimatedVisibility
|
|
4
|
-
import androidx.compose.animation.core.animateFloatAsState
|
|
5
4
|
import androidx.compose.animation.core.tween
|
|
6
5
|
import androidx.compose.animation.expandVertically
|
|
7
6
|
import androidx.compose.animation.shrinkVertically
|
|
@@ -10,6 +9,8 @@ import androidx.compose.foundation.layout.Arrangement
|
|
|
10
9
|
import androidx.compose.foundation.layout.Box
|
|
11
10
|
import androidx.compose.foundation.layout.Column
|
|
12
11
|
import androidx.compose.foundation.layout.Row
|
|
12
|
+
import androidx.compose.foundation.layout.fillMaxWidth
|
|
13
|
+
import androidx.compose.foundation.layout.padding
|
|
13
14
|
import androidx.compose.foundation.layout.size
|
|
14
15
|
import androidx.compose.runtime.Composable
|
|
15
16
|
import androidx.compose.runtime.getValue
|
|
@@ -18,7 +19,6 @@ import androidx.compose.runtime.remember
|
|
|
18
19
|
import androidx.compose.runtime.setValue
|
|
19
20
|
import androidx.compose.ui.Alignment
|
|
20
21
|
import androidx.compose.ui.Modifier
|
|
21
|
-
import androidx.compose.ui.draw.rotate
|
|
22
22
|
import androidx.compose.ui.res.painterResource
|
|
23
23
|
import androidx.compose.ui.tooling.preview.Preview
|
|
24
24
|
import androidx.compose.ui.unit.dp
|
|
@@ -26,7 +26,8 @@ import com.composeunstyled.Icon
|
|
|
26
26
|
import expo.modules.devlauncher.R
|
|
27
27
|
import expo.modules.devmenu.compose.newtheme.NewAppTheme
|
|
28
28
|
import expo.modules.devmenu.compose.primitives.NewText
|
|
29
|
-
import expo.modules.devmenu.compose.primitives.
|
|
29
|
+
import expo.modules.devmenu.compose.primitives.RoundedSurface
|
|
30
|
+
import expo.modules.devmenu.compose.primitives.Spacer
|
|
30
31
|
|
|
31
32
|
@Composable
|
|
32
33
|
fun Accordion(
|
|
@@ -36,58 +37,63 @@ fun Accordion(
|
|
|
36
37
|
accordionContent: @Composable () -> Unit = {}
|
|
37
38
|
) {
|
|
38
39
|
var expanded by remember { mutableStateOf(initialState) }
|
|
39
|
-
val arrowRotation by animateFloatAsState(
|
|
40
|
-
targetValue = if (expanded) 90f else 0f,
|
|
41
|
-
label = "accordion-arrow"
|
|
42
|
-
)
|
|
43
40
|
|
|
44
|
-
|
|
45
|
-
|
|
41
|
+
RoundedSurface(
|
|
42
|
+
color = NewAppTheme.colors.background.subtle,
|
|
43
|
+
borderRadius = NewAppTheme.borderRadius.xl
|
|
44
|
+
) {
|
|
45
|
+
Column(
|
|
46
46
|
modifier = Modifier
|
|
47
|
+
.fillMaxWidth()
|
|
47
48
|
.clickable { expanded = !expanded }
|
|
49
|
+
.padding(NewAppTheme.spacing.`3`)
|
|
48
50
|
) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
51
|
+
Box {
|
|
52
|
+
Row(
|
|
53
|
+
horizontalArrangement = Arrangement.spacedBy(NewAppTheme.spacing.`2`),
|
|
54
|
+
verticalAlignment = Alignment.CenterVertically,
|
|
55
|
+
modifier = modifier
|
|
56
|
+
) {
|
|
57
|
+
Icon(
|
|
58
|
+
painter = painterResource(R.drawable.plus),
|
|
59
|
+
contentDescription = "Accordion Arrow",
|
|
60
|
+
tint = NewAppTheme.colors.text.link,
|
|
61
|
+
modifier = Modifier
|
|
62
|
+
.size(16.dp)
|
|
63
|
+
)
|
|
62
64
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
65
|
+
NewText(
|
|
66
|
+
text = text,
|
|
67
|
+
style = NewAppTheme.font.sm,
|
|
68
|
+
color = NewAppTheme.colors.text.link
|
|
69
|
+
)
|
|
70
|
+
}
|
|
68
71
|
}
|
|
69
|
-
}
|
|
70
72
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
73
|
+
AnimatedVisibility(
|
|
74
|
+
visible = expanded,
|
|
75
|
+
enter = expandVertically(
|
|
76
|
+
expandFrom = Alignment.Top,
|
|
77
|
+
animationSpec = tween()
|
|
78
|
+
),
|
|
79
|
+
exit = shrinkVertically(
|
|
80
|
+
shrinkTowards = Alignment.Top,
|
|
81
|
+
animationSpec = tween()
|
|
82
|
+
)
|
|
83
|
+
) {
|
|
84
|
+
Column {
|
|
85
|
+
Spacer(NewAppTheme.spacing.`3`)
|
|
86
|
+
accordionContent()
|
|
87
|
+
}
|
|
88
|
+
}
|
|
83
89
|
}
|
|
84
90
|
}
|
|
85
91
|
}
|
|
86
92
|
|
|
87
93
|
@Composable
|
|
88
|
-
@Preview(showBackground = true, heightDp = 200)
|
|
94
|
+
@Preview(showBackground = true, heightDp = 200, widthDp = 300)
|
|
89
95
|
fun AccordionVariantPreview() {
|
|
90
96
|
Accordion(text = "Enter URL manually") {
|
|
91
|
-
|
|
97
|
+
NewText("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ac nisl interdum, mattis purus a, consequat ipsum. Aliquam sem mauris, egestas a elit a, lacinia efficitur nisi. Maecenas scelerisque erat nisi, ac interdum mauris volutpat vel. Proin sed lectus at purus interdum porta. Ut mollis feugiat dignissim.")
|
|
92
98
|
}
|
|
93
99
|
}
|
package/android/src/debug/java/expo/modules/devlauncher/compose/primitives/CircularProgressBar.kt
CHANGED
|
@@ -17,8 +17,10 @@ import androidx.compose.ui.graphics.drawscope.withTransform
|
|
|
17
17
|
import androidx.compose.ui.tooling.preview.Preview
|
|
18
18
|
import androidx.compose.ui.unit.Dp
|
|
19
19
|
import androidx.compose.ui.unit.dp
|
|
20
|
-
import expo.modules.devmenu.compose.
|
|
21
|
-
import
|
|
20
|
+
import expo.modules.devmenu.compose.newtheme.NewAppTheme
|
|
21
|
+
import io.github.lukmccall.colors.blue
|
|
22
|
+
import io.github.lukmccall.colors.gray
|
|
23
|
+
|
|
22
24
|
import kotlin.time.Duration
|
|
23
25
|
import kotlin.time.Duration.Companion.seconds
|
|
24
26
|
|
|
@@ -29,17 +31,8 @@ fun CircularProgressBar(
|
|
|
29
31
|
strokeWidth: Dp = size / 8,
|
|
30
32
|
duration: Duration = 1.seconds
|
|
31
33
|
) {
|
|
32
|
-
val backgroundColor =
|
|
33
|
-
|
|
34
|
-
} else {
|
|
35
|
-
Pallet.Light.Gray.gray300
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
val progressColor = if (Theme.isDarkTheme) {
|
|
39
|
-
Pallet.Dark.Blue.blue500
|
|
40
|
-
} else {
|
|
41
|
-
Pallet.Light.Blue.blue500
|
|
42
|
-
}
|
|
34
|
+
val backgroundColor = NewAppTheme.pallet.gray.`3`
|
|
35
|
+
val progressColor = NewAppTheme.pallet.blue.`5`
|
|
43
36
|
|
|
44
37
|
val transition = rememberInfiniteTransition(label = "infiniteSpinningTransition")
|
|
45
38
|
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
package expo.modules.devlauncher.compose.routes
|
|
2
|
+
|
|
3
|
+
import androidx.compose.foundation.layout.Column
|
|
4
|
+
import androidx.compose.foundation.layout.fillMaxWidth
|
|
5
|
+
import androidx.compose.foundation.layout.padding
|
|
6
|
+
import androidx.compose.runtime.Composable
|
|
7
|
+
import androidx.compose.ui.Modifier
|
|
8
|
+
import androidx.compose.ui.text.font.FontWeight
|
|
9
|
+
import androidx.compose.ui.text.style.TextAlign
|
|
10
|
+
import com.composables.core.ModalBottomSheetState
|
|
11
|
+
import com.composables.core.SheetDetent.Companion.Hidden
|
|
12
|
+
import expo.modules.devlauncher.compose.ui.ActionButton
|
|
13
|
+
import expo.modules.devlauncher.compose.ui.BottomSheet
|
|
14
|
+
import expo.modules.devlauncher.compose.ui.DevelopmentSessionHelp
|
|
15
|
+
import expo.modules.devmenu.compose.newtheme.NewAppTheme
|
|
16
|
+
import expo.modules.devmenu.compose.primitives.NewText
|
|
17
|
+
import expo.modules.devmenu.compose.primitives.Spacer
|
|
18
|
+
|
|
19
|
+
@Composable
|
|
20
|
+
fun DevelopmentServersRoute(
|
|
21
|
+
bottomSheetState: ModalBottomSheetState
|
|
22
|
+
) {
|
|
23
|
+
BottomSheet(bottomSheetState) {
|
|
24
|
+
Column {
|
|
25
|
+
NewText(
|
|
26
|
+
"Development Servers",
|
|
27
|
+
style = NewAppTheme.font.xxl.merge(
|
|
28
|
+
fontWeight = FontWeight.SemiBold,
|
|
29
|
+
textAlign = TextAlign.Center
|
|
30
|
+
),
|
|
31
|
+
modifier = Modifier
|
|
32
|
+
.padding(vertical = NewAppTheme.spacing.`4`)
|
|
33
|
+
.fillMaxWidth()
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
Spacer(NewAppTheme.spacing.`3`)
|
|
37
|
+
|
|
38
|
+
DevelopmentSessionHelp()
|
|
39
|
+
|
|
40
|
+
Spacer(NewAppTheme.spacing.`5`)
|
|
41
|
+
|
|
42
|
+
ActionButton(
|
|
43
|
+
text = "Dismiss",
|
|
44
|
+
foreground = NewAppTheme.colors.text.secondary,
|
|
45
|
+
background = NewAppTheme.colors.background.element,
|
|
46
|
+
modifier = Modifier.padding(NewAppTheme.spacing.`3`),
|
|
47
|
+
onClick = {
|
|
48
|
+
bottomSheetState.targetDetent = Hidden
|
|
49
|
+
}
|
|
50
|
+
)
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -13,7 +13,8 @@ import expo.modules.devlauncher.compose.screens.HomeScreen
|
|
|
13
13
|
@Composable
|
|
14
14
|
fun HomeRoute(
|
|
15
15
|
navController: NavController,
|
|
16
|
-
onProfileClick: () -> Unit
|
|
16
|
+
onProfileClick: () -> Unit,
|
|
17
|
+
onDevServersClick: () -> Unit
|
|
17
18
|
) {
|
|
18
19
|
DefaultScreenContainer {
|
|
19
20
|
val viewModel = viewModel<HomeViewModel>()
|
|
@@ -42,7 +43,8 @@ fun HomeRoute(
|
|
|
42
43
|
else -> viewModel.onAction(action)
|
|
43
44
|
}
|
|
44
45
|
},
|
|
45
|
-
onProfileClick = onProfileClick
|
|
46
|
+
onProfileClick = onProfileClick,
|
|
47
|
+
onDevServersClick = onDevServersClick
|
|
46
48
|
)
|
|
47
49
|
}
|
|
48
50
|
}
|
|
@@ -99,14 +99,14 @@ fun ProfileRoute(
|
|
|
99
99
|
)
|
|
100
100
|
)
|
|
101
101
|
.background(
|
|
102
|
-
|
|
102
|
+
Color.White,
|
|
103
103
|
shape = RoundedCornerShape(NewAppTheme.borderRadius.md)
|
|
104
104
|
)
|
|
105
105
|
) {
|
|
106
106
|
Icon(
|
|
107
107
|
painter = painterResource(R.drawable.expo_logo),
|
|
108
108
|
contentDescription = "Expo logo",
|
|
109
|
-
tint =
|
|
109
|
+
tint = Color.Black,
|
|
110
110
|
modifier = Modifier
|
|
111
111
|
.size(24.dp)
|
|
112
112
|
.align(Alignment.Center)
|
|
@@ -41,7 +41,6 @@ import expo.modules.devmenu.compose.primitives.Divider
|
|
|
41
41
|
import expo.modules.devmenu.compose.primitives.NewText
|
|
42
42
|
import expo.modules.devmenu.compose.primitives.RoundedSurface
|
|
43
43
|
import expo.modules.devmenu.compose.primitives.Spacer
|
|
44
|
-
import expo.modules.devmenu.compose.theme.Theme
|
|
45
44
|
|
|
46
45
|
@Composable
|
|
47
46
|
fun BranchScreen(
|
|
@@ -200,7 +199,7 @@ fun BranchScreen(
|
|
|
200
199
|
verticalAlignment = Alignment.CenterVertically
|
|
201
200
|
) {
|
|
202
201
|
CircularProgressBar(
|
|
203
|
-
size =
|
|
202
|
+
size = 44.dp
|
|
204
203
|
)
|
|
205
204
|
}
|
|
206
205
|
}
|