From 81cf1a164159a222174490ba0b69ecaca5f470c9 Mon Sep 17 00:00:00 2001 From: Dima Date: Sun, 24 Dec 2023 19:22:20 +0900 Subject: [PATCH] Collections not in alphabetical order #97 Updating icon for "Remove from collection" Upping versionCode to 34 --- .../screens/allitems/AllItemsBottomPanel.kt | 2 +- .../CollectionPickerViewModel.kt | 2 ++ .../collections/CollectionsViewModel.kt | 4 ++++ .../collections/data/CollectionTree.kt | 19 ++++++++++++++++++- .../collections/data/CollectionTreeBuilder.kt | 11 ----------- .../bottomsheet/LongPressOptionItem.kt | 2 +- .../res/drawable/remove_from_collection.xml | 9 +++++++++ app/src/main/res/drawable/unsubscribe_24.xml | 9 --------- buildSrc/src/main/kotlin/BuildConfig.kt | 2 +- 9 files changed, 36 insertions(+), 24 deletions(-) create mode 100644 app/src/main/res/drawable/remove_from_collection.xml delete mode 100644 app/src/main/res/drawable/unsubscribe_24.xml diff --git a/app/src/main/java/org/zotero/android/screens/allitems/AllItemsBottomPanel.kt b/app/src/main/java/org/zotero/android/screens/allitems/AllItemsBottomPanel.kt index 18f4621d..45bf8d5b 100644 --- a/app/src/main/java/org/zotero/android/screens/allitems/AllItemsBottomPanel.kt +++ b/app/src/main/java/org/zotero/android/screens/allitems/AllItemsBottomPanel.kt @@ -92,7 +92,7 @@ private fun EditingBottomPanel( ) if(viewState.isCollectionACollection) { IconWithPadding( - drawableRes = Drawables.unsubscribe_24, + drawableRes = Drawables.remove_from_collection, isEnabled = isRestoreAndDeleteEnabled, tintColor = if (isRestoreAndDeleteEnabled) CustomTheme.colors.zoteroDefaultBlue else CustomTheme.colors.disabledContent, onClick = { diff --git a/app/src/main/java/org/zotero/android/screens/collectionpicker/CollectionPickerViewModel.kt b/app/src/main/java/org/zotero/android/screens/collectionpicker/CollectionPickerViewModel.kt index 48e940aa..316ee1b1 100644 --- a/app/src/main/java/org/zotero/android/screens/collectionpicker/CollectionPickerViewModel.kt +++ b/app/src/main/java/org/zotero/android/screens/collectionpicker/CollectionPickerViewModel.kt @@ -89,6 +89,7 @@ internal class CollectionPickerViewModel @Inject constructor( libraryId = libraryId, includeItemCounts = false ) + collectionTree.sortNodes() startObservingResults() updateCollectionTree(collectionTree) } catch (error: Throwable) { @@ -121,6 +122,7 @@ internal class CollectionPickerViewModel @Inject constructor( libraryId = viewState.library.identifier, includeItemCounts = false ) + tree.sortNodes() updateCollectionTree(tree) val removed = mutableSetOf() for (key in viewState.selected) { diff --git a/app/src/main/java/org/zotero/android/screens/collections/CollectionsViewModel.kt b/app/src/main/java/org/zotero/android/screens/collections/CollectionsViewModel.kt index 30ba2666..48d2cef5 100644 --- a/app/src/main/java/org/zotero/android/screens/collections/CollectionsViewModel.kt +++ b/app/src/main/java/org/zotero/android/screens/collections/CollectionsViewModel.kt @@ -213,6 +213,9 @@ internal class CollectionsViewModel @Inject constructor( libraryId = libraryId, includeItemCounts = includeItemCounts ) + + collectionTree.sortNodes() + collectionTree.insert( collection = Collection.initWithCustomType( type = CollectionIdentifier.CustomType.all, @@ -332,6 +335,7 @@ internal class CollectionsViewModel @Inject constructor( libraryId = viewState.libraryId, includeItemCounts = includeItemCounts ) + tree.sortNodes() val collectionTree = viewState.collectionTree collectionTree.replace(matching = { it.isCollection }, tree = tree) updateCollectionTree(collectionTree, collectionTree.createSnapshot()) diff --git a/app/src/main/java/org/zotero/android/screens/collections/data/CollectionTree.kt b/app/src/main/java/org/zotero/android/screens/collections/data/CollectionTree.kt index e05094f9..c96af3fc 100644 --- a/app/src/main/java/org/zotero/android/screens/collections/data/CollectionTree.kt +++ b/app/src/main/java/org/zotero/android/screens/collections/data/CollectionTree.kt @@ -13,7 +13,7 @@ data class CollectionTree( data class Node( val identifier: CollectionIdentifier, val parent: CollectionIdentifier?, - val children: List, + var children: List, ) enum class CollapseState { @@ -149,4 +149,21 @@ data class CollectionTree( return null } + fun sortNodes() { + nodes.sortBy { this.collections[it.identifier]!!.name.lowercase() } + nodes.forEach { node -> + recursivelySortChildren(node) + } + } + + private fun recursivelySortChildren(node: Node) { + val childsSorted = + node.children + .sortedBy { this.collections[it.identifier]!!.name.lowercase() } + node.children = childsSorted + node.children.forEach { + recursivelySortChildren(it) + } + } + } diff --git a/app/src/main/java/org/zotero/android/screens/collections/data/CollectionTreeBuilder.kt b/app/src/main/java/org/zotero/android/screens/collections/data/CollectionTreeBuilder.kt index cc9706c2..bdbea65f 100644 --- a/app/src/main/java/org/zotero/android/screens/collections/data/CollectionTreeBuilder.kt +++ b/app/src/main/java/org/zotero/android/screens/collections/data/CollectionTreeBuilder.kt @@ -77,22 +77,11 @@ class CollectionTreeBuilder { parent = parent, children = children ) -// val insertionIndex = -// insertionIndex(node = node, nodes, collections = allCollections) -// nodes.add(index = insertionIndex, node) nodes.add(node) } return nodes } - private fun insertionIndex(node: CollectionTree.Node, array: MutableList, collections: Map): Int { - return array.sortedWith {lhs, rhs -> - val lCollection = collections[lhs.identifier] ?: return@sortedWith 1 - val rCollection = collections[rhs.identifier] ?: return@sortedWith 1 - lCollection.name.compareTo(rCollection.name) - }.indexOf(node) - } - private fun collection( rCollection: RCollection, libraryId: LibraryIdentifier, diff --git a/app/src/main/java/org/zotero/android/uicomponents/bottomsheet/LongPressOptionItem.kt b/app/src/main/java/org/zotero/android/uicomponents/bottomsheet/LongPressOptionItem.kt index 415512df..a02d5e08 100644 --- a/app/src/main/java/org/zotero/android/uicomponents/bottomsheet/LongPressOptionItem.kt +++ b/app/src/main/java/org/zotero/android/uicomponents/bottomsheet/LongPressOptionItem.kt @@ -78,7 +78,7 @@ sealed class LongPressOptionItem( data class RemoveFromCollection(val item: RItem): LongPressOptionItem( titleId = Strings.items_action_remove_from_collection, - resIcon = Drawables.unsubscribe_24 + resIcon = Drawables.remove_from_collection ) data class CreateParentItem(val item: RItem): LongPressOptionItem( diff --git a/app/src/main/res/drawable/remove_from_collection.xml b/app/src/main/res/drawable/remove_from_collection.xml new file mode 100644 index 00000000..37610ac9 --- /dev/null +++ b/app/src/main/res/drawable/remove_from_collection.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/unsubscribe_24.xml b/app/src/main/res/drawable/unsubscribe_24.xml deleted file mode 100644 index 941161d4..00000000 --- a/app/src/main/res/drawable/unsubscribe_24.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/buildSrc/src/main/kotlin/BuildConfig.kt b/buildSrc/src/main/kotlin/BuildConfig.kt index b38a79b0..6338d9d3 100644 --- a/buildSrc/src/main/kotlin/BuildConfig.kt +++ b/buildSrc/src/main/kotlin/BuildConfig.kt @@ -4,7 +4,7 @@ object BuildConfig { const val compileSdkVersion = 34 const val targetSdk = 33 - val versionCode = 33 // Must be updated on every build + val versionCode = 34 // Must be updated on every build val version = Version( major = 1, minor = 0,