From d29aa698699df08d9e670e699f26ee6a4cb41570 Mon Sep 17 00:00:00 2001 From: Syer10 Date: Sun, 11 Jul 2021 21:52:24 -0400 Subject: [PATCH] Categorize extensions menu --- .../ca/gosyer/ui/extensions/ExtensionsMenu.kt | 27 ++++++++++++------- .../ui/extensions/ExtensionsMenuViewModel.kt | 20 +++++++++++--- src/main/resources/values/values/strings.xml | 2 ++ 3 files changed, 36 insertions(+), 13 deletions(-) diff --git a/src/main/kotlin/ca/gosyer/ui/extensions/ExtensionsMenu.kt b/src/main/kotlin/ca/gosyer/ui/extensions/ExtensionsMenu.kt index 0cd970ad..15939087 100644 --- a/src/main/kotlin/ca/gosyer/ui/extensions/ExtensionsMenu.kt +++ b/src/main/kotlin/ca/gosyer/ui/extensions/ExtensionsMenu.kt @@ -103,15 +103,24 @@ fun ExtensionsMenu() { } ) } - items(extensions) { extension -> - ExtensionItem( - extension, - serverUrl, - onInstallClicked = vm::install, - onUpdateClicked = vm::update, - onUninstallClicked = vm::uninstall - ) - Spacer(Modifier.height(8.dp)) + extensions.forEach { (header, items) -> + item { + Text( + header, + style = MaterialTheme.typography.h6, + modifier = Modifier.padding(16.dp, 16.dp, 16.dp, 4.dp) + ) + } + items(items) { extension -> + ExtensionItem( + extension, + serverUrl, + onInstallClicked = vm::install, + onUpdateClicked = vm::update, + onUninstallClicked = vm::uninstall + ) + Spacer(Modifier.height(8.dp)) + } } } VerticalScrollbar( diff --git a/src/main/kotlin/ca/gosyer/ui/extensions/ExtensionsMenuViewModel.kt b/src/main/kotlin/ca/gosyer/ui/extensions/ExtensionsMenuViewModel.kt index 54eae8ec..01baf60a 100644 --- a/src/main/kotlin/ca/gosyer/ui/extensions/ExtensionsMenuViewModel.kt +++ b/src/main/kotlin/ca/gosyer/ui/extensions/ExtensionsMenuViewModel.kt @@ -10,6 +10,7 @@ import ca.gosyer.data.extension.ExtensionPreferences import ca.gosyer.data.models.Extension import ca.gosyer.data.server.ServerPreferences import ca.gosyer.data.server.interactions.ExtensionInteractionHandler +import ca.gosyer.data.translation.XmlResourceBundle import ca.gosyer.ui.base.vm.ViewModel import ca.gosyer.util.lang.throwIfCancellation import ca.gosyer.util.system.CKLogger @@ -19,12 +20,14 @@ import kotlinx.coroutines.flow.drop import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch +import java.util.Locale import javax.inject.Inject class ExtensionsMenuViewModel @Inject constructor( private val extensionHandler: ExtensionInteractionHandler, + private val resources: XmlResourceBundle, serverPreferences: ServerPreferences, - private val extensionPreferences: ExtensionPreferences + extensionPreferences: ExtensionPreferences ) : ViewModel() { val serverUrl = serverPreferences.serverUrl().stateIn(scope) private val _enabledLangs = extensionPreferences.languages().asStateFlow() @@ -32,7 +35,7 @@ class ExtensionsMenuViewModel @Inject constructor( private lateinit var extensionList: List - private val _extensions = MutableStateFlow(emptyList()) + private val _extensions = MutableStateFlow(emptyMap>()) val extensions = _extensions.asStateFlow() private val _isLoading = MutableStateFlow(true) @@ -121,13 +124,22 @@ class ExtensionsMenuViewModel @Inject constructor( } } - private fun List.splitSort(): List { + private fun List.splitSort(): Map> { val comparator = compareBy({ it.lang }, { it.pkgName }) val obsolete = filter { it.obsolete }.sortedWith(comparator) val updates = filter { it.hasUpdate }.sortedWith(comparator) val installed = filter { it.installed && !it.hasUpdate && !it.obsolete }.sortedWith(comparator) val available = filter { !it.installed }.sortedWith(comparator) - return obsolete + updates + installed + available + + return mapOf( + resources.getStringA("installed") to (obsolete + updates + installed), + ) + available.groupBy { it.lang }.mapKeys { + if (it.key == "all") { + resources.getStringA("all") + } else { + Locale.forLanguageTag(it.key).displayName + } + } } private companion object : CKLogger({}) diff --git a/src/main/resources/values/values/strings.xml b/src/main/resources/values/values/strings.xml index db64356d..a004d090 100644 --- a/src/main/resources/values/values/strings.xml +++ b/src/main/resources/values/values/strings.xml @@ -54,6 +54,8 @@ Enabled languages + Installed + All Default