From 274e6aec0ff66a686cd9433e64f2c72963b5a753 Mon Sep 17 00:00:00 2001 From: Zane Schepke Date: Thu, 18 Sep 2025 23:53:45 -0400 Subject: [PATCH] fix: split tunnel sort checked to top closes #882 --- .../ui/screens/tunnels/splittunnel/SplitTunnelScreen.kt | 4 ++-- .../tunnels/splittunnel/components/AppListSection.kt | 8 +++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/splittunnel/SplitTunnelScreen.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/splittunnel/SplitTunnelScreen.kt index ad06f240..3fcd487d 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/splittunnel/SplitTunnelScreen.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/splittunnel/SplitTunnelScreen.kt @@ -36,13 +36,13 @@ fun SplitTunnelScreen(tunnelId: Int, viewModel: SplitTunnelViewModel = hiltViewM val conf by remember { derivedStateOf { tunnelConf.toAmConfig() } } var splitConfig by remember { - mutableStateOf>>( + mutableStateOf( when { conf.`interface`.excludedApplications.isNotEmpty() -> Pair(SplitOption.EXCLUDE, conf.`interface`.excludedApplications.toSet()) conf.`interface`.includedApplications.isNotEmpty() -> Pair(SplitOption.INCLUDE, conf.`interface`.includedApplications.toSet()) - else -> Pair(SplitOption.ALL, emptySet()) + else -> Pair(SplitOption.ALL, emptySet()) } ) } diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/splittunnel/components/AppListSection.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/splittunnel/components/AppListSection.kt index 2b38495d..2d84f1b6 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/splittunnel/components/AppListSection.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/tunnels/splittunnel/components/AppListSection.kt @@ -31,6 +31,7 @@ fun AppListSection( ) { var query by remember { mutableStateOf("") } + val locale = remember { Locale.getDefault() } val filteredAndSortedPackages by remember { derivedStateOf { @@ -40,7 +41,12 @@ fun AppListSection( pkg.name.contains(query, ignoreCase = true) || pkg.packageName.contains(query, ignoreCase = true) } - .sortedBy { pkg -> pkg.name.lowercase(Locale.getDefault()) } + .sortedWith( + compareByDescending { + splitConfig.second.contains(it.packageName) + } + .thenBy { it.name.lowercase(locale) } + ) } }