You've already forked KernelSU-Next
mirror of
https://github.com/KernelSU-Next/KernelSU-Next.git
synced 2025-08-27 23:46:34 +00:00
manager: add sorting by size for module list
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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 (A → Z)</string>
|
||||
<string name="module_sort_z_to_a">Sort (Z → A)</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>
|
||||
|
||||
Reference in New Issue
Block a user