From 3c421b1362e399a6abfc6b900506654954ffae74 Mon Sep 17 00:00:00 2001 From: Rifat Azad Date: Sun, 13 Jul 2025 20:59:33 +0600 Subject: [PATCH] manager: added more module list sort options ( enabled, action and webui) --- .../com/rifsxd/ksunext/ui/screen/Module.kt | 115 ++++++++++++++++++ .../ksunext/ui/viewmodel/ModuleViewModel.kt | 6 + manager/app/src/main/res/values/strings.xml | 3 + 3 files changed, 124 insertions(+) diff --git a/manager/app/src/main/java/com/rifsxd/ksunext/ui/screen/Module.kt b/manager/app/src/main/java/com/rifsxd/ksunext/ui/screen/Module.kt index f9c6c365..dd62c0d6 100644 --- a/manager/app/src/main/java/com/rifsxd/ksunext/ui/screen/Module.kt +++ b/manager/app/src/main/java/com/rifsxd/ksunext/ui/screen/Module.kt @@ -150,6 +150,10 @@ fun ModuleScreen(navigator: DestinationsNavigator) { viewModel.sortZToA = prefs.getBoolean("module_sort_z_to_a", false) viewModel.sortSizeLowToHigh = prefs.getBoolean("module_sort_size_low_to_high", false) viewModel.sortSizeHighToLow = prefs.getBoolean("module_sort_size_high_to_low", false) + viewModel.sortEnabledFirst = prefs.getBoolean("module_sort_enabled_first", false) + viewModel.sortActionFirst = prefs.getBoolean("module_sort_action_first", false) + viewModel.sortWebUiFirst = prefs.getBoolean("module_sort_webui_first", false) + if (viewModel.moduleList.isEmpty() || viewModel.isNeedRefresh) { viewModel.fetchModuleList() } @@ -233,11 +237,17 @@ fun ModuleScreen(navigator: DestinationsNavigator) { viewModel.sortZToA = false viewModel.sortSizeLowToHigh = false viewModel.sortSizeHighToLow = false + viewModel.sortEnabledFirst = false + viewModel.sortActionFirst = false + viewModel.sortWebUiFirst = false prefs.edit() .putBoolean("module_sort_a_to_z", viewModel.sortAToZ) .putBoolean("module_sort_z_to_a", false) .putBoolean("module_sort_size_low_to_high", false) .putBoolean("module_sort_size_high_to_low", false) + .putBoolean("module_sort_enabled_first", false) + .putBoolean("module_sort_action_first", false) + .putBoolean("module_sort_webui_first", false) .apply() scope.launch { viewModel.fetchModuleList() @@ -257,11 +267,17 @@ fun ModuleScreen(navigator: DestinationsNavigator) { viewModel.sortAToZ = false viewModel.sortSizeLowToHigh = false viewModel.sortSizeHighToLow = false + viewModel.sortEnabledFirst = false + viewModel.sortActionFirst = false + viewModel.sortWebUiFirst = false prefs.edit() .putBoolean("module_sort_z_to_a", viewModel.sortZToA) .putBoolean("module_sort_a_to_z", false) .putBoolean("module_sort_size_low_to_high", false) .putBoolean("module_sort_size_high_to_low", false) + .putBoolean("module_sort_enabled_first", false) + .putBoolean("module_sort_action_first", false) + .putBoolean("module_sort_webui_first", false) .apply() scope.launch { viewModel.fetchModuleList() @@ -281,11 +297,17 @@ fun ModuleScreen(navigator: DestinationsNavigator) { viewModel.sortAToZ = false viewModel.sortZToA = false viewModel.sortSizeHighToLow = false + viewModel.sortEnabledFirst = false + viewModel.sortActionFirst = false + viewModel.sortWebUiFirst = false prefs.edit() .putBoolean("module_sort_size_low_to_high", viewModel.sortSizeLowToHigh) .putBoolean("module_sort_a_to_z", false) .putBoolean("module_sort_z_to_a", false) .putBoolean("module_sort_size_high_to_low", false) + .putBoolean("module_sort_enabled_first", false) + .putBoolean("module_sort_action_first", false) + .putBoolean("module_sort_webui_first", false) .apply() scope.launch { viewModel.fetchModuleList() @@ -305,11 +327,104 @@ fun ModuleScreen(navigator: DestinationsNavigator) { viewModel.sortAToZ = false viewModel.sortZToA = false viewModel.sortSizeLowToHigh = false + viewModel.sortEnabledFirst = false + viewModel.sortActionFirst = false + viewModel.sortWebUiFirst = false prefs.edit() .putBoolean("module_sort_size_high_to_low", viewModel.sortSizeHighToLow) .putBoolean("module_sort_a_to_z", false) .putBoolean("module_sort_z_to_a", false) .putBoolean("module_sort_size_low_to_high", false) + .putBoolean("module_sort_enabled_first", false) + .putBoolean("module_sort_action_first", false) + .putBoolean("module_sort_webui_first", false) + .apply() + scope.launch { + viewModel.fetchModuleList() + } + } + ) + DropdownMenuItem( + text = { + Text(stringResource(R.string.module_sort_enabled_first)) + }, + trailingIcon = { + Checkbox(checked = viewModel.sortEnabledFirst, onCheckedChange = null) + }, + onClick = { + viewModel.sortEnabledFirst = !viewModel.sortEnabledFirst + viewModel.sortAToZ = false + viewModel.sortZToA = false + viewModel.sortSizeLowToHigh = false + viewModel.sortSizeHighToLow = false + viewModel.sortActionFirst = false + viewModel.sortWebUiFirst = false + prefs.edit() + .putBoolean("module_sort_enabled_first", viewModel.sortEnabledFirst) + .putBoolean("module_sort_a_to_z", false) + .putBoolean("module_sort_z_to_a", false) + .putBoolean("module_sort_size_low_to_high", false) + .putBoolean("module_sort_size_high_to_low", false) + .putBoolean("module_sort_action_first", false) + .putBoolean("module_sort_webui_first", false) + .apply() + scope.launch { + viewModel.fetchModuleList() + } + } + ) + DropdownMenuItem( + text = { + Text(stringResource(R.string.module_sort_action_first)) + }, + trailingIcon = { + Checkbox(checked = viewModel.sortActionFirst, onCheckedChange = null) + }, + onClick = { + viewModel.sortActionFirst = !viewModel.sortActionFirst + viewModel.sortAToZ = false + viewModel.sortZToA = false + viewModel.sortSizeLowToHigh = false + viewModel.sortSizeHighToLow = false + viewModel.sortEnabledFirst = false + viewModel.sortWebUiFirst = false + prefs.edit() + .putBoolean("module_sort_action_first", viewModel.sortActionFirst) + .putBoolean("module_sort_a_to_z", false) + .putBoolean("module_sort_z_to_a", false) + .putBoolean("module_sort_size_low_to_high", false) + .putBoolean("module_sort_size_high_to_low", false) + .putBoolean("module_sort_enabled_first", false) + .putBoolean("module_sort_webui_first", false) + .apply() + scope.launch { + viewModel.fetchModuleList() + } + } + ) + DropdownMenuItem( + text = { + Text(stringResource(R.string.module_sort_webui_first)) + }, + trailingIcon = { + Checkbox(checked = viewModel.sortWebUiFirst, onCheckedChange = null) + }, + onClick = { + viewModel.sortWebUiFirst = !viewModel.sortWebUiFirst + viewModel.sortAToZ = false + viewModel.sortZToA = false + viewModel.sortSizeLowToHigh = false + viewModel.sortSizeHighToLow = false + viewModel.sortEnabledFirst = false + viewModel.sortActionFirst = false + prefs.edit() + .putBoolean("module_sort_webui_first", viewModel.sortWebUiFirst) + .putBoolean("module_sort_a_to_z", false) + .putBoolean("module_sort_z_to_a", false) + .putBoolean("module_sort_size_low_to_high", false) + .putBoolean("module_sort_size_high_to_low", false) + .putBoolean("module_sort_enabled_first", false) + .putBoolean("module_sort_action_first", false) .apply() scope.launch { viewModel.fetchModuleList() diff --git a/manager/app/src/main/java/com/rifsxd/ksunext/ui/viewmodel/ModuleViewModel.kt b/manager/app/src/main/java/com/rifsxd/ksunext/ui/viewmodel/ModuleViewModel.kt index 7e64356e..c5e3d30e 100644 --- a/manager/app/src/main/java/com/rifsxd/ksunext/ui/viewmodel/ModuleViewModel.kt +++ b/manager/app/src/main/java/com/rifsxd/ksunext/ui/viewmodel/ModuleViewModel.kt @@ -67,9 +67,15 @@ class ModuleViewModel : ViewModel() { var sortZToA by mutableStateOf(false) var sortSizeLowToHigh by mutableStateOf(false) var sortSizeHighToLow by mutableStateOf(false) + var sortEnabledFirst by mutableStateOf(false) + var sortActionFirst by mutableStateOf(false) + var sortWebUiFirst by mutableStateOf(false) val moduleList by derivedStateOf { val comparator = when { + sortWebUiFirst -> compareByDescending { it.hasWebUi } + sortEnabledFirst -> compareByDescending { it.enabled } + sortActionFirst -> compareByDescending { it.hasActionScript } sortAToZ -> compareBy { it.name.lowercase() } sortZToA -> compareByDescending { it.name.lowercase() } sortSizeLowToHigh -> compareBy { it.size } diff --git a/manager/app/src/main/res/values/strings.xml b/manager/app/src/main/res/values/strings.xml index 22cfc8ea..a31c71cb 100644 --- a/manager/app/src/main/res/values/strings.xml +++ b/manager/app/src/main/res/values/strings.xml @@ -228,4 +228,7 @@ Superusers Module Modules + Sort (Enabled first) + Sort (Action first) + Sort (WebUI first)