Skip to content

Commit c2887d4

Browse files
committed
ui: improve page interaction experience
1 parent 32dc143 commit c2887d4

19 files changed

Lines changed: 277 additions & 305 deletions

app/src/main/kotlin/app/AppContent.kt

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@ import features.proxy.server.editor.ProxyServerPage
7171
import features.routing.RoutingPage
7272
import features.settings.SettingsPage
7373
import features.subscription.SubscriptionGroupListPage
74-
import features.subscription.SubscriptionGroupPage
7574
import top.yukonga.miuix.kmp.basic.NavigationBar
7675
import top.yukonga.miuix.kmp.basic.NavigationBarDisplayMode
7776
import top.yukonga.miuix.kmp.basic.NavigationBarItem
@@ -189,11 +188,6 @@ fun AppContent(
189188
SubscriptionGroupListPage(padding = padding)
190189
}
191190
}
192-
entry<Route.SubscriptionGroup> {
193-
key(languageMode) {
194-
SubscriptionGroupPage(padding = padding, groupId = it.groupId)
195-
}
196-
}
197191
entry<Route.ProxyServerEditor> {
198192
key(languageMode) {
199193
ProxyServerPage(

app/src/main/kotlin/app/navigation/Route.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,6 @@ sealed interface Route : NavKey {
3636
@Serializable
3737
data object SubscriptionGroupList : Route
3838

39-
@Serializable
40-
data class SubscriptionGroup(val groupId: Int? = null) : Route
41-
4239
@Serializable
4340
data class ProxyServerEditor(
4441
val ps: ProxyServer<*>,

app/src/main/kotlin/features/resources/ResourceFileComponents.kt

Lines changed: 34 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import app.CustomResourceFileState
44
import app.CustomResourceFileStatus
55
import app.ResourceFileStatus
66
import app.ResourceFileUpdateSource
7+
import androidx.compose.foundation.rememberScrollState
78
import androidx.compose.foundation.text.input.TextFieldLineLimits
89
import androidx.compose.foundation.text.input.TextFieldState
910
import androidx.compose.foundation.text.input.rememberTextFieldState
@@ -20,6 +21,7 @@ import androidx.compose.foundation.layout.height
2021
import androidx.compose.foundation.layout.padding
2122
import androidx.compose.foundation.layout.width
2223
import androidx.compose.foundation.shape.RoundedCornerShape
24+
import androidx.compose.foundation.verticalScroll
2325
import androidx.compose.runtime.Composable
2426
import androidx.compose.runtime.getValue
2527
import androidx.compose.runtime.mutableStateOf
@@ -50,6 +52,7 @@ import top.yukonga.miuix.kmp.overlay.OverlayDialog
5052
import top.yukonga.miuix.kmp.preference.ArrowPreference
5153
import top.yukonga.miuix.kmp.preference.OverlaySpinnerPreference
5254
import top.yukonga.miuix.kmp.theme.MiuixTheme
55+
import top.yukonga.miuix.kmp.window.WindowDialog
5356
import ui.text.formatTemplate
5457
import java.text.DateFormat
5558
import java.util.Date
@@ -378,38 +381,44 @@ private fun CustomResourceFileDialog(
378381
onDismissRequest: () -> Unit,
379382
onSave: () -> Unit,
380383
) {
381-
OverlayDialog(
384+
WindowDialog(
382385
show = show,
383386
title = stringResource(R.string.settings_resource_files_custom_file),
384387
onDismissRequest = onDismissRequest,
385388
content = {
386-
TextField(
387-
state = nameState,
388-
label = stringResource(R.string.settings_resource_files_custom_name),
389-
lineLimits = TextFieldLineLimits.SingleLine,
390-
modifier = Modifier.padding(bottom = 12.dp),
391-
)
392-
TextField(
393-
state = urlState,
394-
label = stringResource(R.string.settings_resource_files_custom_url),
395-
lineLimits = TextFieldLineLimits.SingleLine,
396-
modifier = Modifier.padding(bottom = 16.dp),
397-
)
398-
Row(
399-
modifier = Modifier.fillMaxWidth(),
400-
horizontalArrangement = Arrangement.SpaceBetween,
389+
Column(
390+
modifier = Modifier
391+
.fillMaxWidth()
392+
.verticalScroll(rememberScrollState()),
401393
) {
402-
TextButton(
403-
text = stringResource(R.string.common_cancel),
404-
onClick = onDismissRequest,
405-
modifier = Modifier.weight(1f),
394+
TextField(
395+
state = nameState,
396+
label = stringResource(R.string.settings_resource_files_custom_name),
397+
lineLimits = TextFieldLineLimits.SingleLine,
398+
modifier = Modifier.fillMaxWidth().padding(bottom = 12.dp),
406399
)
407-
Spacer(Modifier.width(20.dp))
408-
TextButton(
409-
text = stringResource(R.string.common_save),
410-
onClick = onSave,
411-
modifier = Modifier.weight(1f),
400+
TextField(
401+
state = urlState,
402+
label = stringResource(R.string.settings_resource_files_custom_url),
403+
lineLimits = TextFieldLineLimits.SingleLine,
404+
modifier = Modifier.fillMaxWidth().padding(bottom = 16.dp),
412405
)
406+
Row(
407+
modifier = Modifier.fillMaxWidth(),
408+
horizontalArrangement = Arrangement.SpaceBetween,
409+
) {
410+
TextButton(
411+
text = stringResource(R.string.common_cancel),
412+
onClick = onDismissRequest,
413+
modifier = Modifier.weight(1f),
414+
)
415+
Spacer(Modifier.width(20.dp))
416+
TextButton(
417+
text = stringResource(R.string.common_save),
418+
onClick = onSave,
419+
modifier = Modifier.weight(1f),
420+
)
421+
}
413422
}
414423
},
415424
)

app/src/main/kotlin/features/routing/RouteRuleComponents.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,10 @@ import top.yukonga.miuix.kmp.basic.TextField
4141
import top.yukonga.miuix.kmp.icon.MiuixIcons
4242
import top.yukonga.miuix.kmp.icon.extended.Delete
4343
import top.yukonga.miuix.kmp.icon.extended.Edit
44-
import top.yukonga.miuix.kmp.overlay.OverlayBottomSheet
4544
import top.yukonga.miuix.kmp.preference.OverlayDropdownPreference
4645
import top.yukonga.miuix.kmp.theme.MiuixTheme
46+
import top.yukonga.miuix.kmp.preference.WindowDropdownPreference
47+
import top.yukonga.miuix.kmp.window.WindowBottomSheet
4748
import ui.components.StringListEditor
4849
import ui.components.StringListStatusText
4950
import ui.components.draggedCardShadow
@@ -227,7 +228,7 @@ internal fun RouteRuleEditorBottomSheet(
227228
}
228229
}
229230

230-
OverlayBottomSheet(
231+
WindowBottomSheet(
231232
show = show,
232233
title = if (initialRule == null) {
233234
stringResource(R.string.routing_add_rule)
@@ -247,7 +248,6 @@ internal fun RouteRuleEditorBottomSheet(
247248
)
248249
},
249250
onDismissRequest = onDismissRequest,
250-
defaultWindowInsetsPadding = false,
251251
) {
252252
LazyColumn(
253253
modifier = Modifier
@@ -436,7 +436,7 @@ private fun RouteRuleEditorContent(
436436
modifier = Modifier.padding(bottom = 8.dp),
437437
)
438438
}
439-
OverlayDropdownPreference(
439+
WindowDropdownPreference(
440440
title = stringResource(R.string.routing_outbound_tag_label),
441441
items = effectiveOutboundOptions.map { option -> option.label },
442442
selectedIndex = selectedOutboundIndex,

app/src/main/kotlin/features/settings/sheets/DnsSettingsBottomSheet.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import androidx.compose.ui.unit.dp
1515
import app.R
1616
import engine.network.isIpAddress
1717
import top.yukonga.miuix.kmp.basic.TextButton
18-
import top.yukonga.miuix.kmp.overlay.OverlayBottomSheet
18+
import top.yukonga.miuix.kmp.window.WindowBottomSheet
1919
import top.yukonga.miuix.kmp.preference.SwitchPreference
2020
import ui.components.StringListEditor
2121
import ui.components.sanitizeStringListItems
@@ -65,7 +65,7 @@ internal fun DnsSettingsBottomSheet(
6565
val dnsDomainInvalidMessage = stringResource(R.string.settings_dns_domain_invalid)
6666
val effectiveLocalDnsEnabled = forceEnableLocalDns || enableVpnLocalDns
6767
val effectiveFakeDnsEnabled = effectiveLocalDnsEnabled && enableFakeDns
68-
OverlayBottomSheet(
68+
WindowBottomSheet(
6969
show = show,
7070
title = stringResource(R.string.settings_dns),
7171
startAction = {
@@ -92,7 +92,6 @@ internal fun DnsSettingsBottomSheet(
9292
)
9393
},
9494
onDismissRequest = onDismissRequest,
95-
defaultWindowInsetsPadding = false,
9695
) {
9796
SettingsSheetContent {
9897
SwitchPreference(

app/src/main/kotlin/features/settings/sheets/FragmentSettingsBottomSheet.kt

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ import app.R
2121
import androidx.compose.ui.res.stringResource
2222
import top.yukonga.miuix.kmp.basic.Text
2323
import top.yukonga.miuix.kmp.basic.TextButton
24-
import top.yukonga.miuix.kmp.overlay.OverlayBottomSheet
25-
import top.yukonga.miuix.kmp.preference.OverlayDropdownPreference
2624
import top.yukonga.miuix.kmp.preference.SwitchPreference
25+
import top.yukonga.miuix.kmp.preference.WindowDropdownPreference
2726
import top.yukonga.miuix.kmp.theme.MiuixTheme
27+
import top.yukonga.miuix.kmp.window.WindowBottomSheet
2828
import ui.text.formatTemplate
2929

3030
@Composable
@@ -67,8 +67,18 @@ internal fun FragmentSettingsBottomSheet(
6767
val lengthError = enabled && !isFragmentRangeValid(length, min = 1)
6868
val intervalError = enabled && !isFragmentRangeValid(interval, min = 0)
6969
val canSave = !enabled || (!lengthError && !intervalError)
70+
val saveSettings = {
71+
if (canSave) {
72+
onSave(
73+
enabled,
74+
normalizeFragmentPackets(packets),
75+
normalizeFragmentRange(length, DefaultFragmentLength, min = 1),
76+
normalizeFragmentRange(interval, DefaultFragmentInterval, min = 0),
77+
)
78+
}
79+
}
7080

71-
OverlayBottomSheet(
81+
WindowBottomSheet(
7282
show = show,
7383
title = stringResource(R.string.settings_fragment),
7484
startAction = {
@@ -80,20 +90,10 @@ internal fun FragmentSettingsBottomSheet(
8090
endAction = {
8191
TextButton(
8292
text = stringResource(R.string.common_save),
83-
onClick = {
84-
if (canSave) {
85-
onSave(
86-
enabled,
87-
normalizeFragmentPackets(packets),
88-
normalizeFragmentRange(length, DefaultFragmentLength, min = 1),
89-
normalizeFragmentRange(interval, DefaultFragmentInterval, min = 0),
90-
)
91-
}
92-
},
93+
onClick = saveSettings,
9394
)
9495
},
9596
onDismissRequest = onDismissRequest,
96-
defaultWindowInsetsPadding = false,
9797
) {
9898
key(show) {
9999
SettingsSheetContent {
@@ -109,7 +109,7 @@ internal fun FragmentSettingsBottomSheet(
109109
exit = shrinkVertically() + fadeOut(),
110110
) {
111111
Column(modifier = Modifier.fillMaxWidth()) {
112-
OverlayDropdownPreference(
112+
WindowDropdownPreference(
113113
title = stringResource(R.string.settings_fragment_packets),
114114
items = FragmentPacketsValues,
115115
selectedIndex = fragmentPacketsIndex(packets),

app/src/main/kotlin/features/settings/sheets/InboundProxySettingsBottomSheet.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import androidx.compose.ui.unit.dp
1414
import app.R
1515
import androidx.compose.ui.res.stringResource
1616
import top.yukonga.miuix.kmp.basic.TextButton
17-
import top.yukonga.miuix.kmp.overlay.OverlayBottomSheet
17+
import top.yukonga.miuix.kmp.window.WindowBottomSheet
1818
import top.yukonga.miuix.kmp.preference.SwitchPreference
1919

2020

@@ -34,7 +34,7 @@ internal fun ProxySettingsBottomSheet(
3434
onDismissRequest: () -> Unit,
3535
onSave: (String, Boolean, String, Boolean, String) -> Unit,
3636
) {
37-
OverlayBottomSheet(
37+
WindowBottomSheet(
3838
show = show,
3939
title = stringResource(R.string.settings_inbound),
4040
startAction = {
@@ -58,7 +58,6 @@ internal fun ProxySettingsBottomSheet(
5858
)
5959
},
6060
onDismissRequest = onDismissRequest,
61-
defaultWindowInsetsPadding = false,
6261
) {
6362
key(show) {
6463
SettingsSheetContent {

app/src/main/kotlin/features/settings/sheets/LocalProxySettingsBottomSheet.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import androidx.compose.runtime.key
55
import androidx.compose.ui.res.stringResource
66
import app.R
77
import top.yukonga.miuix.kmp.basic.TextButton
8-
import top.yukonga.miuix.kmp.overlay.OverlayBottomSheet
8+
import top.yukonga.miuix.kmp.window.WindowBottomSheet
99
import top.yukonga.miuix.kmp.preference.SwitchPreference
1010

1111

@@ -27,7 +27,7 @@ internal fun LocalProxySettingsBottomSheet(
2727
) {
2828
val portError = if (isPort(port)) null else stringResource(R.string.settings_local_proxy_port_invalid)
2929

30-
OverlayBottomSheet(
30+
WindowBottomSheet(
3131
show = show,
3232
title = stringResource(R.string.settings_local_proxy),
3333
startAction = {
@@ -53,7 +53,6 @@ internal fun LocalProxySettingsBottomSheet(
5353
)
5454
},
5555
onDismissRequest = onDismissRequest,
56-
defaultWindowInsetsPadding = false,
5756
) {
5857
key(show) {
5958
SettingsSheetContent {

app/src/main/kotlin/features/settings/sheets/MuxSettingsBottomSheet.kt

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ import app.R
2121
import androidx.compose.ui.res.stringResource
2222
import top.yukonga.miuix.kmp.basic.Text
2323
import top.yukonga.miuix.kmp.basic.TextButton
24-
import top.yukonga.miuix.kmp.overlay.OverlayBottomSheet
25-
import top.yukonga.miuix.kmp.preference.OverlayDropdownPreference
2624
import top.yukonga.miuix.kmp.preference.SwitchPreference
25+
import top.yukonga.miuix.kmp.preference.WindowDropdownPreference
2726
import top.yukonga.miuix.kmp.theme.MiuixTheme
27+
import top.yukonga.miuix.kmp.window.WindowBottomSheet
2828
import ui.text.formatTemplate
2929

3030
@Composable
@@ -71,8 +71,18 @@ internal fun MuxSettingsBottomSheet(
7171
val concurrencyError = enabled && !isMuxConcurrencyValid(concurrency)
7272
val xudpConcurrencyError = enabled && !isMuxXudpConcurrencyValid(xudpConcurrency)
7373
val canSave = !enabled || (!concurrencyError && !xudpConcurrencyError)
74+
val saveSettings = {
75+
if (canSave) {
76+
onSave(
77+
enabled,
78+
normalizeMuxInteger(concurrency, fallback = DefaultMuxConcurrency),
79+
normalizeMuxInteger(xudpConcurrency, fallback = DefaultMuxXudpConcurrency),
80+
sanitizeMuxUdp443Index(xudpProxyUdp443),
81+
)
82+
}
83+
}
7484

75-
OverlayBottomSheet(
85+
WindowBottomSheet(
7686
show = show,
7787
title = stringResource(R.string.settings_mux),
7888
startAction = {
@@ -84,20 +94,10 @@ internal fun MuxSettingsBottomSheet(
8494
endAction = {
8595
TextButton(
8696
text = stringResource(R.string.common_save),
87-
onClick = {
88-
if (canSave) {
89-
onSave(
90-
enabled,
91-
normalizeMuxInteger(concurrency, fallback = DefaultMuxConcurrency),
92-
normalizeMuxInteger(xudpConcurrency, fallback = DefaultMuxXudpConcurrency),
93-
sanitizeMuxUdp443Index(xudpProxyUdp443),
94-
)
95-
}
96-
},
97+
onClick = saveSettings,
9798
)
9899
},
99100
onDismissRequest = onDismissRequest,
100-
defaultWindowInsetsPadding = false,
101101
) {
102102
key(show) {
103103
SettingsSheetContent {
@@ -136,7 +136,7 @@ internal fun MuxSettingsBottomSheet(
136136
null
137137
},
138138
)
139-
OverlayDropdownPreference(
139+
WindowDropdownPreference(
140140
title = stringResource(R.string.settings_mux_udp443),
141141
items = muxUdp443Options(),
142142
selectedIndex = sanitizeMuxUdp443Index(xudpProxyUdp443),

0 commit comments

Comments
 (0)