diff --git a/app/src/main/java/eu/kanade/presentation/manga/MangaScreen.kt b/app/src/main/java/eu/kanade/presentation/manga/MangaScreen.kt index 3115d04578..50ad8d4951 100644 --- a/app/src/main/java/eu/kanade/presentation/manga/MangaScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/manga/MangaScreen.kt @@ -265,14 +265,13 @@ private fun MangaScreenSmallImpl( ) } - val internalOnBackPressed = { + BackHandler(onBack = { if (isAnySelected) { onAllChapterSelected(false) } else { onBackClicked() } - } - BackHandler(onBack = internalOnBackPressed) + }) Scaffold( topBar = { @@ -285,29 +284,25 @@ private fun MangaScreenSmallImpl( val isFirstItemScrolled by remember { derivedStateOf { chapterListState.firstVisibleItemScrollOffset > 0 } } - val animatedTitleAlpha by animateFloatAsState( - if (!isFirstItemVisible) 1f else 0f, - label = "Top Bar Title", - ) val animatedBgAlpha by animateFloatAsState( if (!isFirstItemVisible || isFirstItemScrolled) 1f else 0f, label = "Top Bar Background", ) MangaToolbar( title = state.manga.title, - titleAlphaProvider = { animatedTitleAlpha }, - backgroundAlphaProvider = { animatedBgAlpha }, hasFilters = state.filterActive, - onBackClicked = internalOnBackPressed, + navigateUp = onBackClicked, onClickFilter = onFilterClicked, onClickShare = onShareClicked, onClickDownload = onDownloadActionClicked, onClickEditCategory = onEditCategoryClicked, onClickRefresh = onRefresh, onClickMigrate = onMigrateClicked, + onCancelActionMode = { onAllChapterSelected(false) }, actionModeCounter = selectedChapterCount, onSelectAll = { onAllChapterSelected(true) }, onInvertSelection = { onInvertSelection() }, + backgroundAlphaProvider = { animatedBgAlpha }, ) }, bottomBar = { @@ -515,14 +510,13 @@ fun MangaScreenLargeImpl( val chapterListState = rememberLazyListState() - val internalOnBackPressed = { + BackHandler(onBack = { if (isAnySelected) { onAllChapterSelected(false) } else { onBackClicked() } - } - BackHandler(onBack = internalOnBackPressed) + }) Scaffold( topBar = { @@ -532,19 +526,19 @@ fun MangaScreenLargeImpl( MangaToolbar( modifier = Modifier.onSizeChanged { topBarHeight = it.height }, title = state.manga.title, - titleAlphaProvider = { if (isAnySelected) 1f else 0f }, - backgroundAlphaProvider = { 1f }, hasFilters = state.filterActive, - onBackClicked = internalOnBackPressed, + navigateUp = onBackClicked, onClickFilter = onFilterButtonClicked, onClickShare = onShareClicked, onClickDownload = onDownloadActionClicked, onClickEditCategory = onEditCategoryClicked, onClickRefresh = onRefresh, onClickMigrate = onMigrateClicked, + onCancelActionMode = { onAllChapterSelected(false) }, actionModeCounter = selectedChapterCount, onSelectAll = { onAllChapterSelected(true) }, onInvertSelection = { onInvertSelection() }, + backgroundAlphaProvider = { 1f }, ) }, bottomBar = { diff --git a/app/src/main/java/eu/kanade/presentation/manga/components/MangaToolbar.kt b/app/src/main/java/eu/kanade/presentation/manga/components/MangaToolbar.kt index 4415bbf278..6885bfce54 100644 --- a/app/src/main/java/eu/kanade/presentation/manga/components/MangaToolbar.kt +++ b/app/src/main/java/eu/kanade/presentation/manga/components/MangaToolbar.kt @@ -1,18 +1,12 @@ package eu.kanade.presentation.manga.components -import androidx.compose.foundation.layout.Column import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.outlined.Close import androidx.compose.material.icons.outlined.Download import androidx.compose.material.icons.outlined.FilterList import androidx.compose.material.icons.outlined.FlipToBack import androidx.compose.material.icons.outlined.SelectAll -import androidx.compose.material3.IconButton import androidx.compose.material3.LocalContentColor import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Text -import androidx.compose.material3.TopAppBar -import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.surfaceColorAtElevation import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue @@ -20,12 +14,10 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier -import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.components.DownloadDropdownMenu -import eu.kanade.presentation.components.UpIcon import eu.kanade.presentation.manga.DownloadAction import kotlinx.collections.immutable.persistentListOf import tachiyomi.i18n.MR @@ -35,9 +27,8 @@ import tachiyomi.presentation.core.theme.active @Composable fun MangaToolbar( title: String, - titleAlphaProvider: () -> Float, hasFilters: Boolean, - onBackClicked: () -> Unit, + navigateUp: () -> Unit, onClickFilter: () -> Unit, onClickShare: (() -> Unit)?, onClickDownload: ((DownloadAction) -> Unit)?, @@ -47,118 +38,104 @@ fun MangaToolbar( // For action mode actionModeCounter: Int, + onCancelActionMode: () -> Unit, onSelectAll: () -> Unit, onInvertSelection: () -> Unit, modifier: Modifier = Modifier, - backgroundAlphaProvider: () -> Float = titleAlphaProvider, + backgroundAlphaProvider: () -> Float, ) { - Column( + val isActionMode = remember(actionModeCounter) { actionModeCounter > 0 } + AppBar( modifier = modifier, - ) { - val isActionMode = actionModeCounter > 0 - TopAppBar( - title = { - Text( - text = if (isActionMode) actionModeCounter.toString() else title, - maxLines = 1, - overflow = TextOverflow.Ellipsis, - color = LocalContentColor.current.copy(alpha = if (isActionMode) 1f else titleAlphaProvider()), + title = title, + navigateUp = navigateUp, + actionModeCounter = actionModeCounter, + onCancelActionMode = onCancelActionMode, + actionModeActions = { + AppBarActions( + persistentListOf( + AppBar.Action( + title = stringResource(MR.strings.action_select_all), + icon = Icons.Outlined.SelectAll, + onClick = onSelectAll, + ), + AppBar.Action( + title = stringResource(MR.strings.action_select_inverse), + icon = Icons.Outlined.FlipToBack, + onClick = onInvertSelection, + ), + ), + ) + }, + actions = { + var downloadExpanded by remember { mutableStateOf(false) } + if (onClickDownload != null) { + val onDismissRequest = { downloadExpanded = false } + DownloadDropdownMenu( + expanded = downloadExpanded, + onDismissRequest = onDismissRequest, + onDownloadClicked = onClickDownload, ) - }, - navigationIcon = { - IconButton(onClick = onBackClicked) { - UpIcon(navigationIcon = Icons.Outlined.Close.takeIf { isActionMode }) - } - }, - actions = { - if (isActionMode) { - AppBarActions( - persistentListOf( + } + + val filterTint = if (hasFilters) MaterialTheme.colorScheme.active else LocalContentColor.current + AppBarActions( + actions = persistentListOf().builder() + .apply { + if (onClickDownload != null) { + add( + AppBar.Action( + title = stringResource(MR.strings.manga_download), + icon = Icons.Outlined.Download, + onClick = { downloadExpanded = !downloadExpanded }, + ), + ) + } + add( AppBar.Action( - title = stringResource(MR.strings.action_select_all), - icon = Icons.Outlined.SelectAll, - onClick = onSelectAll, + title = stringResource(MR.strings.action_filter), + icon = Icons.Outlined.FilterList, + iconTint = filterTint, + onClick = onClickFilter, ), - AppBar.Action( - title = stringResource(MR.strings.action_select_inverse), - icon = Icons.Outlined.FlipToBack, - onClick = onInvertSelection, + ) + add( + AppBar.OverflowAction( + title = stringResource(MR.strings.action_webview_refresh), + onClick = onClickRefresh, ), - ), - ) - } else { - var downloadExpanded by remember { mutableStateOf(false) } - if (onClickDownload != null) { - val onDismissRequest = { downloadExpanded = false } - DownloadDropdownMenu( - expanded = downloadExpanded, - onDismissRequest = onDismissRequest, - onDownloadClicked = onClickDownload, ) + if (onClickEditCategory != null) { + add( + AppBar.OverflowAction( + title = stringResource(MR.strings.action_edit_categories), + onClick = onClickEditCategory, + ), + ) + } + if (onClickMigrate != null) { + add( + AppBar.OverflowAction( + title = stringResource(MR.strings.action_migrate), + onClick = onClickMigrate, + ), + ) + } + if (onClickShare != null) { + add( + AppBar.OverflowAction( + title = stringResource(MR.strings.action_share), + onClick = onClickShare, + ), + ) + } } - - val filterTint = if (hasFilters) MaterialTheme.colorScheme.active else LocalContentColor.current - AppBarActions( - actions = persistentListOf().builder() - .apply { - if (onClickDownload != null) { - add( - AppBar.Action( - title = stringResource(MR.strings.manga_download), - icon = Icons.Outlined.Download, - onClick = { downloadExpanded = !downloadExpanded }, - ), - ) - } - add( - AppBar.Action( - title = stringResource(MR.strings.action_filter), - icon = Icons.Outlined.FilterList, - iconTint = filterTint, - onClick = onClickFilter, - ), - ) - add( - AppBar.OverflowAction( - title = stringResource(MR.strings.action_webview_refresh), - onClick = onClickRefresh, - ), - ) - if (onClickEditCategory != null) { - add( - AppBar.OverflowAction( - title = stringResource(MR.strings.action_edit_categories), - onClick = onClickEditCategory, - ), - ) - } - if (onClickMigrate != null) { - add( - AppBar.OverflowAction( - title = stringResource(MR.strings.action_migrate), - onClick = onClickMigrate, - ), - ) - } - if (onClickShare != null) { - add( - AppBar.OverflowAction( - title = stringResource(MR.strings.action_share), - onClick = onClickShare, - ), - ) - } - } - .build(), - ) - } - }, - colors = TopAppBarDefaults.topAppBarColors( - containerColor = MaterialTheme.colorScheme - .surfaceColorAtElevation(3.dp) - .copy(alpha = if (isActionMode) 1f else backgroundAlphaProvider()), - ), - ) - } + .build(), + ) + }, + backgroundColor = MaterialTheme.colorScheme + .surfaceColorAtElevation(3.dp) + .copy(alpha = if (isActionMode) 1f else backgroundAlphaProvider()), + ) }