123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- package eu.kanade.presentation.browse.components
- import androidx.compose.foundation.text.KeyboardActions
- import androidx.compose.foundation.text.KeyboardOptions
- import androidx.compose.material.icons.Icons
- import androidx.compose.material.icons.filled.ViewModule
- import androidx.compose.material.icons.outlined.Check
- import androidx.compose.material.icons.outlined.Help
- import androidx.compose.material.icons.outlined.Public
- import androidx.compose.material.icons.outlined.Search
- import androidx.compose.material3.DropdownMenuItem
- import androidx.compose.material3.Icon
- import androidx.compose.material3.Text
- import androidx.compose.material3.TopAppBarScrollBehavior
- import androidx.compose.runtime.Composable
- import androidx.compose.runtime.getValue
- import androidx.compose.runtime.mutableStateOf
- import androidx.compose.runtime.remember
- import androidx.compose.runtime.setValue
- import androidx.compose.ui.res.stringResource
- import androidx.compose.ui.text.input.ImeAction
- import eu.kanade.domain.library.model.LibraryDisplayMode
- import eu.kanade.presentation.browse.BrowseSourceState
- import eu.kanade.presentation.components.AppBar
- import eu.kanade.presentation.components.AppBarActions
- import eu.kanade.presentation.components.DropdownMenu
- import eu.kanade.presentation.components.SearchToolbar
- import eu.kanade.tachiyomi.R
- import eu.kanade.tachiyomi.source.CatalogueSource
- import eu.kanade.tachiyomi.source.LocalSource
- @Composable
- fun BrowseSourceToolbar(
- state: BrowseSourceState,
- source: CatalogueSource,
- displayMode: LibraryDisplayMode,
- onDisplayModeChange: (LibraryDisplayMode) -> Unit,
- navigateUp: () -> Unit,
- onWebViewClick: () -> Unit,
- onHelpClick: () -> Unit,
- onSearch: () -> Unit,
- scrollBehavior: TopAppBarScrollBehavior,
- ) {
- if (state.searchQuery == null) {
- BrowseSourceRegularToolbar(
- title = if (state.isUserQuery) state.currentFilter.query else source.name,
- isLocalSource = source is LocalSource,
- displayMode = displayMode,
- onDisplayModeChange = onDisplayModeChange,
- navigateUp = navigateUp,
- onSearchClick = { state.searchQuery = if (state.isUserQuery) state.currentFilter.query else "" },
- onWebViewClick = onWebViewClick,
- onHelpClick = onHelpClick,
- scrollBehavior = scrollBehavior,
- )
- } else {
- BrowseSourceSearchToolbar(
- searchQuery = state.searchQuery!!,
- onSearchQueryChanged = { state.searchQuery = it },
- navigateUp = { state.searchQuery = null },
- onResetClick = { state.searchQuery = "" },
- onSearchClick = onSearch,
- scrollBehavior = scrollBehavior,
- )
- }
- }
- @Composable
- fun BrowseSourceRegularToolbar(
- title: String,
- isLocalSource: Boolean,
- displayMode: LibraryDisplayMode,
- onDisplayModeChange: (LibraryDisplayMode) -> Unit,
- navigateUp: () -> Unit,
- onSearchClick: () -> Unit,
- onWebViewClick: () -> Unit,
- onHelpClick: () -> Unit,
- scrollBehavior: TopAppBarScrollBehavior,
- ) {
- AppBar(
- navigateUp = navigateUp,
- title = title,
- actions = {
- var selectingDisplayMode by remember { mutableStateOf(false) }
- AppBarActions(
- actions = listOf(
- AppBar.Action(
- title = stringResource(R.string.action_search),
- icon = Icons.Outlined.Search,
- onClick = onSearchClick,
- ),
- AppBar.Action(
- title = stringResource(R.string.action_display_mode),
- icon = Icons.Filled.ViewModule,
- onClick = { selectingDisplayMode = true },
- ),
- if (isLocalSource) {
- AppBar.Action(
- title = stringResource(R.string.label_help),
- icon = Icons.Outlined.Help,
- onClick = onHelpClick,
- )
- } else {
- AppBar.Action(
- title = stringResource(R.string.action_web_view),
- icon = Icons.Outlined.Public,
- onClick = onWebViewClick,
- )
- },
- ),
- )
- DropdownMenu(
- expanded = selectingDisplayMode,
- onDismissRequest = { selectingDisplayMode = false },
- ) {
- DropdownMenuItem(
- text = { Text(text = stringResource(R.string.action_display_comfortable_grid)) },
- onClick = { onDisplayModeChange(LibraryDisplayMode.ComfortableGrid) },
- trailingIcon = {
- if (displayMode == LibraryDisplayMode.ComfortableGrid) {
- Icon(
- imageVector = Icons.Outlined.Check,
- contentDescription = "",
- )
- }
- },
- )
- DropdownMenuItem(
- text = { Text(text = stringResource(R.string.action_display_grid)) },
- onClick = { onDisplayModeChange(LibraryDisplayMode.CompactGrid) },
- trailingIcon = {
- if (displayMode == LibraryDisplayMode.CompactGrid) {
- Icon(
- imageVector = Icons.Outlined.Check,
- contentDescription = "",
- )
- }
- },
- )
- DropdownMenuItem(
- text = { Text(text = stringResource(R.string.action_display_list)) },
- onClick = { onDisplayModeChange(LibraryDisplayMode.List) },
- trailingIcon = {
- if (displayMode == LibraryDisplayMode.List) {
- Icon(
- imageVector = Icons.Outlined.Check,
- contentDescription = "",
- )
- }
- },
- )
- }
- },
- scrollBehavior = scrollBehavior,
- )
- }
- @Composable
- fun BrowseSourceSearchToolbar(
- searchQuery: String,
- onSearchQueryChanged: (String) -> Unit,
- navigateUp: () -> Unit,
- onResetClick: () -> Unit,
- onSearchClick: () -> Unit,
- scrollBehavior: TopAppBarScrollBehavior,
- ) {
- SearchToolbar(
- searchQuery = searchQuery,
- onChangeSearchQuery = onSearchQueryChanged,
- keyboardOptions = KeyboardOptions(imeAction = ImeAction.Search),
- keyboardActions = KeyboardActions(
- onSearch = {
- onSearchClick()
- },
- ),
- onClickCloseSearch = navigateUp,
- onClickResetSearch = onResetClick,
- scrollBehavior = scrollBehavior,
- )
- }
|