diff --git a/app/src/main/java/eu/kanade/presentation/browse/BrowseSourceScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/BrowseSourceScreen.kt index 6447d6eed..b7779c6c0 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/BrowseSourceScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/BrowseSourceScreen.kt @@ -42,10 +42,9 @@ import eu.kanade.presentation.browse.components.BrowseSourceCompactGrid 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.DownloadedOnlyModeBanner +import eu.kanade.presentation.components.AppStateBanners import eu.kanade.presentation.components.EmptyScreen import eu.kanade.presentation.components.ExtendedFloatingActionButton -import eu.kanade.presentation.components.IncognitoModeBanner import eu.kanade.presentation.components.LoadingScreen import eu.kanade.presentation.components.Scaffold import eu.kanade.tachiyomi.R @@ -100,12 +99,8 @@ fun BrowseSourceScreen( // SY <-- scrollBehavior = scrollBehavior, ) - if (downloadedOnlyMode) { - DownloadedOnlyModeBanner() - } - if (incognitoMode) { - IncognitoModeBanner() - } + + AppStateBanners(downloadedOnlyMode, incognitoMode) } }, floatingActionButton = { @@ -159,7 +154,7 @@ fun BrowseSourceScreen( ) }, label = { - Text(text = stringResource(id = R.string.popular)) + Text(text = stringResource(R.string.popular)) }, ) if (presenter.source?.supportsLatest == true) { @@ -178,7 +173,7 @@ fun BrowseSourceScreen( ) }, label = { - Text(text = stringResource(id = R.string.latest)) + Text(text = stringResource(R.string.latest)) }, ) } @@ -198,9 +193,9 @@ fun BrowseSourceScreen( // SY --> Text( text = if (presenter.filters.isNotEmpty()) { - stringResource(id = R.string.action_filter) + stringResource(R.string.action_filter) } else { - stringResource(id = R.string.action_search) + stringResource(R.string.action_search) }, ) // SY <-- @@ -225,9 +220,9 @@ fun BrowseSourceFloatingActionButton( text = { Text( text = if (isVisible) { - stringResource(id = R.string.action_filter) + stringResource(R.string.action_filter) } else { - stringResource(id = R.string.saved_searches) + stringResource(R.string.saved_searches) }, ) }, diff --git a/app/src/main/java/eu/kanade/presentation/browse/MigrateSourceScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/MigrateSourceScreen.kt index a545abef6..ea461e8ac 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/MigrateSourceScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/MigrateSourceScreen.kt @@ -1,5 +1,6 @@ package eu.kanade.presentation.browse +import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -95,7 +96,7 @@ fun MigrateSourceList( stickyHeader(key = "header") { Row( modifier = Modifier - .animateItemPlacement() + .background(MaterialTheme.colorScheme.background) .padding(start = horizontalPadding), verticalAlignment = Alignment.CenterVertically, ) { @@ -120,14 +121,9 @@ fun MigrateSourceList( } } - item(key = "title") { - } - items( items = list, - key = { (source, _) -> - source.id - }, + key = { (source, _) -> source.id }, ) { (source, count) -> MigrateSourceItem( modifier = Modifier.animateItemPlacement(), diff --git a/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceComfortableGrid.kt b/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceComfortableGrid.kt index eac62096d..de1039dd7 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceComfortableGrid.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceComfortableGrid.kt @@ -118,7 +118,7 @@ fun BrowseSourceComfortableGridItem( }, badgesStart = { if (manga.favorite) { - Badge(text = stringResource(id = R.string.in_library)) + Badge(text = stringResource(R.string.in_library)) } }, // SY --> diff --git a/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceCompactGrid.kt b/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceCompactGrid.kt index 8cf18c49c..6fd5ea782 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceCompactGrid.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceCompactGrid.kt @@ -129,7 +129,7 @@ fun BrowseSourceCompactGridItem( }, badgesStart = { if (manga.favorite) { - Badge(text = stringResource(id = R.string.in_library)) + Badge(text = stringResource(R.string.in_library)) } }, // SY --> diff --git a/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceDialogs.kt b/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceDialogs.kt index 83f1e5528..885f4a9e9 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceDialogs.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceDialogs.kt @@ -16,7 +16,7 @@ fun RemoveMangaDialog( onDismissRequest = onDismissRequest, dismissButton = { TextButton(onClick = onDismissRequest) { - Text(text = stringResource(id = android.R.string.cancel)) + Text(text = stringResource(android.R.string.cancel)) } }, confirmButton = { @@ -26,11 +26,11 @@ fun RemoveMangaDialog( onConfirm() }, ) { - Text(text = stringResource(id = R.string.action_remove)) + Text(text = stringResource(R.string.action_remove)) } }, title = { - Text(text = stringResource(id = R.string.are_you_sure)) + Text(text = stringResource(R.string.are_you_sure)) }, text = { Text(text = stringResource(R.string.remove_manga)) diff --git a/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceList.kt b/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceList.kt index 9ab08c13b..388d106ae 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceList.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceList.kt @@ -106,7 +106,7 @@ fun BrowseSourceListItem( onLongClick = onLongClick, badges = { if (manga.favorite) { - Badge(text = stringResource(id = R.string.in_library)) + Badge(text = stringResource(R.string.in_library)) } if (metadata is MangaDexSearchMetadata) { metadata.followStatus?.let { followStatus -> diff --git a/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceToolbar.kt b/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceToolbar.kt index fbb6f8954..7b94de4d5 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceToolbar.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceToolbar.kt @@ -101,26 +101,26 @@ fun BrowseSourceRegularToolbar( AppBarActions( actions = listOfNotNull( AppBar.Action( - title = stringResource(id = R.string.action_search), + title = stringResource(R.string.action_search), icon = Icons.Outlined.Search, onClick = onSearchClick, ), // SY --> AppBar.Action( - title = stringResource(id = R.string.action_display_mode), + title = stringResource(R.string.action_display_mode), icon = Icons.Filled.ViewModule, onClick = { selectingDisplayMode = true }, ).takeIf { displayMode != null }, // SY <-- if (isLocalSource) { AppBar.Action( - title = stringResource(id = R.string.label_help), + title = stringResource(R.string.label_help), icon = Icons.Outlined.Help, onClick = onHelpClick, ) } else { AppBar.Action( - title = stringResource(id = R.string.action_web_view), + title = stringResource(R.string.action_web_view), icon = Icons.Outlined.Public, onClick = onWebViewClick, ) @@ -143,7 +143,7 @@ fun BrowseSourceRegularToolbar( onDismissRequest = { selectingDisplayMode = false }, ) { DropdownMenuItem( - text = { Text(text = stringResource(id = R.string.action_display_comfortable_grid)) }, + text = { Text(text = stringResource(R.string.action_display_comfortable_grid)) }, onClick = { onDisplayModeChange(LibraryDisplayMode.ComfortableGrid) }, trailingIcon = { if (displayMode == LibraryDisplayMode.ComfortableGrid) { @@ -155,7 +155,7 @@ fun BrowseSourceRegularToolbar( }, ) DropdownMenuItem( - text = { Text(text = stringResource(id = R.string.action_display_grid)) }, + text = { Text(text = stringResource(R.string.action_display_grid)) }, onClick = { onDisplayModeChange(LibraryDisplayMode.CompactGrid) }, trailingIcon = { if (displayMode == LibraryDisplayMode.CompactGrid) { @@ -167,7 +167,7 @@ fun BrowseSourceRegularToolbar( }, ) DropdownMenuItem( - text = { Text(text = stringResource(id = R.string.action_display_list)) }, + text = { Text(text = stringResource(R.string.action_display_list)) }, onClick = { onDisplayModeChange(LibraryDisplayMode.List) }, trailingIcon = { if (displayMode == LibraryDisplayMode.List) { diff --git a/app/src/main/java/eu/kanade/presentation/category/components/CategoryDialogs.kt b/app/src/main/java/eu/kanade/presentation/category/components/CategoryDialogs.kt index 148f9119d..b9e8307ba 100644 --- a/app/src/main/java/eu/kanade/presentation/category/components/CategoryDialogs.kt +++ b/app/src/main/java/eu/kanade/presentation/category/components/CategoryDialogs.kt @@ -61,6 +61,7 @@ fun CategoryCreateDialog( label = { Text(text = stringResource(R.string.name)) }, + singleLine = true, ) // SY --> } @@ -110,6 +111,7 @@ fun CategoryRenameDialog( label = { Text(text = stringResource(R.string.name)) }, + singleLine = true, ) }, ) diff --git a/app/src/main/java/eu/kanade/presentation/components/AppBar.kt b/app/src/main/java/eu/kanade/presentation/components/AppBar.kt index e3a28118d..165f7dc78 100644 --- a/app/src/main/java/eu/kanade/presentation/components/AppBar.kt +++ b/app/src/main/java/eu/kanade/presentation/components/AppBar.kt @@ -144,12 +144,7 @@ fun AppBar( scrollBehavior = scrollBehavior, ) - if (downloadedOnlyMode) { - DownloadedOnlyModeBanner() - } - if (incognitoMode) { - IncognitoModeBanner() - } + AppStateBanners(downloadedOnlyMode, incognitoMode) } } diff --git a/app/src/main/java/eu/kanade/presentation/components/Banners.kt b/app/src/main/java/eu/kanade/presentation/components/Banners.kt index fa5ee4620..f234832a4 100644 --- a/app/src/main/java/eu/kanade/presentation/components/Banners.kt +++ b/app/src/main/java/eu/kanade/presentation/components/Banners.kt @@ -1,6 +1,7 @@ package eu.kanade.presentation.components import androidx.compose.foundation.background +import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material3.MaterialTheme @@ -13,7 +14,20 @@ import androidx.compose.ui.unit.dp import eu.kanade.tachiyomi.R @Composable -fun DownloadedOnlyModeBanner() { +fun ColumnScope.AppStateBanners( + downloadedOnlyMode: Boolean, + incognitoMode: Boolean, +) { + if (downloadedOnlyMode) { + DownloadedOnlyModeBanner() + } + if (incognitoMode) { + IncognitoModeBanner() + } +} + +@Composable +private fun DownloadedOnlyModeBanner() { Text( text = stringResource(R.string.label_downloaded_only), modifier = Modifier @@ -27,7 +41,7 @@ fun DownloadedOnlyModeBanner() { } @Composable -fun IncognitoModeBanner() { +private fun IncognitoModeBanner() { Text( text = stringResource(R.string.pref_incognito_mode), modifier = Modifier diff --git a/app/src/main/java/eu/kanade/presentation/components/TabbedScreen.kt b/app/src/main/java/eu/kanade/presentation/components/TabbedScreen.kt index 9ad3cdfc0..9284af56d 100644 --- a/app/src/main/java/eu/kanade/presentation/components/TabbedScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/components/TabbedScreen.kt @@ -76,12 +76,7 @@ fun TabbedScreen( } } - if (downloadedOnlyMode) { - DownloadedOnlyModeBanner() - } - if (incognitoMode) { - IncognitoModeBanner() - } + AppStateBanners(downloadedOnlyMode, incognitoMode) HorizontalPager( count = tabs.size, diff --git a/app/src/main/java/eu/kanade/presentation/library/components/LibraryTabs.kt b/app/src/main/java/eu/kanade/presentation/library/components/LibraryTabs.kt index 3a55b0c96..bf0bc0175 100644 --- a/app/src/main/java/eu/kanade/presentation/library/components/LibraryTabs.kt +++ b/app/src/main/java/eu/kanade/presentation/library/components/LibraryTabs.kt @@ -13,8 +13,7 @@ import androidx.compose.ui.unit.dp import com.google.accompanist.pager.PagerState import eu.kanade.domain.category.model.Category import eu.kanade.presentation.category.visualName -import eu.kanade.presentation.components.DownloadedOnlyModeBanner -import eu.kanade.presentation.components.IncognitoModeBanner +import eu.kanade.presentation.components.AppStateBanners import eu.kanade.presentation.components.TabIndicator import eu.kanade.presentation.components.TabText import kotlinx.coroutines.launch @@ -60,11 +59,7 @@ fun LibraryTabs( ) } } - if (isDownloadOnly) { - DownloadedOnlyModeBanner() - } - if (isIncognitoMode) { - IncognitoModeBanner() - } + + AppStateBanners(isDownloadOnly, isIncognitoMode) } } diff --git a/app/src/main/java/eu/kanade/presentation/manga/components/MangaAppBar.kt b/app/src/main/java/eu/kanade/presentation/manga/components/MangaAppBar.kt index b566fed67..625b36b36 100644 --- a/app/src/main/java/eu/kanade/presentation/manga/components/MangaAppBar.kt +++ b/app/src/main/java/eu/kanade/presentation/manga/components/MangaAppBar.kt @@ -28,9 +28,8 @@ import androidx.compose.ui.draw.alpha import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp -import eu.kanade.presentation.components.DownloadedOnlyModeBanner +import eu.kanade.presentation.components.AppStateBanners import eu.kanade.presentation.components.DropdownMenu -import eu.kanade.presentation.components.IncognitoModeBanner import eu.kanade.presentation.manga.DownloadAction import eu.kanade.tachiyomi.R @@ -247,11 +246,6 @@ fun MangaAppBar( ), ) - if (downloadedOnlyMode) { - DownloadedOnlyModeBanner() - } - if (incognitoMode) { - IncognitoModeBanner() - } + AppStateBanners(downloadedOnlyMode, incognitoMode) } } diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/database/ClearDatabaseScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/database/ClearDatabaseScreen.kt index fa6f5574d..891bcdb03 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/database/ClearDatabaseScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/database/ClearDatabaseScreen.kt @@ -1,5 +1,6 @@ package eu.kanade.presentation.more.settings.database +import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.runtime.Composable import androidx.compose.ui.platform.LocalContext import eu.kanade.presentation.components.Scaffold @@ -17,6 +18,7 @@ fun ClearDatabaseScreen( navigateUp: () -> Unit, ) { val context = LocalContext.current + val lazyListState = rememberLazyListState() Scaffold( topBar = { scrollBehavior -> ClearDatabaseToolbar( @@ -30,6 +32,7 @@ fun ClearDatabaseScreen( floatingActionButton = { ClearDatabaseFloatingActionButton( isVisible = presenter.selection.isNotEmpty(), + lazyListState = lazyListState, onClickDelete = { presenter.dialog = ClearDatabasePresenter.Dialog.Delete(presenter.selection) }, @@ -39,6 +42,7 @@ fun ClearDatabaseScreen( ClearDatabaseContent( state = presenter, contentPadding = paddingValues, + lazyListState = lazyListState, onClickSelection = { source -> presenter.toggleSelection(source) }, diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/database/components/ClearDatabaseContent.kt b/app/src/main/java/eu/kanade/presentation/more/settings/database/components/ClearDatabaseContent.kt index 43f024184..fe9b3b085 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/database/components/ClearDatabaseContent.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/database/components/ClearDatabaseContent.kt @@ -5,6 +5,7 @@ import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.asPaddingValues import androidx.compose.foundation.layout.navigationBars +import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.items import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource @@ -19,12 +20,14 @@ import eu.kanade.tachiyomi.R fun ClearDatabaseContent( state: ClearDatabaseState, contentPadding: PaddingValues, + lazyListState: LazyListState, onClickSelection: (Source) -> Unit, ) { Crossfade(targetState = state.isEmpty.not()) { _state -> when (_state) { true -> FastScrollLazyColumn( contentPadding = contentPadding + WindowInsets.navigationBars.asPaddingValues(), + state = lazyListState, ) { items(state.items) { sourceWithCount -> ClearDatabaseItem( diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/database/components/ClearDatabaseFloatingActionButton.kt b/app/src/main/java/eu/kanade/presentation/more/settings/database/components/ClearDatabaseFloatingActionButton.kt index 1a13441d1..fe6b2bbdb 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/database/components/ClearDatabaseFloatingActionButton.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/database/components/ClearDatabaseFloatingActionButton.kt @@ -4,6 +4,7 @@ import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut import androidx.compose.foundation.layout.navigationBarsPadding +import androidx.compose.foundation.lazy.LazyListState import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Delete import androidx.compose.material3.Icon @@ -12,11 +13,14 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import eu.kanade.presentation.components.ExtendedFloatingActionButton +import eu.kanade.presentation.util.isScrolledToEnd +import eu.kanade.presentation.util.isScrollingUp import eu.kanade.tachiyomi.R @Composable fun ClearDatabaseFloatingActionButton( isVisible: Boolean, + lazyListState: LazyListState, onClickDelete: () -> Unit, ) { AnimatedVisibility( @@ -33,6 +37,7 @@ fun ClearDatabaseFloatingActionButton( Icon(Icons.Outlined.Delete, contentDescription = "") }, onClick = onClickDelete, + expanded = lazyListState.isScrollingUp() || lazyListState.isScrolledToEnd(), ) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadController.kt index ec46f6e63..332909596 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/download/DownloadController.kt @@ -174,20 +174,20 @@ class DownloadController : onDismissRequest = { onExpanded(false) }, ) { DropdownMenuItem( - text = { Text(text = stringResource(id = R.string.action_reorganize_by)) }, + text = { Text(text = stringResource(R.string.action_reorganize_by)) }, children = { DropdownMenuItem( - text = { Text(text = stringResource(id = R.string.action_order_by_upload_date)) }, + text = { Text(text = stringResource(R.string.action_order_by_upload_date)) }, children = { DropdownMenuItem( - text = { Text(text = stringResource(id = R.string.action_newest)) }, + text = { Text(text = stringResource(R.string.action_newest)) }, onClick = { reorderQueue({ it.download.chapter.date_upload }, true) onExpanded(false) }, ) DropdownMenuItem( - text = { Text(text = stringResource(id = R.string.action_oldest)) }, + text = { Text(text = stringResource(R.string.action_oldest)) }, onClick = { reorderQueue({ it.download.chapter.date_upload }, false) onExpanded(false) @@ -196,17 +196,17 @@ class DownloadController : }, ) DropdownMenuItem( - text = { Text(text = stringResource(id = R.string.action_order_by_chapter_number)) }, + text = { Text(text = stringResource(R.string.action_order_by_chapter_number)) }, children = { DropdownMenuItem( - text = { Text(text = stringResource(id = R.string.action_asc)) }, + text = { Text(text = stringResource(R.string.action_asc)) }, onClick = { reorderQueue({ it.download.chapter.chapter_number }, false) onExpanded(false) }, ) DropdownMenuItem( - text = { Text(text = stringResource(id = R.string.action_desc)) }, + text = { Text(text = stringResource(R.string.action_desc)) }, onClick = { reorderQueue({ it.download.chapter.chapter_number }, true) onExpanded(false) @@ -217,7 +217,7 @@ class DownloadController : }, ) DropdownMenuItem( - text = { Text(text = stringResource(id = R.string.action_cancel_all)) }, + text = { Text(text = stringResource(R.string.action_cancel_all)) }, onClick = { presenter.clearQueue(context) onExpanded(false)