From 45553eb096b4329fbda617481ddca484ca37b03b Mon Sep 17 00:00:00 2001 From: Cuong Tran Date: Thu, 25 Apr 2024 22:03:45 +0700 Subject: [PATCH] BulkSelection: avoid using toggle when Select all (cherry picked from commit 695f872b381feca1051f0f5133a0288d252691e5) --- .../presentation/browse/GlobalSearchScreen.kt | 5 ++--- .../ui/browse/BulkFavoriteScreenModel.kt | 17 ++++++++++++++--- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/eu/kanade/presentation/browse/GlobalSearchScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/GlobalSearchScreen.kt index 0c1fdb802..0547a6bbc 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/GlobalSearchScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/GlobalSearchScreen.kt @@ -56,10 +56,9 @@ fun GlobalSearchScreen( state.filteredItems.forEach { (_, result) -> when (result) { is SearchItemResult.Success -> { - result.result.map{manga -> - + result.result.forEach { manga -> if (!bulkFavoriteState.selection.contains(manga)) - bulkFavoriteScreenModel.toggleSelection(manga) + bulkFavoriteScreenModel.select(manga) } } else -> {} diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/BulkFavoriteScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/BulkFavoriteScreenModel.kt index 491d057cb..a043b936d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/BulkFavoriteScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/BulkFavoriteScreenModel.kt @@ -84,12 +84,23 @@ class BulkFavoriteScreenModel( mutableState.update { it.copy(selection = persistentListOf()) } } - fun toggleSelection(manga: Manga) { + fun select(manga: Manga) { + toggleSelection(manga, toSelectedState = true) + } + + fun unselect(manga: Manga) { + toggleSelection(manga, toSelectedState = false) + } + + /** + * @param toSelectedState set to true to only Select, set to false to only Unselect + */ + fun toggleSelection(manga: Manga, toSelectedState: Boolean? = null) { mutableState.update { state -> val newSelection = state.selection.mutate { list -> - if (list.fastAny { it.id == manga.id }) { + if (toSelectedState != true && list.fastAny { it.id == manga.id }) { list.removeAll { it.id == manga.id } - } else { + } else if (toSelectedState != false) { list.add(manga) } }