manager: added more module list sort options ( enabled, action and webui)

This commit is contained in:
Rifat Azad
2025-07-13 20:59:33 +06:00
parent c6b60a24e8
commit 3c421b1362
3 changed files with 124 additions and 0 deletions
@@ -150,6 +150,10 @@ fun ModuleScreen(navigator: DestinationsNavigator) {
viewModel.sortZToA = prefs.getBoolean("module_sort_z_to_a", false) viewModel.sortZToA = prefs.getBoolean("module_sort_z_to_a", false)
viewModel.sortSizeLowToHigh = prefs.getBoolean("module_sort_size_low_to_high", false) viewModel.sortSizeLowToHigh = prefs.getBoolean("module_sort_size_low_to_high", false)
viewModel.sortSizeHighToLow = prefs.getBoolean("module_sort_size_high_to_low", 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) { if (viewModel.moduleList.isEmpty() || viewModel.isNeedRefresh) {
viewModel.fetchModuleList() viewModel.fetchModuleList()
} }
@@ -233,11 +237,17 @@ fun ModuleScreen(navigator: DestinationsNavigator) {
viewModel.sortZToA = false viewModel.sortZToA = false
viewModel.sortSizeLowToHigh = false viewModel.sortSizeLowToHigh = false
viewModel.sortSizeHighToLow = false viewModel.sortSizeHighToLow = false
viewModel.sortEnabledFirst = false
viewModel.sortActionFirst = false
viewModel.sortWebUiFirst = false
prefs.edit() prefs.edit()
.putBoolean("module_sort_a_to_z", viewModel.sortAToZ) .putBoolean("module_sort_a_to_z", viewModel.sortAToZ)
.putBoolean("module_sort_z_to_a", false) .putBoolean("module_sort_z_to_a", false)
.putBoolean("module_sort_size_low_to_high", false) .putBoolean("module_sort_size_low_to_high", false)
.putBoolean("module_sort_size_high_to_low", 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() .apply()
scope.launch { scope.launch {
viewModel.fetchModuleList() viewModel.fetchModuleList()
@@ -257,11 +267,17 @@ fun ModuleScreen(navigator: DestinationsNavigator) {
viewModel.sortAToZ = false viewModel.sortAToZ = false
viewModel.sortSizeLowToHigh = false viewModel.sortSizeLowToHigh = false
viewModel.sortSizeHighToLow = false viewModel.sortSizeHighToLow = false
viewModel.sortEnabledFirst = false
viewModel.sortActionFirst = false
viewModel.sortWebUiFirst = false
prefs.edit() prefs.edit()
.putBoolean("module_sort_z_to_a", viewModel.sortZToA) .putBoolean("module_sort_z_to_a", viewModel.sortZToA)
.putBoolean("module_sort_a_to_z", false) .putBoolean("module_sort_a_to_z", false)
.putBoolean("module_sort_size_low_to_high", false) .putBoolean("module_sort_size_low_to_high", false)
.putBoolean("module_sort_size_high_to_low", 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() .apply()
scope.launch { scope.launch {
viewModel.fetchModuleList() viewModel.fetchModuleList()
@@ -281,11 +297,17 @@ fun ModuleScreen(navigator: DestinationsNavigator) {
viewModel.sortAToZ = false viewModel.sortAToZ = false
viewModel.sortZToA = false viewModel.sortZToA = false
viewModel.sortSizeHighToLow = false viewModel.sortSizeHighToLow = false
viewModel.sortEnabledFirst = false
viewModel.sortActionFirst = false
viewModel.sortWebUiFirst = false
prefs.edit() prefs.edit()
.putBoolean("module_sort_size_low_to_high", viewModel.sortSizeLowToHigh) .putBoolean("module_sort_size_low_to_high", viewModel.sortSizeLowToHigh)
.putBoolean("module_sort_a_to_z", false) .putBoolean("module_sort_a_to_z", false)
.putBoolean("module_sort_z_to_a", false) .putBoolean("module_sort_z_to_a", false)
.putBoolean("module_sort_size_high_to_low", 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() .apply()
scope.launch { scope.launch {
viewModel.fetchModuleList() viewModel.fetchModuleList()
@@ -305,11 +327,104 @@ fun ModuleScreen(navigator: DestinationsNavigator) {
viewModel.sortAToZ = false viewModel.sortAToZ = false
viewModel.sortZToA = false viewModel.sortZToA = false
viewModel.sortSizeLowToHigh = false viewModel.sortSizeLowToHigh = false
viewModel.sortEnabledFirst = false
viewModel.sortActionFirst = false
viewModel.sortWebUiFirst = false
prefs.edit() prefs.edit()
.putBoolean("module_sort_size_high_to_low", viewModel.sortSizeHighToLow) .putBoolean("module_sort_size_high_to_low", viewModel.sortSizeHighToLow)
.putBoolean("module_sort_a_to_z", false) .putBoolean("module_sort_a_to_z", false)
.putBoolean("module_sort_z_to_a", false) .putBoolean("module_sort_z_to_a", false)
.putBoolean("module_sort_size_low_to_high", 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() .apply()
scope.launch { scope.launch {
viewModel.fetchModuleList() viewModel.fetchModuleList()
@@ -67,9 +67,15 @@ class ModuleViewModel : ViewModel() {
var sortZToA by mutableStateOf(false) var sortZToA by mutableStateOf(false)
var sortSizeLowToHigh by mutableStateOf(false) var sortSizeLowToHigh by mutableStateOf(false)
var sortSizeHighToLow 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 moduleList by derivedStateOf {
val comparator = when { val comparator = when {
sortWebUiFirst -> compareByDescending<ModuleInfo> { it.hasWebUi }
sortEnabledFirst -> compareByDescending<ModuleInfo> { it.enabled }
sortActionFirst -> compareByDescending<ModuleInfo> { it.hasActionScript }
sortAToZ -> compareBy<ModuleInfo> { it.name.lowercase() } sortAToZ -> compareBy<ModuleInfo> { it.name.lowercase() }
sortZToA -> compareByDescending<ModuleInfo> { it.name.lowercase() } sortZToA -> compareByDescending<ModuleInfo> { it.name.lowercase() }
sortSizeLowToHigh -> compareBy<ModuleInfo> { it.size } sortSizeLowToHigh -> compareBy<ModuleInfo> { it.size }
@@ -228,4 +228,7 @@
<string name="home_superuser_count_plural">Superusers</string> <string name="home_superuser_count_plural">Superusers</string>
<string name="home_module_count_singular">Module</string> <string name="home_module_count_singular">Module</string>
<string name="home_module_count_plural">Modules</string> <string name="home_module_count_plural">Modules</string>
<string name="module_sort_enabled_first">Sort (Enabled first)</string>
<string name="module_sort_action_first">Sort (Action first)</string>
<string name="module_sort_webui_first">Sort (WebUI first)</string>
</resources> </resources>