12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- package eu.kanade.presentation.library
- import androidx.compose.animation.Crossfade
- import androidx.compose.runtime.Composable
- import androidx.compose.runtime.getValue
- import eu.kanade.domain.category.model.Category
- import eu.kanade.domain.library.model.display
- import eu.kanade.presentation.components.LibraryBottomActionMenu
- import eu.kanade.presentation.components.LoadingScreen
- import eu.kanade.presentation.components.Scaffold
- import eu.kanade.presentation.library.components.LibraryContent
- import eu.kanade.presentation.library.components.LibraryToolbar
- import eu.kanade.tachiyomi.source.LocalSource
- import eu.kanade.tachiyomi.ui.library.LibraryPresenter
- @Composable
- fun LibraryScreen(
- presenter: LibraryPresenter,
- onMangaClicked: (Long) -> Unit,
- onGlobalSearchClicked: () -> Unit,
- onChangeCategoryClicked: () -> Unit,
- onMarkAsReadClicked: () -> Unit,
- onMarkAsUnreadClicked: () -> Unit,
- onDownloadClicked: () -> Unit,
- onDeleteClicked: () -> Unit,
- onClickUnselectAll: () -> Unit,
- onClickSelectAll: () -> Unit,
- onClickInvertSelection: () -> Unit,
- onClickFilter: () -> Unit,
- onClickRefresh: (Category?) -> Boolean,
- ) {
- Crossfade(targetState = presenter.isLoading) { state ->
- when (state) {
- true -> LoadingScreen()
- false -> Scaffold(
- topBar = { scrollBehavior ->
- val title by presenter.getToolbarTitle()
- val tabVisible = presenter.tabVisibility && presenter.categories.size > 1
- LibraryToolbar(
- state = presenter,
- title = title,
- incognitoMode = !tabVisible && presenter.isIncognitoMode,
- downloadedOnlyMode = !tabVisible && presenter.isDownloadOnly,
- onClickUnselectAll = onClickUnselectAll,
- onClickSelectAll = onClickSelectAll,
- onClickInvertSelection = onClickInvertSelection,
- onClickFilter = onClickFilter,
- onClickRefresh = { onClickRefresh(null) },
- scrollBehavior = scrollBehavior.takeIf { !tabVisible }, // For scroll overlay when no tab
- )
- },
- bottomBar = {
- LibraryBottomActionMenu(
- visible = presenter.selectionMode,
- onChangeCategoryClicked = onChangeCategoryClicked,
- onMarkAsReadClicked = onMarkAsReadClicked,
- onMarkAsUnreadClicked = onMarkAsUnreadClicked,
- onDownloadClicked = onDownloadClicked.takeIf { presenter.selection.none { it.manga.source == LocalSource.ID } },
- onDeleteClicked = onDeleteClicked,
- )
- },
- ) { paddingValues ->
- LibraryContent(
- state = presenter,
- contentPadding = paddingValues,
- currentPage = { presenter.activeCategory },
- isLibraryEmpty = presenter.isLibraryEmpty,
- showPageTabs = presenter.tabVisibility,
- showMangaCount = presenter.mangaCountVisibility,
- onChangeCurrentPage = { presenter.activeCategory = it },
- onMangaClicked = onMangaClicked,
- onToggleSelection = { presenter.toggleSelection(it) },
- onRefresh = onClickRefresh,
- onGlobalSearchClicked = onGlobalSearchClicked,
- getNumberOfMangaForCategory = { presenter.getMangaCountForCategory(it) },
- getDisplayModeForPage = { presenter.categories[it].display },
- getColumnsForOrientation = { presenter.getColumnsPreferenceForCurrentOrientation(it) },
- getLibraryForPage = { presenter.getMangaForCategory(page = it) },
- isIncognitoMode = presenter.isIncognitoMode,
- isDownloadOnly = presenter.isDownloadOnly,
- )
- }
- }
- }
- }
|