diff --git a/app/src/main/java/eu/kanade/presentation/browse/ExtensionDetailsScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/ExtensionDetailsScreen.kt index e210e738b..891def30f 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/ExtensionDetailsScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/ExtensionDetailsScreen.kt @@ -221,7 +221,7 @@ private fun ExtensionDetails( items( items = sources, - key = { it.source.id }, + key = { "extension-details-${it.source.id}" }, ) { source -> SourceSwitchPreference( modifier = Modifier.animateItemPlacement(), diff --git a/app/src/main/java/eu/kanade/presentation/browse/FeedScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/FeedScreen.kt index f4785b65b..8a5082a93 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/FeedScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/FeedScreen.kt @@ -104,7 +104,7 @@ fun FeedScreen( ) { items( state.items.orEmpty(), - key = { it.feed.id }, + key = { "feed-${it.feed.id}" }, ) { item -> GlobalSearchResultItem( modifier = Modifier.animateItemPlacement(), diff --git a/app/src/main/java/eu/kanade/presentation/browse/GlobalSearchScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/GlobalSearchScreen.kt index 4f7a618ec..bfd04d5cd 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/GlobalSearchScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/GlobalSearchScreen.kt @@ -119,7 +119,7 @@ internal fun GlobalSearchContent( contentPadding = contentPadding, ) { items.forEach { (source, result) -> - item(key = source.id) { + item(key = "global-search-${source.id}") { // KMK --> val domainSource = DomainSource( source.id, diff --git a/app/src/main/java/eu/kanade/presentation/browse/MigrationListScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/MigrationListScreen.kt index a9d3547c9..3cb83a6d9 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/MigrationListScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/MigrationListScreen.kt @@ -10,7 +10,6 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.items import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.ArrowForward -import androidx.compose.material.icons.outlined.ArrowForward import androidx.compose.material.icons.outlined.ContentCopy import androidx.compose.material.icons.outlined.CopyAll import androidx.compose.material.icons.outlined.Done @@ -91,7 +90,7 @@ fun MigrationListScreen( ScrollbarLazyColumn( contentPadding = contentPadding + topSmallPaddingValues, ) { - items(items, key = { it.manga.id }) { migrationItem -> + items(items, key = { "migration-list-${it.manga.id}" }) { migrationItem -> Row( Modifier .fillMaxWidth() diff --git a/app/src/main/java/eu/kanade/presentation/browse/SourceFeedScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/SourceFeedScreen.kt index d4d1add65..1e41b1044 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/SourceFeedScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/SourceFeedScreen.kt @@ -205,7 +205,7 @@ fun SourceFeedList( ) { items( items, - key = { it.id }, + key = { "source-feed-${it.id}" }, ) { item -> GlobalSearchResultItem( modifier = Modifier.animateItemPlacement(), diff --git a/app/src/main/java/eu/kanade/presentation/browse/SourcesScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/SourcesScreen.kt index b0bf852cd..c6fde4b64 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/SourcesScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/SourcesScreen.kt @@ -131,7 +131,7 @@ fun SourcesScreen( }, key = { when (it) { - is SourceUiModel.Header -> it.hashCode() + is SourceUiModel.Header -> "header-${it.hashCode()}" is SourceUiModel.Item -> "source-${it.source.key()}" } }, diff --git a/app/src/main/java/eu/kanade/presentation/browse/components/RelatedMangasComfortableGrid.kt b/app/src/main/java/eu/kanade/presentation/browse/components/RelatedMangasComfortableGrid.kt index ce275b176..b07b82c5a 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/components/RelatedMangasComfortableGrid.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/components/RelatedMangasComfortableGrid.kt @@ -47,7 +47,7 @@ fun RelatedMangasComfortableGrid( relatedMangas.forEach { related -> val isLoading = related is RelatedManga.Loading if (isLoading) { - header(key = "$related#header") { + header(key = "${related.hashCode()}#header") { RelatedMangaTitle( title = stringResource(MR.strings.loading), subtitle = null, @@ -56,11 +56,11 @@ fun RelatedMangasComfortableGrid( modifier = Modifier.background(MaterialTheme.colorScheme.background), ) } - header(key = "$related#content") { RelatedMangasLoadingItem() } + header(key = "${related.hashCode()}#content") { RelatedMangasLoadingItem() } } else { val relatedManga = related as RelatedManga.Success - header(key = "${related.keyword}#divider") { HorizontalDivider() } - header(key = "${related.keyword}#header") { + header(key = "${related.hashCode()}#divider") { HorizontalDivider() } + header(key = "${related.hashCode()}#header") { RelatedMangaTitle( title = if (relatedManga.keyword.isNotBlank()) { stringResource(KMR.strings.related_mangas_more) @@ -77,7 +77,10 @@ fun RelatedMangasComfortableGrid( modifier = Modifier.background(MaterialTheme.colorScheme.background), ) } - items(key = { relatedManga.mangaList[it].id }, count = relatedManga.mangaList.size) { index -> + items( + key = { "related-comfort-${relatedManga.mangaList[it].id}" }, + count = relatedManga.mangaList.size, + ) { index -> val manga by getManga(relatedManga.mangaList[index]) BrowseSourceComfortableGridItem( manga = manga, diff --git a/app/src/main/java/eu/kanade/presentation/browse/components/RelatedMangasCompactGrid.kt b/app/src/main/java/eu/kanade/presentation/browse/components/RelatedMangasCompactGrid.kt index 5f247ee1b..f64393937 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/components/RelatedMangasCompactGrid.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/components/RelatedMangasCompactGrid.kt @@ -47,7 +47,7 @@ fun RelatedMangasCompactGrid( relatedMangas.forEach { related -> val isLoading = related is RelatedManga.Loading if (isLoading) { - header(key = "$related#header") { + header(key = "${related.hashCode()}#header") { RelatedMangaTitle( title = stringResource(MR.strings.loading), subtitle = null, @@ -56,11 +56,11 @@ fun RelatedMangasCompactGrid( modifier = Modifier.background(MaterialTheme.colorScheme.background), ) } - header(key = "$related#content") { RelatedMangasLoadingItem() } + header(key = "${related.hashCode()}#content") { RelatedMangasLoadingItem() } } else { val relatedManga = related as RelatedManga.Success - header(key = "${related.keyword}#divider") { HorizontalDivider() } - header(key = "${related.keyword}#header") { + header(key = "${related.hashCode()}#divider") { HorizontalDivider() } + header(key = "${related.hashCode()}#header") { RelatedMangaTitle( title = if (relatedManga.keyword.isNotBlank()) { stringResource(KMR.strings.related_mangas_more) @@ -77,7 +77,10 @@ fun RelatedMangasCompactGrid( modifier = Modifier.background(MaterialTheme.colorScheme.background), ) } - items(key = { relatedManga.mangaList[it].id }, count = relatedManga.mangaList.size) { index -> + items( + key = { "related-compact-${relatedManga.mangaList[it].id}" }, + count = relatedManga.mangaList.size, + ) { index -> val manga by getManga(relatedManga.mangaList[index]) BrowseSourceCompactGridItem( manga = manga, diff --git a/app/src/main/java/eu/kanade/presentation/browse/components/RelatedMangasList.kt b/app/src/main/java/eu/kanade/presentation/browse/components/RelatedMangasList.kt index 3e67ee726..5b1adbe04 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/components/RelatedMangasList.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/components/RelatedMangasList.kt @@ -39,8 +39,8 @@ fun RelatedMangasList( relatedMangas.forEach { related -> val isLoading = related is RelatedManga.Loading if (isLoading) { - item(key = "$related#divider") { HorizontalDivider() } - stickyHeader(key = "$STICKY_HEADER_KEY_PREFIX$related#header") { + item(key = "${related.hashCode()}#divider") { HorizontalDivider() } + stickyHeader(key = "$STICKY_HEADER_KEY_PREFIX${related.hashCode()}#header") { RelatedMangaTitle( title = stringResource(MR.strings.loading), subtitle = null, @@ -54,11 +54,11 @@ fun RelatedMangasList( .background(MaterialTheme.colorScheme.background), ) } - item(key = "$related#content") { RelatedMangasLoadingItem() } + item(key = "${related.hashCode()}#content") { RelatedMangasLoadingItem() } } else { val relatedManga = related as RelatedManga.Success - item(key = "${related.keyword}#divider") { HorizontalDivider() } - stickyHeader(key = "$STICKY_HEADER_KEY_PREFIX${related.keyword}#header") { + item(key = "${related.hashCode()}#divider") { HorizontalDivider() } + stickyHeader(key = "$STICKY_HEADER_KEY_PREFIX${related.hashCode()}#header") { RelatedMangaTitle( title = if (relatedManga.keyword.isNotBlank()) { stringResource(KMR.strings.related_mangas_more) @@ -80,7 +80,10 @@ fun RelatedMangasList( .background(MaterialTheme.colorScheme.background), ) } - items(key = { relatedManga.mangaList[it].id }, count = relatedManga.mangaList.size) { index -> + items( + key = { "related-list-${relatedManga.mangaList[it].id}" }, + count = relatedManga.mangaList.size, + ) { index -> val manga by getManga(relatedManga.mangaList[index]) BrowseSourceListItem( manga = manga, diff --git a/app/src/main/java/eu/kanade/presentation/category/components/biometric/BiometricTimesContent.kt b/app/src/main/java/eu/kanade/presentation/category/components/biometric/BiometricTimesContent.kt index d8465e295..96ed884ca 100644 --- a/app/src/main/java/eu/kanade/presentation/category/components/biometric/BiometricTimesContent.kt +++ b/app/src/main/java/eu/kanade/presentation/category/components/biometric/BiometricTimesContent.kt @@ -24,7 +24,7 @@ fun BiometricTimesContent( contentPadding = paddingValues, verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small), ) { - items(timeRanges, key = { it.formattedString }) { timeRange -> + items(timeRanges, key = { "biometric-${it.formattedString}" }) { timeRange -> BiometricTimesListItem( modifier = Modifier.animateItemPlacement(), timeRange = timeRange, diff --git a/app/src/main/java/eu/kanade/presentation/category/components/genre/SortTagContent.kt b/app/src/main/java/eu/kanade/presentation/category/components/genre/SortTagContent.kt index 4700e1883..c89f60059 100644 --- a/app/src/main/java/eu/kanade/presentation/category/components/genre/SortTagContent.kt +++ b/app/src/main/java/eu/kanade/presentation/category/components/genre/SortTagContent.kt @@ -25,7 +25,7 @@ fun SortTagContent( contentPadding = paddingValues, verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small), ) { - itemsIndexed(tags, key = { _, tag -> tag }) { index, tag -> + itemsIndexed(tags, key = { _, tag -> "sort-tag-$tag" }) { index, tag -> SortTagListItem( modifier = Modifier.animateItemPlacement(), tag = tag, diff --git a/app/src/main/java/eu/kanade/presentation/category/components/sources/SourceCategoryContent.kt b/app/src/main/java/eu/kanade/presentation/category/components/sources/SourceCategoryContent.kt index 2f5b26b3e..d2c8d74e1 100644 --- a/app/src/main/java/eu/kanade/presentation/category/components/sources/SourceCategoryContent.kt +++ b/app/src/main/java/eu/kanade/presentation/category/components/sources/SourceCategoryContent.kt @@ -24,7 +24,7 @@ fun SourceCategoryContent( contentPadding = paddingValues, verticalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small), ) { - items(categories, key = { it }) { category -> + items(categories, key = { "source-category-$it" }) { category -> SourceCategoryListItem( modifier = Modifier.animateItemPlacement(), category = category, diff --git a/app/src/main/java/eu/kanade/presentation/manga/components/PagePreviews.kt b/app/src/main/java/eu/kanade/presentation/manga/components/PagePreviews.kt index 41c6a8528..14dbfc706 100644 --- a/app/src/main/java/eu/kanade/presentation/manga/components/PagePreviews.kt +++ b/app/src/main/java/eu/kanade/presentation/manga/components/PagePreviews.kt @@ -147,7 +147,7 @@ fun LazyListScope.PagePreviewItems( pagePreviewState is PagePreviewState.Success -> { val itemPerRowCount = (maxWidth / 120.dp).floor() items( - key = { "${MangaScreenItem.CHAPTER_PREVIEW_ROW}-$it" }, + key = { "${MangaScreenItem.CHAPTER_PREVIEW_ROW}-${it.hashCode()}" }, contentType = { MangaScreenItem.CHAPTER_PREVIEW_ROW }, items = pagePreviewState.pagePreviews.take(rowCount * itemPerRowCount).chunked(itemPerRowCount), ) { diff --git a/app/src/main/java/eu/kanade/presentation/manga/components/RelatedMangas.kt b/app/src/main/java/eu/kanade/presentation/manga/components/RelatedMangas.kt index 39f69bdb2..162951a91 100644 --- a/app/src/main/java/eu/kanade/presentation/manga/components/RelatedMangas.kt +++ b/app/src/main/java/eu/kanade/presentation/manga/components/RelatedMangas.kt @@ -64,7 +64,7 @@ fun RelatedMangaCardRow( contentPadding = PaddingValues(MaterialTheme.padding.small), horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.extraSmall), ) { - items(mangas, key = { it.id }) { + items(mangas, key = { "related-row-${it.id}" }) { val manga by getManga(it) MangaItem( title = manga.title, diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsMainScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsMainScreen.kt index 9db1e8afb..a1f687268 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsMainScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsMainScreen.kt @@ -133,7 +133,7 @@ object SettingsMainScreen : Screen() { ) { itemsIndexed( items = items, - key = { _, item -> item.hashCode() }, + key = { _, item -> "settings-main-${item.hashCode()}" }, ) { index, item -> val selected = indexSelected == index var modifier: Modifier = Modifier diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSearchScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSearchScreen.kt index 4ab52655e..3236ee934 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSearchScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSearchScreen.kt @@ -232,7 +232,7 @@ private fun SearchResult( ) { items( items = it, - key = { i -> i.hashCode() }, + key = { i -> "settings-search-${i.hashCode()}" }, ) { item -> Column( modifier = Modifier diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/widget/AppThemePreferenceWidget.kt b/app/src/main/java/eu/kanade/presentation/more/settings/widget/AppThemePreferenceWidget.kt index 5e3f76efe..d3705b792 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/widget/AppThemePreferenceWidget.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/widget/AppThemePreferenceWidget.kt @@ -90,7 +90,7 @@ private fun AppThemesList( ) { items( items = appThemes, - key = { it.name }, + key = { "theme-${it.name}" }, ) { appTheme -> Column( modifier = Modifier diff --git a/app/src/main/java/eu/kanade/presentation/reader/ChapterListDialog.kt b/app/src/main/java/eu/kanade/presentation/reader/ChapterListDialog.kt index a3f4a9560..65120ce7c 100644 --- a/app/src/main/java/eu/kanade/presentation/reader/ChapterListDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/reader/ChapterListDialog.kt @@ -50,7 +50,7 @@ fun ChapterListDialog( ) { items( items = chapters, - key = { "chapter-${it.chapter.id}" }, + key = { "chapter-list-${it.chapter.id}" }, ) { chapterItem -> MangaChapterListItem( title = chapterItem.chapter.name, diff --git a/app/src/main/java/eu/kanade/presentation/track/TrackerSearch.kt b/app/src/main/java/eu/kanade/presentation/track/TrackerSearch.kt index ef158218f..1362de9fd 100644 --- a/app/src/main/java/eu/kanade/presentation/track/TrackerSearch.kt +++ b/app/src/main/java/eu/kanade/presentation/track/TrackerSearch.kt @@ -195,7 +195,7 @@ fun TrackerSearch( ) { items( items = availableTracks, - key = { it.hashCode() }, + key = { "tracker-search-${it.hashCode()}" }, ) { SearchResultItem( trackSearch = it, diff --git a/app/src/main/java/exh/ui/batchadd/BatchAddScreen.kt b/app/src/main/java/exh/ui/batchadd/BatchAddScreen.kt index 0ee8e6be9..35fb87048 100644 --- a/app/src/main/java/exh/ui/batchadd/BatchAddScreen.kt +++ b/app/src/main/java/exh/ui/batchadd/BatchAddScreen.kt @@ -125,7 +125,7 @@ class BatchAddScreen : Screen() { } itemsIndexed( state.events, - key = { index, text -> index + text.hashCode() }, + key = { index, text -> "batch-add-${index + text.hashCode()}" }, ) { _, text -> Text( text = text,