Browse Source

Wait for library to load before creating Pager (#7623)

Andreas 2 years ago
parent
commit
f8d8cf9f6a

+ 51 - 44
app/src/main/java/eu/kanade/presentation/library/LibraryScreen.kt

@@ -1,11 +1,13 @@
 package eu.kanade.presentation.library
 
+import androidx.compose.animation.Crossfade
 import androidx.compose.foundation.layout.safeDrawingPadding
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.getValue
 import androidx.compose.ui.Modifier
 import eu.kanade.domain.category.model.Category
 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
@@ -28,49 +30,54 @@ fun LibraryScreen(
     onClickFilter: () -> Unit,
     onClickRefresh: (Category?) -> Unit,
 ) {
-    Scaffold(
-        modifier = Modifier.safeDrawingPadding(),
-        topBar = {
-            val title by presenter.getToolbarTitle()
-            LibraryToolbar(
-                state = presenter,
-                title = title,
-                onClickUnselectAll = onClickUnselectAll,
-                onClickSelectAll = onClickSelectAll,
-                onClickInvertSelection = onClickInvertSelection,
-                onClickFilter = onClickFilter,
-                onClickRefresh = { onClickRefresh(null) },
-            )
-        },
-        bottomBar = {
-            LibraryBottomActionMenu(
-                visible = presenter.selectionMode,
-                onChangeCategoryClicked = onChangeCategoryClicked,
-                onMarkAsReadClicked = onMarkAsReadClicked,
-                onMarkAsUnreadClicked = onMarkAsUnreadClicked,
-                onDownloadClicked = onDownloadClicked,
-                onDeleteClicked = onDeleteClicked.takeIf { presenter.selection.none { it.source == LocalSource.ID } },
-            )
-        },
-    ) { paddingValues ->
-        LibraryContent(
-            state = presenter,
-            contentPadding = paddingValues,
-            currentPage = presenter.activeCategory,
-            isLibraryEmpty = presenter.loadedManga.isEmpty(),
-            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.getDisplayMode(index = it) },
-            getColumnsForOrientation = { presenter.getColumnsPreferenceForCurrentOrientation(it) },
-            getLibraryForPage = { presenter.getMangaForCategory(page = it) },
-            isIncognitoMode = presenter.isIncognitoMode,
-            isDownloadOnly = presenter.isDownloadOnly,
-        )
+    Crossfade(targetState = presenter.isLoading) { state ->
+        when (state) {
+            true -> LoadingScreen()
+            false -> Scaffold(
+                modifier = Modifier.safeDrawingPadding(),
+                topBar = {
+                    val title by presenter.getToolbarTitle()
+                    LibraryToolbar(
+                        state = presenter,
+                        title = title,
+                        onClickUnselectAll = onClickUnselectAll,
+                        onClickSelectAll = onClickSelectAll,
+                        onClickInvertSelection = onClickInvertSelection,
+                        onClickFilter = onClickFilter,
+                        onClickRefresh = { onClickRefresh(null) },
+                    )
+                },
+                bottomBar = {
+                    LibraryBottomActionMenu(
+                        visible = presenter.selectionMode,
+                        onChangeCategoryClicked = onChangeCategoryClicked,
+                        onMarkAsReadClicked = onMarkAsReadClicked,
+                        onMarkAsUnreadClicked = onMarkAsUnreadClicked,
+                        onDownloadClicked = onDownloadClicked,
+                        onDeleteClicked = onDeleteClicked.takeIf { presenter.selection.none { it.source == LocalSource.ID } },
+                    )
+                },
+            ) { paddingValues ->
+                LibraryContent(
+                    state = presenter,
+                    contentPadding = paddingValues,
+                    currentPage = presenter.activeCategory,
+                    isLibraryEmpty = presenter.loadedManga.isEmpty(),
+                    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.getDisplayMode(index = it) },
+                    getColumnsForOrientation = { presenter.getColumnsPreferenceForCurrentOrientation(it) },
+                    getLibraryForPage = { presenter.getMangaForCategory(page = it) },
+                    isIncognitoMode = presenter.isIncognitoMode,
+                    isDownloadOnly = presenter.isDownloadOnly,
+                )
+            }
+        }
     }
 }

+ 1 - 8
app/src/main/java/eu/kanade/presentation/library/components/LibraryContent.kt

@@ -14,7 +14,6 @@ import com.google.accompanist.swiperefresh.rememberSwipeRefreshState
 import eu.kanade.core.prefs.PreferenceMutableState
 import eu.kanade.domain.category.model.Category
 import eu.kanade.presentation.components.EmptyScreen
-import eu.kanade.presentation.components.LoadingScreen
 import eu.kanade.presentation.components.SwipeRefreshIndicator
 import eu.kanade.presentation.library.LibraryState
 import eu.kanade.tachiyomi.R
@@ -44,21 +43,15 @@ fun LibraryContent(
     getLibraryForPage: @Composable (Int) -> State<List<LibraryItem>>,
 ) {
     val categories = state.categories
-
     val pagerState = rememberPagerState(currentPage.coerceAtMost(categories.lastIndex))
 
-    if (categories.isEmpty()) {
-        LoadingScreen()
-        return
-    }
-
     Column(
         modifier = Modifier.padding(contentPadding),
     ) {
         if (showPageTabs && categories.size > 1) {
             LibraryTabs(
                 state = pagerState,
-                categories = state.categories,
+                categories = categories,
                 showMangaCount = showMangaCount,
                 getNumberOfMangaForCategory = getNumberOfMangaForCategory,
                 isDownloadOnly = isDownloadOnly,