Browse Source

BrowseSourceScreen: Adjust browse mode chips placement (#8076)

The chips row is now scrollable too and filter fab is removed
Ivan Iskandar 2 years ago
parent
commit
0190c36d20

+ 36 - 37
app/src/main/java/eu/kanade/presentation/browse/BrowseSourceScreen.kt

@@ -1,13 +1,17 @@
 package eu.kanade.presentation.browse
 
 import androidx.compose.animation.AnimatedVisibility
+import androidx.compose.foundation.background
+import androidx.compose.foundation.horizontalScroll
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.PaddingValues
 import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.navigationBarsPadding
+import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.size
 import androidx.compose.foundation.lazy.grid.GridCells
+import androidx.compose.foundation.rememberScrollState
 import androidx.compose.material.icons.Icons
 import androidx.compose.material.icons.outlined.Favorite
 import androidx.compose.material.icons.outlined.FilterList
@@ -15,6 +19,7 @@ import androidx.compose.material.icons.outlined.NewReleases
 import androidx.compose.material3.FilterChip
 import androidx.compose.material3.FilterChipDefaults
 import androidx.compose.material3.Icon
+import androidx.compose.material3.MaterialTheme
 import androidx.compose.material3.SnackbarDuration
 import androidx.compose.material3.SnackbarHost
 import androidx.compose.material3.SnackbarHostState
@@ -42,6 +47,7 @@ import eu.kanade.presentation.browse.components.BrowseSourceCompactGrid
 import eu.kanade.presentation.browse.components.BrowseSourceList
 import eu.kanade.presentation.browse.components.BrowseSourceToolbar
 import eu.kanade.presentation.components.AppStateBanners
+import eu.kanade.presentation.components.Divider
 import eu.kanade.presentation.components.EmptyScreen
 import eu.kanade.presentation.components.ExtendedFloatingActionButton
 import eu.kanade.presentation.components.LoadingScreen
@@ -56,7 +62,7 @@ import eu.kanade.tachiyomi.widget.EmptyView
 fun BrowseSourceScreen(
     presenter: BrowseSourcePresenter,
     navigateUp: () -> Unit,
-    onFabClick: () -> Unit,
+    openFilterSheet: () -> Unit,
     onMangaClick: (Manga) -> Unit,
     onMangaLongClick: (Manga) -> Unit,
     onWebViewClick: () -> Unit,
@@ -76,8 +82,8 @@ fun BrowseSourceScreen(
     }
 
     Scaffold(
-        topBar = { scrollBehavior ->
-            Column {
+        topBar = {
+            Column(modifier = Modifier.background(MaterialTheme.colorScheme.surface)) {
                 BrowseSourceToolbar(
                     state = presenter,
                     source = presenter.source!!,
@@ -87,37 +93,12 @@ fun BrowseSourceScreen(
                     onWebViewClick = onWebViewClick,
                     onHelpClick = onHelpClick,
                     onSearch = { presenter.search() },
-                    scrollBehavior = scrollBehavior,
                 )
 
-                AppStateBanners(downloadedOnlyMode, incognitoMode)
-            }
-        },
-        floatingActionButton = {
-            BrowseSourceFloatingActionButton(
-                isVisible = presenter.filters.isNotEmpty() && presenter.currentFilter is BrowseSourcePresenter.Filter.UserInput,
-                onFabClick = onFabClick,
-            )
-        },
-        snackbarHost = {
-            SnackbarHost(hostState = snackbarHostState)
-        },
-    ) { paddingValues ->
-        BrowseSourceContent(
-            state = presenter,
-            mangaList = mangaList,
-            getMangaState = { presenter.getManga(it) },
-            columns = columns,
-            displayMode = presenter.displayMode,
-            snackbarHostState = snackbarHostState,
-            contentPadding = paddingValues,
-            onWebViewClick = onWebViewClick,
-            onHelpClick = { uriHandler.openUri(MoreController.URL_HELP) },
-            onLocalSourceHelpClick = onHelpClick,
-            onMangaClick = onMangaClick,
-            onMangaLongClick = onMangaLongClick,
-            header = {
                 Row(
+                    modifier = Modifier
+                        .horizontalScroll(rememberScrollState())
+                        .padding(horizontal = 8.dp),
                     horizontalArrangement = Arrangement.spacedBy(8.dp),
                 ) {
                     FilterChip(
@@ -161,7 +142,7 @@ fun BrowseSourceScreen(
                     if (presenter.filters.isNotEmpty()) {
                         FilterChip(
                             selected = presenter.currentFilter is BrowseSourcePresenter.Filter.UserInput,
-                            onClick = onFabClick,
+                            onClick = openFilterSheet,
                             leadingIcon = {
                                 Icon(
                                     imageVector = Icons.Outlined.FilterList,
@@ -176,7 +157,29 @@ fun BrowseSourceScreen(
                         )
                     }
                 }
-            },
+
+                Divider()
+
+                AppStateBanners(downloadedOnlyMode, incognitoMode)
+            }
+        },
+        snackbarHost = {
+            SnackbarHost(hostState = snackbarHostState)
+        },
+    ) { paddingValues ->
+        BrowseSourceContent(
+            state = presenter,
+            mangaList = mangaList,
+            getMangaState = { presenter.getManga(it) },
+            columns = columns,
+            displayMode = presenter.displayMode,
+            snackbarHostState = snackbarHostState,
+            contentPadding = paddingValues,
+            onWebViewClick = onWebViewClick,
+            onHelpClick = { uriHandler.openUri(MoreController.URL_HELP) },
+            onLocalSourceHelpClick = onHelpClick,
+            onMangaClick = onMangaClick,
+            onMangaLongClick = onMangaLongClick,
         )
     }
 }
@@ -202,7 +205,6 @@ fun BrowseSourceContent(
     state: BrowseSourceState,
     mangaList: LazyPagingItems<Manga>,
     getMangaState: @Composable ((Manga) -> State<Manga>),
-    header: (@Composable () -> Unit)? = null,
     columns: GridCells,
     displayMode: LibraryDisplayMode,
     snackbarHostState: SnackbarHostState,
@@ -274,7 +276,6 @@ fun BrowseSourceContent(
                 contentPadding = contentPadding,
                 onMangaClick = onMangaClick,
                 onMangaLongClick = onMangaLongClick,
-                header = header,
             )
         }
         LibraryDisplayMode.List -> {
@@ -284,7 +285,6 @@ fun BrowseSourceContent(
                 contentPadding = contentPadding,
                 onMangaClick = onMangaClick,
                 onMangaLongClick = onMangaLongClick,
-                header = header,
             )
         }
         else -> {
@@ -295,7 +295,6 @@ fun BrowseSourceContent(
                 contentPadding = contentPadding,
                 onMangaClick = onMangaClick,
                 onMangaLongClick = onMangaLongClick,
-                header = header,
             )
         }
     }

+ 0 - 7
app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceComfortableGrid.kt

@@ -30,7 +30,6 @@ import eu.kanade.tachiyomi.R
 fun BrowseSourceComfortableGrid(
     mangaList: LazyPagingItems<Manga>,
     getMangaState: @Composable ((Manga) -> State<Manga>),
-    header: (@Composable () -> Unit)? = null,
     columns: GridCells,
     contentPadding: PaddingValues,
     onMangaClick: (Manga) -> Unit,
@@ -42,12 +41,6 @@ fun BrowseSourceComfortableGrid(
         horizontalArrangement = Arrangement.spacedBy(8.dp),
         verticalArrangement = Arrangement.spacedBy(8.dp),
     ) {
-        if (header != null) {
-            item(span = { GridItemSpan(maxLineSpan) }) {
-                header()
-            }
-        }
-
         if (mangaList.loadState.prepend is LoadState.Loading) {
             item(span = { GridItemSpan(maxLineSpan) }) {
                 BrowseSourceLoadingItem()

+ 0 - 7
app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceCompactGrid.kt

@@ -41,7 +41,6 @@ fun BrowseSourceCompactGrid(
     contentPadding: PaddingValues,
     onMangaClick: (Manga) -> Unit,
     onMangaLongClick: (Manga) -> Unit,
-    header: (@Composable () -> Unit)? = null,
 ) {
     LazyVerticalGrid(
         columns = columns,
@@ -49,12 +48,6 @@ fun BrowseSourceCompactGrid(
         horizontalArrangement = Arrangement.spacedBy(8.dp),
         verticalArrangement = Arrangement.spacedBy(8.dp),
     ) {
-        if (header != null) {
-            item(span = { GridItemSpan(maxLineSpan) }) {
-                header()
-            }
-        }
-
         item(span = { GridItemSpan(maxLineSpan) }) {
             if (mangaList.loadState.prepend is LoadState.Loading) {
                 BrowseSourceLoadingItem()

+ 0 - 7
app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceList.kt

@@ -30,17 +30,10 @@ fun BrowseSourceList(
     contentPadding: PaddingValues,
     onMangaClick: (Manga) -> Unit,
     onMangaLongClick: (Manga) -> Unit,
-    header: (@Composable () -> Unit)? = null,
 ) {
     LazyColumn(
         contentPadding = contentPadding,
     ) {
-        if (header != null) {
-            item {
-                header()
-            }
-        }
-
         item {
             if (mangaList.loadState.prepend is LoadState.Loading) {
                 BrowseSourceLoadingItem()

+ 3 - 3
app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceToolbar.kt

@@ -39,7 +39,7 @@ fun BrowseSourceToolbar(
     onWebViewClick: () -> Unit,
     onHelpClick: () -> Unit,
     onSearch: () -> Unit,
-    scrollBehavior: TopAppBarScrollBehavior,
+    scrollBehavior: TopAppBarScrollBehavior? = null,
 ) {
     if (state.searchQuery == null) {
         BrowseSourceRegularToolbar(
@@ -75,7 +75,7 @@ fun BrowseSourceRegularToolbar(
     onSearchClick: () -> Unit,
     onWebViewClick: () -> Unit,
     onHelpClick: () -> Unit,
-    scrollBehavior: TopAppBarScrollBehavior,
+    scrollBehavior: TopAppBarScrollBehavior?,
 ) {
     AppBar(
         navigateUp = navigateUp,
@@ -162,7 +162,7 @@ fun BrowseSourceSearchToolbar(
     navigateUp: () -> Unit,
     onResetClick: () -> Unit,
     onSearchClick: () -> Unit,
-    scrollBehavior: TopAppBarScrollBehavior,
+    scrollBehavior: TopAppBarScrollBehavior?,
 ) {
     SearchToolbar(
         searchQuery = searchQuery,

+ 1 - 1
app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceController.kt

@@ -59,7 +59,7 @@ open class BrowseSourceController(bundle: Bundle) :
                     router.popCurrentController()
                 }
             },
-            onFabClick = { filterSheet?.show() },
+            openFilterSheet = { filterSheet?.show() },
             onMangaClick = { router.pushController(MangaController(it.id, true)) },
             onMangaLongClick = { manga ->
                 scope.launchIO {