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

View File

@@ -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()

View File

@@ -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 }

View File

@@ -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>