From 54ae69eaa2e35c84817e937d88e8106c50bcaca5 Mon Sep 17 00:00:00 2001 From: NGB-Was-Taken <76197326+NGB-Was-Taken@users.noreply.github.com> Date: Tue, 28 Jul 2026 19:12:26 +0545 Subject: [PATCH] Remove workarounds for patched compose bugs (#3651) --- .../presentation/browse/ExtensionsScreen.kt | 7 ++- .../browse/SourcesFilterScreen.kt | 5 +-- .../category/components/CategoryDialogs.kt | 6 --- .../presentation/components/TabbedDialog.kt | 2 - .../presentation/history/HistoryScreen.kt | 5 +-- .../library/components/LibraryTabs.kt | 43 +++++++------------ .../manga/components/MangaCoverDialog.kt | 2 +- .../components/ExtensionStoresDialogs.kt | 4 -- .../presentation/updates/UpdatesUiItem.kt | 5 +-- .../util/FastScrollAnimateItem.kt | 10 ----- .../list/MigrationListScreenContent.kt | 3 +- 11 files changed, 27 insertions(+), 65 deletions(-) delete mode 100644 app/src/main/java/eu/kanade/presentation/util/FastScrollAnimateItem.kt diff --git a/app/src/main/java/eu/kanade/presentation/browse/ExtensionsScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/ExtensionsScreen.kt index b0da29a5a..914cb5e79 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/ExtensionsScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/ExtensionsScreen.kt @@ -48,7 +48,6 @@ import eu.kanade.presentation.browse.components.ExtensionIcon import eu.kanade.presentation.components.WarningBanner import eu.kanade.presentation.manga.components.DotSeparatorNoSpaceText import eu.kanade.presentation.more.settings.screen.browse.ExtensionStoresScreen -import eu.kanade.presentation.util.animateItemFastScroll import eu.kanade.presentation.util.rememberRequestPackageInstallsPermissionState import eu.kanade.tachiyomi.extension.model.Extension import eu.kanade.tachiyomi.extension.model.InstallStep @@ -187,14 +186,14 @@ private fun ExtensionContent( } ExtensionHeader( textRes = header.textRes, - modifier = Modifier.animateItemFastScroll(), + modifier = Modifier.animateItem(), action = action, ) } is ExtensionUiModel.Header.Text -> { ExtensionHeader( text = header.text, - modifier = Modifier.animateItemFastScroll(), + modifier = Modifier.animateItem(), ) } } @@ -212,7 +211,7 @@ private fun ExtensionContent( }, ) { item -> ExtensionItem( - modifier = Modifier.animateItemFastScroll(), + modifier = Modifier.animateItem(), item = item, onClickItem = { when (it) { diff --git a/app/src/main/java/eu/kanade/presentation/browse/SourcesFilterScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/SourcesFilterScreen.kt index 4bd89c9b0..cf2c1ac29 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/SourcesFilterScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/SourcesFilterScreen.kt @@ -10,7 +10,6 @@ import androidx.compose.ui.platform.LocalContext import eu.kanade.presentation.browse.components.BaseSourceItem import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.more.settings.widget.SwitchPreferenceWidget -import eu.kanade.presentation.util.animateItemFastScroll import eu.kanade.tachiyomi.ui.browse.source.SourcesFilterViewModel import eu.kanade.tachiyomi.util.system.LocaleHelper import tachiyomi.domain.source.model.Source @@ -69,7 +68,7 @@ private fun SourcesFilterContent( contentType = "source-filter-header", ) { SourcesFilterHeader( - modifier = Modifier.animateItemFastScroll(), + modifier = Modifier.animateItem(), language = language, enabled = enabled, onClickItem = onClickLanguage, @@ -82,7 +81,7 @@ private fun SourcesFilterContent( contentType = { "source-filter-item" }, ) { source -> SourcesFilterItem( - modifier = Modifier.animateItemFastScroll(), + modifier = Modifier.animateItem(), source = source, enabled = "${source.id}" !in state.disabledSources, onClickItem = onClickSource, 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 63cf5913a..38477acd0 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 @@ -27,13 +27,11 @@ import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester import eu.kanade.core.preference.asToggleableState import eu.kanade.presentation.category.visualName -import kotlinx.coroutines.delay import tachiyomi.core.common.preference.CheckboxState import tachiyomi.domain.category.model.Category import tachiyomi.i18n.MR import tachiyomi.presentation.core.components.material.padding import tachiyomi.presentation.core.i18n.stringResource -import kotlin.time.Duration.Companion.seconds @Composable fun CategoryCreateDialog( @@ -91,8 +89,6 @@ fun CategoryCreateDialog( ) LaunchedEffect(focusRequester) { - // TODO: https://issuetracker.google.com/issues/204502668 - delay(0.1.seconds) focusRequester.requestFocus() } } @@ -155,8 +151,6 @@ fun CategoryRenameDialog( ) LaunchedEffect(focusRequester) { - // TODO: https://issuetracker.google.com/issues/204502668 - delay(0.1.seconds) focusRequester.requestFocus() } } diff --git a/app/src/main/java/eu/kanade/presentation/components/TabbedDialog.kt b/app/src/main/java/eu/kanade/presentation/components/TabbedDialog.kt index d352302d0..3a3e6d85a 100644 --- a/app/src/main/java/eu/kanade/presentation/components/TabbedDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/components/TabbedDialog.kt @@ -58,7 +58,6 @@ fun TabbedDialog( modifier = Modifier.weight(1f), selectedTabIndex = pagerState.currentPage, containerColor = MaterialTheme.colorScheme.surfaceContainerHigh, - divider = {}, ) { tabTitles.fastForEachIndexed { index, tab -> Tab( @@ -72,7 +71,6 @@ fun TabbedDialog( tabOverflowMenuContent?.let { MoreMenu(it) } } - HorizontalDivider() HorizontalPager( modifier = Modifier.animateContentSize(), diff --git a/app/src/main/java/eu/kanade/presentation/history/HistoryScreen.kt b/app/src/main/java/eu/kanade/presentation/history/HistoryScreen.kt index 5289acdab..6199aca86 100644 --- a/app/src/main/java/eu/kanade/presentation/history/HistoryScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/history/HistoryScreen.kt @@ -18,7 +18,6 @@ import eu.kanade.presentation.components.SearchToolbar import eu.kanade.presentation.components.relativeDateText import eu.kanade.presentation.history.components.HistoryItem import eu.kanade.presentation.theme.TachiyomiPreviewTheme -import eu.kanade.presentation.util.animateItemFastScroll import eu.kanade.tachiyomi.ui.history.HistoryViewModel import tachiyomi.domain.history.model.HistoryWithRelations import tachiyomi.i18n.MR @@ -116,14 +115,14 @@ private fun HistoryScreenContent( when (item) { is HistoryUiModel.Header -> { ListGroupHeader( - modifier = Modifier.animateItemFastScroll(), + modifier = Modifier.animateItem(), text = relativeDateText(item.date), ) } is HistoryUiModel.Item -> { val value = item.item HistoryItem( - modifier = Modifier.animateItemFastScroll(), + modifier = Modifier.animateItem(), history = value, onClickCover = { onClickCover(value) }, onClickResume = { onClickResume(value) }, 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 6aa87a01e..395fd02bc 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 @@ -1,15 +1,11 @@ package eu.kanade.presentation.library.components -import androidx.compose.foundation.layout.Column import androidx.compose.foundation.pager.PagerState -import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.MaterialTheme import androidx.compose.material3.PrimaryScrollableTabRow import androidx.compose.material3.Tab import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp -import androidx.compose.ui.zIndex import eu.kanade.presentation.category.visualName import tachiyomi.domain.category.model.Category import tachiyomi.presentation.core.components.material.TabText @@ -22,29 +18,22 @@ internal fun LibraryTabs( onTabItemClick: (Int) -> Unit, ) { val currentPageIndex = pagerState.currentPage.coerceAtMost(categories.lastIndex) - Column(modifier = Modifier.zIndex(2f)) { - PrimaryScrollableTabRow( - selectedTabIndex = currentPageIndex, - edgePadding = 0.dp, - // TODO: use default when width is fixed upstream - // https://issuetracker.google.com/issues/242879624 - divider = {}, - ) { - categories.forEachIndexed { index, category -> - Tab( - selected = currentPageIndex == index, - onClick = { onTabItemClick(index) }, - text = { - TabText( - text = category.visualName, - badgeCount = getItemCountForCategory(category), - ) - }, - unselectedContentColor = MaterialTheme.colorScheme.onSurface, - ) - } + PrimaryScrollableTabRow( + selectedTabIndex = currentPageIndex, + edgePadding = 0.dp, + ) { + categories.forEachIndexed { index, category -> + Tab( + selected = currentPageIndex == index, + onClick = { onTabItemClick(index) }, + text = { + TabText( + text = category.visualName, + badgeCount = getItemCountForCategory(category), + ) + }, + unselectedContentColor = MaterialTheme.colorScheme.onSurface, + ) } - - HorizontalDivider() } } diff --git a/app/src/main/java/eu/kanade/presentation/manga/components/MangaCoverDialog.kt b/app/src/main/java/eu/kanade/presentation/manga/components/MangaCoverDialog.kt index c61a446d4..6df044638 100644 --- a/app/src/main/java/eu/kanade/presentation/manga/components/MangaCoverDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/manga/components/MangaCoverDialog.kt @@ -68,7 +68,7 @@ fun MangaCoverDialog( onDismissRequest = onDismissRequest, properties = DialogProperties( usePlatformDefaultWidth = false, - decorFitsSystemWindows = false, // Doesn't work https://issuetracker.google.com/issues/246909281 + decorFitsSystemWindows = false, ), ) { Scaffold( diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/browse/components/ExtensionStoresDialogs.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/browse/components/ExtensionStoresDialogs.kt index 19436f17a..9199fe5eb 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/browse/components/ExtensionStoresDialogs.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/browse/components/ExtensionStoresDialogs.kt @@ -20,10 +20,8 @@ import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.unit.dp -import kotlinx.coroutines.delay import tachiyomi.i18n.MR import tachiyomi.presentation.core.i18n.stringResource -import kotlin.time.Duration.Companion.seconds @Composable fun ExtensionStoreCreateDialog( @@ -94,8 +92,6 @@ fun ExtensionStoreCreateDialog( ) LaunchedEffect(focusRequester) { - // TODO: https://issuetracker.google.com/issues/204502668 - delay(0.1.seconds) focusRequester.requestFocus() } } diff --git a/app/src/main/java/eu/kanade/presentation/updates/UpdatesUiItem.kt b/app/src/main/java/eu/kanade/presentation/updates/UpdatesUiItem.kt index 96f21d2bd..2e1a1310b 100644 --- a/app/src/main/java/eu/kanade/presentation/updates/UpdatesUiItem.kt +++ b/app/src/main/java/eu/kanade/presentation/updates/UpdatesUiItem.kt @@ -37,7 +37,6 @@ import eu.kanade.presentation.manga.components.ChapterDownloadAction import eu.kanade.presentation.manga.components.ChapterDownloadIndicator import eu.kanade.presentation.manga.components.DotSeparatorText import eu.kanade.presentation.manga.components.MangaCover -import eu.kanade.presentation.util.animateItemFastScroll import eu.kanade.presentation.util.relativeTimeSpanString import eu.kanade.tachiyomi.data.download.model.Download import eu.kanade.tachiyomi.ui.updates.UpdatesItem @@ -92,14 +91,14 @@ internal fun LazyListScope.updatesUiItems( when (item) { is UpdatesUiModel.Header -> { ListGroupHeader( - modifier = Modifier.animateItemFastScroll(), + modifier = Modifier.animateItem(), text = relativeDateText(item.date), ) } is UpdatesUiModel.Item -> { val updatesItem = item.item UpdatesUiItem( - modifier = Modifier.animateItemFastScroll(), + modifier = Modifier.animateItem(), update = updatesItem.update, selected = updatesItem.selected, readProgress = updatesItem.update.lastPageRead diff --git a/app/src/main/java/eu/kanade/presentation/util/FastScrollAnimateItem.kt b/app/src/main/java/eu/kanade/presentation/util/FastScrollAnimateItem.kt deleted file mode 100644 index 9d24b8520..000000000 --- a/app/src/main/java/eu/kanade/presentation/util/FastScrollAnimateItem.kt +++ /dev/null @@ -1,10 +0,0 @@ -package eu.kanade.presentation.util - -import androidx.compose.foundation.lazy.LazyItemScope -import androidx.compose.ui.Modifier - -// https://issuetracker.google.com/352584409 -context(itemScope: LazyItemScope) -fun Modifier.animateItemFastScroll() = with(itemScope) { - this@animateItemFastScroll.animateItem(fadeInSpec = null, fadeOutSpec = null) -} diff --git a/app/src/main/java/mihon/feature/migration/list/MigrationListScreenContent.kt b/app/src/main/java/mihon/feature/migration/list/MigrationListScreenContent.kt index 436552d3a..d72abdca6 100644 --- a/app/src/main/java/mihon/feature/migration/list/MigrationListScreenContent.kt +++ b/app/src/main/java/mihon/feature/migration/list/MigrationListScreenContent.kt @@ -51,7 +51,6 @@ import androidx.compose.ui.unit.dp import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBarActions import eu.kanade.presentation.manga.components.MangaCover -import eu.kanade.presentation.util.animateItemFastScroll import eu.kanade.presentation.util.formatChapterNumber import eu.kanade.presentation.util.rememberResourceBitmapPainter import eu.kanade.tachiyomi.R @@ -114,7 +113,7 @@ fun MigrationListScreenContent( Row( Modifier .fillMaxWidth() - .animateItemFastScroll() + .animateItem() .padding( start = MaterialTheme.padding.medium, end = MaterialTheme.padding.small,