BrowseSourceScreen: Adjust browse mode chips placement (#8076)

The chips row is now scrollable too and filter fab is removed

(cherry picked from commit 0190c36d20a0ef070fad8a6ab55906c25390144c)

# Conflicts:
#	app/src/main/java/eu/kanade/presentation/browse/BrowseSourceScreen.kt
#	app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceComfortableGrid.kt
#	app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceToolbar.kt
This commit is contained in:
Ivan Iskandar 2022-09-25 21:15:01 +07:00 committed by Jobobby04
parent 2d2ee54c99
commit d5fcd3a67e
7 changed files with 45 additions and 78 deletions

View File

@ -1,11 +1,13 @@
package eu.kanade.presentation.browse
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
@ -16,6 +18,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
@ -44,6 +47,7 @@ import eu.kanade.presentation.browse.components.BrowseSourceEHentaiList
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
@ -60,7 +64,7 @@ import exh.source.isEhBasedSource
fun BrowseSourceScreen(
presenter: BrowseSourcePresenter,
navigateUp: () -> Unit,
onFabClick: () -> Unit,
openFilterSheet: () -> Unit,
onMangaClick: (Manga) -> Unit,
onMangaLongClick: (Manga) -> Unit,
onWebViewClick: () -> Unit,
@ -83,8 +87,8 @@ fun BrowseSourceScreen(
}
Scaffold(
topBar = { scrollBehavior ->
Column {
topBar = {
Column(modifier = Modifier.background(MaterialTheme.colorScheme.surface)) {
BrowseSourceToolbar(
state = presenter,
source = presenter.source!!,
@ -97,47 +101,13 @@ fun BrowseSourceScreen(
// SY -->
onSettingsClick = onSettingsClick,
// SY <--
scrollBehavior = scrollBehavior,
)
AppStateBanners(downloadedOnlyMode, incognitoMode)
}
},
floatingActionButton = {
BrowseSourceFloatingActionButton(
isVisible = presenter.filters.isNotEmpty()/* SY --> && presenter.currentFilter is BrowseSourcePresenter.Filter.UserInput <-- SY */,
onFabClick = onFabClick,
)
},
snackbarHost = {
SnackbarHost(hostState = snackbarHostState)
},
) { paddingValues ->
BrowseSourceContent(
state = presenter,
mangaList = mangaList,
getMangaState = { presenter.getManga(it) },
// SY -->
getMetadataState = { manga, metadata ->
presenter.getRaisedSearchMetadata(manga, metadata)
},
// SY <--
columns = columns,
// SY -->
ehentaiBrowseDisplayMode = presenter.ehentaiBrowseDisplayMode,
// SY <--
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),
modifier = Modifier.horizontalScroll(rememberScrollState()),
) {
FilterChip(
selected = presenter.currentFilter == BrowseSourcePresenter.Filter.Popular,
@ -180,7 +150,7 @@ fun BrowseSourceScreen(
/* SY --> if (presenter.filters.isNotEmpty())*/ run /* SY <-- */ {
FilterChip(
selected = presenter.currentFilter is BrowseSourcePresenter.Filter.UserInput,
onClick = onFabClick,
onClick = openFilterSheet,
leadingIcon = {
Icon(
imageVector = Icons.Outlined.FilterList,
@ -203,7 +173,37 @@ fun BrowseSourceScreen(
)
}
}
Divider()
AppStateBanners(downloadedOnlyMode, incognitoMode)
}
},
snackbarHost = {
SnackbarHost(hostState = snackbarHostState)
},
) { paddingValues ->
BrowseSourceContent(
state = presenter,
mangaList = mangaList,
getMangaState = { presenter.getManga(it) },
// SY -->
getMetadataState = { manga, metadata ->
presenter.getRaisedSearchMetadata(manga, metadata)
},
// SY <--
columns = columns,
// SY -->
ehentaiBrowseDisplayMode = presenter.ehentaiBrowseDisplayMode,
// SY <--
displayMode = presenter.displayMode,
snackbarHostState = snackbarHostState,
contentPadding = paddingValues,
onWebViewClick = onWebViewClick,
onHelpClick = { uriHandler.openUri(MoreController.URL_HELP) },
onLocalSourceHelpClick = onHelpClick,
onMangaClick = onMangaClick,
onMangaLongClick = onMangaLongClick,
)
}
}
@ -240,7 +240,6 @@ fun BrowseSourceContent(
// SY -->
getMetadataState: @Composable ((Manga, RaisedSearchMetadata?) -> State<RaisedSearchMetadata?>),
// SY <--
header: (@Composable () -> Unit)? = null,
columns: GridCells,
ehentaiBrowseDisplayMode: Boolean,
displayMode: LibraryDisplayMode,
@ -317,7 +316,6 @@ fun BrowseSourceContent(
contentPadding = contentPadding,
onMangaClick = onMangaClick,
onMangaLongClick = onMangaLongClick,
header = header,
)
return
}
@ -335,7 +333,6 @@ fun BrowseSourceContent(
contentPadding = contentPadding,
onMangaClick = onMangaClick,
onMangaLongClick = onMangaLongClick,
header = header,
)
}
LibraryDisplayMode.List -> {
@ -348,7 +345,6 @@ fun BrowseSourceContent(
contentPadding = contentPadding,
onMangaClick = onMangaClick,
onMangaLongClick = onMangaLongClick,
header = header,
)
}
else -> {
@ -362,7 +358,6 @@ fun BrowseSourceContent(
contentPadding = contentPadding,
onMangaClick = onMangaClick,
onMangaLongClick = onMangaLongClick,
header = header,
)
}
}

View File

@ -37,7 +37,6 @@ fun BrowseSourceComfortableGrid(
// SY -->
getMetadataState: @Composable ((Manga, RaisedSearchMetadata?) -> State<RaisedSearchMetadata?>),
// SY <--
header: (@Composable () -> Unit)? = null,
columns: GridCells,
contentPadding: PaddingValues,
onMangaClick: (Manga) -> Unit,
@ -49,12 +48,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()

View File

@ -48,7 +48,6 @@ fun BrowseSourceCompactGrid(
contentPadding: PaddingValues,
onMangaClick: (Manga) -> Unit,
onMangaLongClick: (Manga) -> Unit,
header: (@Composable () -> Unit)? = null,
) {
LazyVerticalGrid(
columns = columns,
@ -56,12 +55,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()

View File

@ -58,17 +58,10 @@ fun BrowseSourceEHentaiList(
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()

View File

@ -36,17 +36,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()

View File

@ -45,7 +45,7 @@ fun BrowseSourceToolbar(
// SY -->
onSettingsClick: () -> Unit,
// SY <--
scrollBehavior: TopAppBarScrollBehavior,
scrollBehavior: TopAppBarScrollBehavior? = null,
) {
if (state.searchQuery == null) {
BrowseSourceRegularToolbar(
@ -91,7 +91,7 @@ fun BrowseSourceRegularToolbar(
// SY -->
onSettingsClick: () -> Unit,
// SY <--
scrollBehavior: TopAppBarScrollBehavior,
scrollBehavior: TopAppBarScrollBehavior?,
) {
AppBar(
navigateUp = navigateUp,
@ -191,7 +191,7 @@ fun BrowseSourceSearchToolbar(
navigateUp: () -> Unit,
onResetClick: () -> Unit,
onSearchClick: () -> Unit,
scrollBehavior: TopAppBarScrollBehavior,
scrollBehavior: TopAppBarScrollBehavior?,
) {
SearchToolbar(
searchQuery = searchQuery,

View File

@ -127,7 +127,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 {