From 56cabe3c22713b8a83af1b27c99b4d62311fd359 Mon Sep 17 00:00:00 2001 From: Cuong Tran Date: Sun, 10 Mar 2024 13:58:14 +0700 Subject: [PATCH] reuse bulkSelectionButton as AppBar.Action --- .../presentation/browse/SourceFeedScreen.kt | 10 ++-------- .../components/BrowseSourceSimpleToolbar.kt | 8 ++------ .../browse/components/BrowseSourceToolbar.kt | 10 ++-------- .../browse/components/GlobalSearchToolbar.kt | 9 ++------- .../manga/DuplicateMangaDialog.kt | 15 ++++++++++++++ .../ui/browse/BulkFavoriteScreenModel.kt | 20 +++++++++++++++++++ .../tachiyomi/ui/browse/feed/FeedTab.kt | 8 ++------ .../migration/search/SourceSearchScreen.kt | 12 ++--------- 8 files changed, 47 insertions(+), 45 deletions(-) diff --git a/app/src/main/java/eu/kanade/presentation/browse/SourceFeedScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/SourceFeedScreen.kt index 8fc3dbed0..40cf05828 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/SourceFeedScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/SourceFeedScreen.kt @@ -3,8 +3,6 @@ package eu.kanade.presentation.browse import androidx.compose.animation.Crossfade import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.lazy.items -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.outlined.Checklist import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable @@ -18,12 +16,12 @@ import eu.kanade.presentation.browse.components.GlobalSearchErrorResultItem import eu.kanade.presentation.browse.components.GlobalSearchLoadingResultItem import eu.kanade.presentation.browse.components.GlobalSearchResultItem import eu.kanade.presentation.browse.components.SourceSettingsButton -import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.components.AppBarTitle import eu.kanade.presentation.components.SearchToolbar import eu.kanade.presentation.components.SelectionToolbar import eu.kanade.tachiyomi.ui.browse.BulkFavoriteScreenModel +import eu.kanade.tachiyomi.ui.browse.bulkSelectionButton import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf import tachiyomi.domain.manga.model.Manga @@ -282,11 +280,7 @@ fun SourceFeedToolbar( actions = { AppBarActions( actions = persistentListOf( - AppBar.Action( - title = stringResource(MR.strings.action_bulk_select), - icon = Icons.Outlined.Checklist, - onClick = toggleSelectionMode, - ), + bulkSelectionButton(toggleSelectionMode), ) ) persistentListOf( diff --git a/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceSimpleToolbar.kt b/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceSimpleToolbar.kt index 17d59bbc8..c4b33e53a 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceSimpleToolbar.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceSimpleToolbar.kt @@ -2,7 +2,6 @@ package eu.kanade.presentation.browse.components import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Check -import androidx.compose.material.icons.outlined.Checklist import androidx.compose.material.icons.outlined.ViewModule import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.Icon @@ -16,6 +15,7 @@ import androidx.compose.runtime.setValue import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.components.DropdownMenu +import eu.kanade.tachiyomi.ui.browse.bulkSelectionButton import kotlinx.collections.immutable.persistentListOf import tachiyomi.domain.library.model.LibraryDisplayMode import tachiyomi.i18n.MR @@ -46,11 +46,7 @@ fun BrowseSourceSimpleToolbar( onClick = { selectingDisplayMode = true }, ), // KMK --> - AppBar.Action( - title = stringResource(MR.strings.action_bulk_select), - icon = Icons.Outlined.Checklist, - onClick = toggleSelectionMode, - ), + bulkSelectionButton(toggleSelectionMode), // KMK <-- ), ) diff --git a/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceToolbar.kt b/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceToolbar.kt index b158f1847..f873ffdfd 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceToolbar.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceToolbar.kt @@ -4,7 +4,6 @@ import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.filled.ViewList import androidx.compose.material.icons.automirrored.outlined.Help import androidx.compose.material.icons.filled.ViewModule -import androidx.compose.material.icons.outlined.Checklist import androidx.compose.material.icons.outlined.Public import androidx.compose.material3.Text import androidx.compose.material3.TopAppBarScrollBehavior @@ -21,6 +20,7 @@ import eu.kanade.presentation.components.RadioMenuItem import eu.kanade.presentation.components.SearchToolbar import eu.kanade.tachiyomi.source.ConfigurableSource import eu.kanade.tachiyomi.source.Source +import eu.kanade.tachiyomi.ui.browse.bulkSelectionButton import exh.source.anyIs import kotlinx.collections.immutable.persistentListOf import tachiyomi.domain.library.model.LibraryDisplayMode @@ -77,13 +77,7 @@ fun BrowseSourceToolbar( ) } // KMK --> - add( - AppBar.Action( - title = stringResource(MR.strings.action_bulk_select), - icon = Icons.Outlined.Checklist, - onClick = toggleSelectionMode, - ), - ) + add(bulkSelectionButton(toggleSelectionMode)) // KMK <-- if (isLocalSource) { if (isConfigurableSource && displayMode != null) { diff --git a/app/src/main/java/eu/kanade/presentation/browse/components/GlobalSearchToolbar.kt b/app/src/main/java/eu/kanade/presentation/browse/components/GlobalSearchToolbar.kt index 295ee04ff..abd223e68 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/components/GlobalSearchToolbar.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/components/GlobalSearchToolbar.kt @@ -11,7 +11,6 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.rememberScrollState import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.outlined.Checklist import androidx.compose.material.icons.outlined.DoneAll import androidx.compose.material.icons.outlined.FilterList import androidx.compose.material.icons.outlined.PushPin @@ -27,9 +26,9 @@ import androidx.compose.material3.VerticalDivider import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.components.SearchToolbar +import eu.kanade.tachiyomi.ui.browse.bulkSelectionButton import eu.kanade.tachiyomi.ui.browse.source.globalsearch.SourceFilter import kotlinx.collections.immutable.persistentListOf import tachiyomi.i18n.MR @@ -66,11 +65,7 @@ fun GlobalSearchToolbar( actions = { AppBarActions( actions = persistentListOf( - AppBar.Action( - title = stringResource(MR.strings.action_bulk_select), - icon = Icons.Outlined.Checklist, - onClick = toggleSelectionMode, - ), + bulkSelectionButton(toggleSelectionMode), ) ) }, diff --git a/app/src/main/java/eu/kanade/presentation/manga/DuplicateMangaDialog.kt b/app/src/main/java/eu/kanade/presentation/manga/DuplicateMangaDialog.kt index 1a9e67fb2..d2b70f091 100644 --- a/app/src/main/java/eu/kanade/presentation/manga/DuplicateMangaDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/manga/DuplicateMangaDialog.kt @@ -12,6 +12,7 @@ import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource @@ -153,4 +154,18 @@ fun DuplicateMangasDialog( }, ) } + +@Preview +@Composable +fun DuplicateMangasDialogPreview() { + DuplicateMangasDialog( + onDismissRequest = { }, + onAllowAllDuplicate = { }, + onSkipAllDuplicate = { }, + onOpenManga = { }, + onAllowDuplicate = { }, + onSkipDuplicate = { }, + duplicatedName = "Berserk", + ) +} // KMK <-- 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 87e503922..6e746bc79 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 @@ -1,9 +1,12 @@ package eu.kanade.tachiyomi.ui.browse +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Checklist import androidx.compose.runtime.Composable import androidx.compose.runtime.Immutable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.util.fastAny import androidx.compose.ui.util.fastForEach import androidx.compose.ui.util.fastForEachIndexed @@ -15,6 +18,7 @@ import eu.kanade.domain.manga.interactor.UpdateManga import eu.kanade.domain.track.interactor.AddTracks import eu.kanade.presentation.browse.components.RemoveMangaDialog import eu.kanade.presentation.category.components.ChangeCategoryDialog +import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.manga.DuplicateMangaDialog import eu.kanade.presentation.manga.DuplicateMangasDialog import eu.kanade.tachiyomi.data.cache.CoverCache @@ -42,6 +46,8 @@ import tachiyomi.domain.manga.interactor.GetDuplicateLibraryManga import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.manga.model.toMangaUpdate import tachiyomi.domain.source.service.SourceManager +import tachiyomi.i18n.MR +import tachiyomi.presentation.core.i18n.stringResource import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get import java.time.Instant @@ -441,3 +447,17 @@ fun AllowDuplicateDialog(bulkFavoriteScreenModel: BulkFavoriteScreenModel) { duplicatedName = dialog.duplicatedManga.second.title, ) } + +@Composable +fun bulkSelectionButton(toggleSelectionMode: () -> Unit) = + AppBar.Action( + title = stringResource(MR.strings.action_bulk_select), + icon = Icons.Outlined.Checklist, + onClick = toggleSelectionMode, + ) + +@Preview +@Composable +fun BulkSelectionButtonPreview() { + bulkSelectionButton { } +} diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/feed/FeedTab.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/feed/FeedTab.kt index b34a99055..bfd99199b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/feed/FeedTab.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/feed/FeedTab.kt @@ -3,7 +3,6 @@ package eu.kanade.tachiyomi.ui.browse.feed import androidx.activity.compose.BackHandler import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Add -import androidx.compose.material.icons.outlined.Checklist import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect @@ -29,6 +28,7 @@ import eu.kanade.tachiyomi.ui.browse.BulkFavoriteScreenModel import eu.kanade.tachiyomi.ui.browse.ChangeMangaCategoryDialog import eu.kanade.tachiyomi.ui.browse.ChangeMangasCategoryDialog import eu.kanade.tachiyomi.ui.browse.RemoveMangaDialog +import eu.kanade.tachiyomi.ui.browse.bulkSelectionButton import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceScreen import eu.kanade.tachiyomi.ui.home.HomeScreen import eu.kanade.tachiyomi.ui.manga.MangaScreen @@ -91,11 +91,7 @@ fun Screen.feedTab( }, ), // KMK --> - AppBar.Action( - title = stringResource(MR.strings.action_bulk_select), - icon = Icons.Outlined.Checklist, - onClick = bulkFavoriteScreenModel::toggleSelectionMode, - ), + bulkSelectionButton(bulkFavoriteScreenModel::toggleSelectionMode), // KMK <-- ), content = { contentPadding, snackbarHostState -> diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/SourceSearchScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/SourceSearchScreen.kt index edbbf14a9..1b7083e9e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/SourceSearchScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/SourceSearchScreen.kt @@ -1,8 +1,6 @@ package eu.kanade.tachiyomi.ui.browse.migration.search import androidx.activity.compose.BackHandler -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.outlined.Checklist import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState import androidx.compose.runtime.Composable @@ -17,7 +15,6 @@ import cafe.adriel.voyager.navigator.LocalNavigator import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.presentation.browse.BrowseSourceContent import eu.kanade.presentation.browse.components.BrowseSourceFloatingActionButton -import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.components.SearchToolbar import eu.kanade.presentation.components.SelectionToolbar @@ -26,6 +23,7 @@ import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.ui.browse.AllowDuplicateDialog import eu.kanade.tachiyomi.ui.browse.BulkFavoriteScreenModel import eu.kanade.tachiyomi.ui.browse.ChangeMangasCategoryDialog +import eu.kanade.tachiyomi.ui.browse.bulkSelectionButton import eu.kanade.tachiyomi.ui.browse.migration.advanced.process.MigrationListScreen import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceScreenModel import eu.kanade.tachiyomi.ui.browse.source.browse.SourceFilterDialog @@ -34,9 +32,7 @@ import eu.kanade.tachiyomi.ui.webview.WebViewScreen import kotlinx.collections.immutable.persistentListOf import tachiyomi.core.common.Constants import tachiyomi.domain.manga.model.Manga -import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.Scaffold -import tachiyomi.presentation.core.i18n.stringResource import tachiyomi.source.local.LocalSource data class SourceSearchScreen( @@ -85,11 +81,7 @@ data class SourceSearchScreen( actions = { AppBarActions( actions = persistentListOf( - AppBar.Action( - title = stringResource(MR.strings.action_bulk_select), - icon = Icons.Outlined.Checklist, - onClick = bulkFavoriteScreenModel::toggleSelectionMode, - ), + bulkSelectionButton(bulkFavoriteScreenModel::toggleSelectionMode), ) ) },