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.
Files changed (121) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/android/build.gradle +2 -2
  3. package/android/src/debug/java/expo/modules/devlauncher/compose/DevLauncherBottomTabsNavigator.kt +2 -33
  4. package/android/src/debug/java/expo/modules/devlauncher/compose/primitives/Accordion.kt +8 -11
  5. package/android/src/debug/java/expo/modules/devlauncher/compose/primitives/AsyncImage.kt +17 -8
  6. package/android/src/debug/java/expo/modules/devlauncher/compose/primitives/CircularProgressBar.kt +0 -1
  7. package/android/src/debug/java/expo/modules/devlauncher/compose/primitives/DefaultScaffold.kt +4 -2
  8. package/android/src/debug/java/expo/modules/devlauncher/compose/routes/CrashReport.kt +1 -1
  9. package/android/src/debug/java/expo/modules/devlauncher/compose/routes/Home.kt +1 -1
  10. package/android/src/debug/java/expo/modules/devlauncher/compose/routes/Profile.kt +90 -85
  11. package/android/src/debug/java/expo/modules/devlauncher/compose/routes/Routes.kt +3 -0
  12. package/android/src/debug/java/expo/modules/devlauncher/compose/routes/Settings.kt +1 -1
  13. package/android/src/debug/java/expo/modules/devlauncher/compose/routes/Updates.kt +54 -44
  14. package/android/src/debug/java/expo/modules/devlauncher/compose/screens/BranchScreen.kt +11 -23
  15. package/android/src/debug/java/expo/modules/devlauncher/compose/screens/BranchesScreen.kt +17 -24
  16. package/android/src/debug/java/expo/modules/devlauncher/compose/screens/CrashReportScreen.kt +28 -130
  17. package/android/src/debug/java/expo/modules/devlauncher/compose/screens/ErrorScreen.kt +11 -8
  18. package/android/src/debug/java/expo/modules/devlauncher/compose/screens/HomeScreen.kt +84 -59
  19. package/android/src/debug/java/expo/modules/devlauncher/compose/screens/NoUpdatesScreen.kt +1 -1
  20. package/android/src/debug/java/expo/modules/devlauncher/compose/screens/SettingsScreen.kt +45 -49
  21. package/android/src/debug/java/expo/modules/devlauncher/compose/ui/AccountAvatar.kt +2 -6
  22. package/android/src/debug/java/expo/modules/devlauncher/compose/ui/AccountSelector.kt +3 -9
  23. package/android/src/debug/java/expo/modules/devlauncher/compose/ui/AppHeader.kt +5 -15
  24. package/android/src/debug/java/expo/modules/devlauncher/compose/ui/AppLoadingErrorDialog.kt +23 -6
  25. package/android/src/debug/java/expo/modules/devlauncher/compose/ui/BottomSheet.kt +4 -1
  26. package/android/src/debug/java/expo/modules/devlauncher/compose/ui/BottomTabBar.kt +30 -29
  27. package/android/src/debug/java/expo/modules/devlauncher/compose/ui/BottomTabButton.kt +7 -11
  28. package/android/src/debug/java/expo/modules/devlauncher/compose/ui/DefaultScreenContainer.kt +23 -0
  29. package/android/src/debug/java/expo/modules/devlauncher/compose/ui/FetchDevelopmentServersButton.kt +5 -12
  30. package/android/src/debug/java/expo/modules/devlauncher/compose/ui/LauncherIcons.kt +220 -0
  31. package/android/src/debug/java/expo/modules/devlauncher/compose/ui/RunningAppCard.kt +3 -10
  32. package/android/src/debug/java/expo/modules/devlauncher/compose/ui/ScanQRCodeButton.kt +5 -12
  33. package/android/src/debug/java/expo/modules/devlauncher/compose/ui/ServerUrlInput.kt +1 -10
  34. package/android/src/debug/java/expo/modules/devlauncher/compose/ui/StackTrace.kt +50 -0
  35. package/android/src/debug/java/expo/modules/devlauncher/compose/utils/Scrollbar.kt +65 -0
  36. package/android/src/debug/java/expo/modules/devlauncher/compose/utils/UrlUtils.kt +12 -0
  37. package/android/src/main/res/values/colors.xml +0 -3
  38. package/ios/SwiftUI/GraphQL/APIClient.swift +0 -4
  39. package/ios/SwiftUI/UpdatesTab/UpdateRow.swift +3 -1
  40. package/ios/SwiftUI/UpdatesTab/UpdatesListView.swift +37 -38
  41. package/ios/SwiftUI/UpdatesTab/UpdatesTabView.swift +9 -7
  42. package/package.json +4 -4
  43. package/android/src/debug/assets/Inter-Black.otf +0 -0
  44. package/android/src/debug/assets/Inter-Bold.otf +0 -0
  45. package/android/src/debug/assets/Inter-ExtraBold.otf +0 -0
  46. package/android/src/debug/assets/Inter-ExtraLight.otf +0 -0
  47. package/android/src/debug/assets/Inter-Light.otf +0 -0
  48. package/android/src/debug/assets/Inter-Medium.otf +0 -0
  49. package/android/src/debug/assets/Inter-Regular.otf +0 -0
  50. package/android/src/debug/assets/Inter-SemiBold.otf +0 -0
  51. package/android/src/debug/assets/Inter-Thin.otf +0 -0
  52. package/android/src/debug/java/expo/modules/devlauncher/launcher/errors/DevLauncherStackAdapter.kt +0 -39
  53. package/android/src/debug/res/drawable-mdpi/building_icon.png +0 -0
  54. package/android/src/debug/res/drawable-mdpi/check_icon.png +0 -0
  55. package/android/src/debug/res/drawable-mdpi/chevron_right_icon.png +0 -0
  56. package/android/src/debug/res/drawable-mdpi/home_icon.png +0 -0
  57. package/android/src/debug/res/drawable-mdpi/info_icon.png +0 -0
  58. package/android/src/debug/res/drawable-mdpi/qr_code.png +0 -0
  59. package/android/src/debug/res/drawable-mdpi/settings_icon.png +0 -0
  60. package/android/src/debug/res/drawable-mdpi/shake_device_icon.png +0 -0
  61. package/android/src/debug/res/drawable-mdpi/show_menu_at_launch_icon.png +0 -0
  62. package/android/src/debug/res/drawable-mdpi/terminal_icon.png +0 -0
  63. package/android/src/debug/res/drawable-mdpi/three_finger_long_press_icon.png +0 -0
  64. package/android/src/debug/res/drawable-mdpi/user_icon.png +0 -0
  65. package/android/src/debug/res/drawable-mdpi/x_icon.png +0 -0
  66. package/android/src/debug/res/drawable-night-mdpi/qr_code.png +0 -0
  67. package/android/src/debug/res/drawable-night-mdpi/shake_device_icon.png +0 -0
  68. package/android/src/debug/res/drawable-night-xhdpi/qr_code.png +0 -0
  69. package/android/src/debug/res/drawable-night-xhdpi/shake_device_icon.png +0 -0
  70. package/android/src/debug/res/drawable-night-xxhdpi/qr_code.png +0 -0
  71. package/android/src/debug/res/drawable-night-xxhdpi/shake_device_icon.png +0 -0
  72. package/android/src/debug/res/drawable-xhdpi/building_icon.png +0 -0
  73. package/android/src/debug/res/drawable-xhdpi/check_icon.png +0 -0
  74. package/android/src/debug/res/drawable-xhdpi/chevron_right_icon.png +0 -0
  75. package/android/src/debug/res/drawable-xhdpi/home_icon.png +0 -0
  76. package/android/src/debug/res/drawable-xhdpi/info_icon.png +0 -0
  77. package/android/src/debug/res/drawable-xhdpi/qr_code.png +0 -0
  78. package/android/src/debug/res/drawable-xhdpi/settings_icon.png +0 -0
  79. package/android/src/debug/res/drawable-xhdpi/shake_device_icon.png +0 -0
  80. package/android/src/debug/res/drawable-xhdpi/show_menu_at_launch_icon.png +0 -0
  81. package/android/src/debug/res/drawable-xhdpi/terminal_icon.png +0 -0
  82. package/android/src/debug/res/drawable-xhdpi/three_finger_long_press_icon.png +0 -0
  83. package/android/src/debug/res/drawable-xhdpi/user_icon.png +0 -0
  84. package/android/src/debug/res/drawable-xhdpi/x_icon.png +0 -0
  85. package/android/src/debug/res/drawable-xxhdpi/building_icon.png +0 -0
  86. package/android/src/debug/res/drawable-xxhdpi/check_icon.png +0 -0
  87. package/android/src/debug/res/drawable-xxhdpi/chevron_right_icon.png +0 -0
  88. package/android/src/debug/res/drawable-xxhdpi/home_icon.png +0 -0
  89. package/android/src/debug/res/drawable-xxhdpi/info_icon.png +0 -0
  90. package/android/src/debug/res/drawable-xxhdpi/qr_code.png +0 -0
  91. package/android/src/debug/res/drawable-xxhdpi/settings_icon.png +0 -0
  92. package/android/src/debug/res/drawable-xxhdpi/shake_device_icon.png +0 -0
  93. package/android/src/debug/res/drawable-xxhdpi/show_menu_at_launch_icon.png +0 -0
  94. package/android/src/debug/res/drawable-xxhdpi/terminal_icon.png +0 -0
  95. package/android/src/debug/res/drawable-xxhdpi/three_finger_long_press_icon.png +0 -0
  96. package/android/src/debug/res/drawable-xxhdpi/user_icon.png +0 -0
  97. package/android/src/debug/res/drawable-xxhdpi/x_icon.png +0 -0
  98. package/android/src/main/res/drawable/arrow_right.xml +0 -9
  99. package/android/src/main/res/drawable/copy.xml +0 -13
  100. package/android/src/main/res/drawable/inspect.xml +0 -10
  101. package/android/src/main/res/drawable/pulse.xml +0 -10
  102. package/android/src/main/res/drawable/signal.xml +0 -26
  103. package/android/src/main/res/drawable-hdpi/dev_laucher_ic_home_white_36dp.png +0 -0
  104. package/android/src/main/res/drawable-hdpi/dev_launcher_ic_refresh_white_36dp.png +0 -0
  105. package/android/src/main/res/drawable-mdpi/dev_laucher_ic_home_white_36dp.png +0 -0
  106. package/android/src/main/res/drawable-mdpi/dev_launcher_ic_refresh_white_36dp.png +0 -0
  107. package/android/src/main/res/drawable-mdpi/dev_menu_fab_icon.png +0 -0
  108. package/android/src/main/res/drawable-xhdpi/dev_laucher_ic_home_white_36dp.png +0 -0
  109. package/android/src/main/res/drawable-xhdpi/dev_launcher_ic_refresh_white_36dp.png +0 -0
  110. package/android/src/main/res/drawable-xhdpi/dev_menu_fab_icon.png +0 -0
  111. package/android/src/main/res/drawable-xxhdpi/dev_laucher_ic_home_white_36dp.png +0 -0
  112. package/android/src/main/res/drawable-xxhdpi/dev_launcher_ic_refresh_white_36dp.png +0 -0
  113. package/android/src/main/res/drawable-xxhdpi/dev_menu_fab_icon.png +0 -0
  114. package/android/src/main/res/drawable-xxxhdpi/dev_laucher_ic_home_white_36dp.png +0 -0
  115. package/android/src/main/res/drawable-xxxhdpi/dev_launcher_ic_refresh_white_36dp.png +0 -0
  116. package/android/src/main/res/layout/error_activity_content_view.xml +0 -7
  117. package/android/src/main/res/layout/error_console_fragment.xml +0 -53
  118. package/android/src/main/res/layout/error_console_list_item.xml +0 -23
  119. package/android/src/main/res/layout/error_fragment.xml +0 -102
  120. package/android/src/main/res/values/strings.xml +0 -10
  121. /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 com.composeunstyled.Icon
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
- Icon(
51
- painterResource(R.drawable.settings),
52
- contentDescription = "Settings icon",
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
- Icon(
67
- painter = painterResource(R.drawable.show_at_launch),
68
- contentDescription = "Show at launch icon",
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
- Section.Header("MENU GESTURES")
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
- Icon(
98
- painter = painterResource(R.drawable.pulse),
99
- contentDescription = "Shake device icon",
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
- Icon(
126
- painter = painterResource(R.drawable.inspect),
127
- contentDescription = "3 fingers long press icon",
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
- Icon(
154
- painter = painterResource(R.drawable.dev_menu_fab_icon),
155
- contentDescription = "Action button icon",
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
- Icon(
35
- painter = painterResource(R.drawable.user),
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
- Icon(
65
- painterResource(R.drawable.check_circle),
66
- contentDescription = "Checked",
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
- Icon(
118
- painter = painterResource(R.drawable.user),
119
- contentDescription = "User Icon",
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.R
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
- Icon(
68
- painter = painterResource(R.drawable.x_icon),
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(NewAppTheme.colors.border.secondary, shape = RoundedCornerShape(size = 5.dp))
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.res.painterResource
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 buttonModifier = Modifier
44
- .weight(1f)
45
- .fillMaxHeight()
46
- val icons = listOf(
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 = tab.label,
67
- icon = tab.icon,
68
- modifier = buttonModifier,
47
+ label = label,
48
+ icon = icon,
49
+ modifier = Modifier
50
+ .weight(1f)
51
+ .fillMaxHeight(),
69
52
  isSelected = isSelected,
70
53
  onClick = {
71
- navController.navigate(tab.screen) {
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: Painter,
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.Companion.CenterHorizontally,
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
- Icon(
50
- painter = icon,
51
- tint = if (isSelected) {
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
+ }
@@ -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.Companion.CenterVertically,
90
- modifier = Modifier.Companion
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
- Icon(
106
- painter = painterResource(R.drawable.download),
107
- contentDescription = "Fetch development servers icon",
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
  }