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

View File

@@ -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<ModuleInfo> { it.hasWebUi }
sortEnabledFirst -> compareByDescending<ModuleInfo> { it.enabled }
sortActionFirst -> compareByDescending<ModuleInfo> { it.hasActionScript }
sortAToZ -> compareBy<ModuleInfo> { it.name.lowercase() }
sortZToA -> compareByDescending<ModuleInfo> { it.name.lowercase() }
sortSizeLowToHigh -> compareBy<ModuleInfo> { it.size }

View File

@@ -228,4 +228,7 @@
<string name="home_superuser_count_plural">Superusers</string>
<string name="home_module_count_singular">Module</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>