mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-31 14:27:57 +01:00 
			
		
		
		
	BrowseSourceScreen: Adjust browse mode chips placement (#8076)
The chips row is now scrollable too and filter fab is removed
This commit is contained in:
		| @@ -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, | ||||
|             ) | ||||
|         } | ||||
|     } | ||||
|   | ||||
| @@ -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() | ||||
|   | ||||
| @@ -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() | ||||
|   | ||||
| @@ -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() | ||||
|   | ||||
| @@ -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, | ||||
|   | ||||
| @@ -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 { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user