manager: add sorting by size for module list

This commit is contained in:
rifsxd
2025-06-01 21:03:04 +06:00
parent c4deee1e49
commit f3b49723e8
3 changed files with 66 additions and 2 deletions

View File

@@ -127,6 +127,8 @@ fun ModuleScreen(navigator: DestinationsNavigator) {
LaunchedEffect(Unit) {
viewModel.sortAToZ = prefs.getBoolean("module_sort_a_to_z", true)
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)
if (viewModel.moduleList.isEmpty() || viewModel.isNeedRefresh) {
viewModel.fetchModuleList()
}
@@ -180,9 +182,13 @@ fun ModuleScreen(navigator: DestinationsNavigator) {
onClick = {
viewModel.sortAToZ = !viewModel.sortAToZ
viewModel.sortZToA = false
viewModel.sortSizeLowToHigh = false
viewModel.sortSizeHighToLow = 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)
.apply()
scope.launch {
viewModel.fetchModuleList()
@@ -200,9 +206,61 @@ fun ModuleScreen(navigator: DestinationsNavigator) {
onClick = {
viewModel.sortZToA = !viewModel.sortZToA
viewModel.sortAToZ = false
viewModel.sortSizeLowToHigh = false
viewModel.sortSizeHighToLow = 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)
.apply()
scope.launch {
viewModel.fetchModuleList()
}
}
)
DropdownMenuItem(
text = {
Text(stringResource(R.string.module_size_low_to_high))
},
trailingIcon = {
Checkbox(checked = viewModel.sortSizeLowToHigh, onCheckedChange = null)
},
onClick = {
viewModel.sortSizeLowToHigh = !viewModel.sortSizeLowToHigh
viewModel.sortAToZ = false
viewModel.sortZToA = false
viewModel.sortSizeHighToLow = 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)
.apply()
scope.launch {
viewModel.fetchModuleList()
}
}
)
DropdownMenuItem(
text = {
Text(stringResource(R.string.module_size_high_to_low))
},
trailingIcon = {
Checkbox(checked = viewModel.sortSizeHighToLow, onCheckedChange = null)
},
onClick = {
viewModel.sortSizeHighToLow = !viewModel.sortSizeHighToLow
viewModel.sortAToZ = false
viewModel.sortZToA = false
viewModel.sortSizeLowToHigh = 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)
.apply()
scope.launch {
viewModel.fetchModuleList()

View File

@@ -63,11 +63,15 @@ class ModuleViewModel : ViewModel() {
var sortAToZ by mutableStateOf(false)
var sortZToA by mutableStateOf(false)
var sortSizeLowToHigh by mutableStateOf(false)
var sortSizeHighToLow by mutableStateOf(false)
val moduleList by derivedStateOf {
val comparator = when {
sortAToZ -> compareBy<ModuleInfo> { it.name.lowercase() }
sortZToA -> compareByDescending<ModuleInfo> { it.name.lowercase() }
sortSizeLowToHigh -> compareBy<ModuleInfo> { it.size }
sortSizeHighToLow -> compareByDescending<ModuleInfo> { it.size }
else -> compareBy<ModuleInfo> { it.dirId }
}.thenBy(Collator.getInstance(Locale.getDefault()), ModuleInfo::id)

View File

@@ -45,8 +45,10 @@
<string name="module_empty">No module installed</string>
<string name="module">Module</string>
<string name="module_install_prompt_with_name">The following module(s) will be installed: %1$s</string>
<string name="module_sort_a_to_z">Sort (A-Z)</string>
<string name="module_sort_z_to_a">Sort (Z-A)</string>
<string name="module_sort_a_to_z">Sort (AZ)</string>
<string name="module_sort_z_to_a">Sort (ZA)</string>
<string name="module_size_low_to_high">Sort (Low → High)</string>
<string name="module_size_high_to_low">Sort (High → Low)</string>
<string name="uninstall">Uninstall</string>
<string name="restore">Restore</string>
<string name="module_install">Install</string>