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) {
|
LaunchedEffect(Unit) {
|
||||||
viewModel.sortAToZ = prefs.getBoolean("module_sort_a_to_z", true)
|
viewModel.sortAToZ = prefs.getBoolean("module_sort_a_to_z", true)
|
||||||
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.sortSizeHighToLow = prefs.getBoolean("module_sort_size_high_to_low", false)
|
||||||
if (viewModel.moduleList.isEmpty() || viewModel.isNeedRefresh) {
|
if (viewModel.moduleList.isEmpty() || viewModel.isNeedRefresh) {
|
||||||
viewModel.fetchModuleList()
|
viewModel.fetchModuleList()
|
||||||
}
|
}
|
||||||
@@ -180,9 +182,13 @@ fun ModuleScreen(navigator: DestinationsNavigator) {
|
|||||||
onClick = {
|
onClick = {
|
||||||
viewModel.sortAToZ = !viewModel.sortAToZ
|
viewModel.sortAToZ = !viewModel.sortAToZ
|
||||||
viewModel.sortZToA = false
|
viewModel.sortZToA = false
|
||||||
|
viewModel.sortSizeLowToHigh = false
|
||||||
|
viewModel.sortSizeHighToLow = 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_high_to_low", false)
|
||||||
.apply()
|
.apply()
|
||||||
scope.launch {
|
scope.launch {
|
||||||
viewModel.fetchModuleList()
|
viewModel.fetchModuleList()
|
||||||
@@ -200,9 +206,61 @@ fun ModuleScreen(navigator: DestinationsNavigator) {
|
|||||||
onClick = {
|
onClick = {
|
||||||
viewModel.sortZToA = !viewModel.sortZToA
|
viewModel.sortZToA = !viewModel.sortZToA
|
||||||
viewModel.sortAToZ = false
|
viewModel.sortAToZ = false
|
||||||
|
viewModel.sortSizeLowToHigh = false
|
||||||
|
viewModel.sortSizeHighToLow = 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_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()
|
.apply()
|
||||||
scope.launch {
|
scope.launch {
|
||||||
viewModel.fetchModuleList()
|
viewModel.fetchModuleList()
|
||||||
|
|||||||
@@ -63,11 +63,15 @@ class ModuleViewModel : ViewModel() {
|
|||||||
|
|
||||||
var sortAToZ by mutableStateOf(false)
|
var sortAToZ by mutableStateOf(false)
|
||||||
var sortZToA by mutableStateOf(false)
|
var sortZToA by mutableStateOf(false)
|
||||||
|
var sortSizeLowToHigh by mutableStateOf(false)
|
||||||
|
var sortSizeHighToLow by mutableStateOf(false)
|
||||||
|
|
||||||
val moduleList by derivedStateOf {
|
val moduleList by derivedStateOf {
|
||||||
val comparator = when {
|
val comparator = when {
|
||||||
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 }
|
||||||
|
sortSizeHighToLow -> compareByDescending<ModuleInfo> { it.size }
|
||||||
else -> compareBy<ModuleInfo> { it.dirId }
|
else -> compareBy<ModuleInfo> { it.dirId }
|
||||||
}.thenBy(Collator.getInstance(Locale.getDefault()), ModuleInfo::id)
|
}.thenBy(Collator.getInstance(Locale.getDefault()), ModuleInfo::id)
|
||||||
|
|
||||||
|
|||||||
@@ -45,8 +45,10 @@
|
|||||||
<string name="module_empty">No module installed</string>
|
<string name="module_empty">No module installed</string>
|
||||||
<string name="module">Module</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_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_a_to_z">Sort (A → Z)</string>
|
||||||
<string name="module_sort_z_to_a">Sort (Z-A)</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="uninstall">Uninstall</string>
|
||||||
<string name="restore">Restore</string>
|
<string name="restore">Restore</string>
|
||||||
<string name="module_install">Install</string>
|
<string name="module_install">Install</string>
|
||||||
|
|||||||
Reference in New Issue
Block a user