diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/coil/MangaCoverMetadata.kt b/app/src/main/java/eu/kanade/tachiyomi/data/coil/MangaCoverMetadata.kt index a94b32dcf..b94412776 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/coil/MangaCoverMetadata.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/coil/MangaCoverMetadata.kt @@ -34,7 +34,7 @@ object MangaCoverMetadata { }.toMap(), ) val colors = preferences.coverColors().get() - MangaCover.coverColorMap = ConcurrentHashMap( + MangaCover.dominantCoverColorMap = ConcurrentHashMap( colors.mapNotNull { val splits = it.split("|") val id = splits.firstOrNull()?.toLongOrNull() @@ -54,7 +54,7 @@ object MangaCoverMetadata { * It's called along with [MangaCoverFetcher.fetch] everytime a cover is **displayed** (anywhere). * * When called: - * - It removes saved colors from saved Prefs of [MangaCover.coverColorMap] if manga is not favorite. + * - It removes saved colors from saved Prefs of [MangaCover.dominantCoverColorMap] if manga is not favorite. * - If a favorite manga already restored [MangaCover.dominantCoverColors] then it * will skip actually reading bitmap, only extract ratio. Except when [MangaCover.vibrantCoverColor] * is not loaded then it will read bitmap & extract vibrant color. @@ -145,13 +145,13 @@ object MangaCoverMetadata { fun MangaCover.remove() { MangaCover.coverRatioMap.remove(mangaId) - MangaCover.coverColorMap.remove(mangaId) + MangaCover.dominantCoverColorMap.remove(mangaId) } fun savePrefs() { val mapCopy = MangaCover.coverRatioMap.toMap() preferences.coverRatios().set(mapCopy.map { "${it.key}|${it.value}" }.toSet()) - val mapColorCopy = MangaCover.coverColorMap.toMap() + val mapColorCopy = MangaCover.dominantCoverColorMap.toMap() preferences.coverColors().set(mapColorCopy.map { "${it.key}|${it.value.first}|${it.value.second}" }.toSet()) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreen.kt index e0469d706..6ce8b5860 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreen.kt @@ -15,7 +15,6 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope -import androidx.compose.runtime.rememberUpdatedState import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier @@ -159,7 +158,6 @@ class MangaScreen( } val uiPreferences = remember { Injekt.get() } - val seedColorState = rememberUpdatedState(newValue = successState.seedColor) val content = @Composable { val slideDistance = rememberSlideDistance() @@ -196,7 +194,7 @@ class MangaScreen( } } - val seedColor = seedColorState.value + val seedColor = successState.seedColor if (uiPreferences.themeCoverBased().get() && seedColor != null) { DynamicMaterialTheme( seedColor = seedColor, diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt index eeba41aa8..13d1e228a 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt @@ -513,6 +513,9 @@ class MangaScreenModel( } val vibrantColor = it.getBestColor() ?: return@launchUI mangaCover.vibrantCoverColor = vibrantColor + updateSuccessState { + it.copy(seedColor = Color(vibrantColor)) + } } } } @@ -1887,11 +1890,10 @@ class MangaScreenModel( * a list of */ val relatedMangaCollection: List? = null, + val seedColor: Color? = manga.asMangaCover().vibrantCoverColor?.let { Color(it) } // KMK <-- ) : State { // KMK --> - val seedColor: Color? = MangaCover.vibrantCoverColorMap[manga.id]?.let { Color(it) } - /** * a value of null will be treated as still loading, so if all searching were failed and won't update * 'relatedMangaCollection` then we should return empty list diff --git a/domain/src/main/java/tachiyomi/domain/manga/model/MangaCover.kt b/domain/src/main/java/tachiyomi/domain/manga/model/MangaCover.kt index 6401a092c..83750db4d 100644 --- a/domain/src/main/java/tachiyomi/domain/manga/model/MangaCover.kt +++ b/domain/src/main/java/tachiyomi/domain/manga/model/MangaCover.kt @@ -42,7 +42,7 @@ data class MangaCover( * [dominantCoverColors] is used to set cover/text's color in Library (Favorite) grid view. * It contains only color for in-library (favorite) mangas. * - * It reads/saves to a hashmap in [MangaCover.coverColorMap]. + * It reads/saves to a hashmap in [MangaCover.dominantCoverColorMap]. * * Format: . * @@ -54,10 +54,10 @@ data class MangaCover( */ @Suppress("KDocUnresolvedReference") var dominantCoverColors: Pair? - get() = coverColorMap[mangaId] + get() = dominantCoverColorMap[mangaId] set(value) { value ?: return - coverColorMap[mangaId] = value.first to value.second + dominantCoverColorMap[mangaId] = value.first to value.second } var ratio: Float? @@ -66,6 +66,7 @@ data class MangaCover( value ?: return coverRatioMap[mangaId] = value } + companion object { /** * [vibrantCoverColorMap] store color generated while browsing library. @@ -74,13 +75,13 @@ data class MangaCover( val vibrantCoverColorMap: HashMap = hashMapOf() /** - * [coverColorMap] stores favorite manga's cover & text's color as a joined string in Prefs. + * [dominantCoverColorMap] stores favorite manga's cover & text's color as a joined string in Prefs. * They will be loaded each time *[App]* is initialized with *[MangaCoverMetadata.load]*. * * They will be saved back when *[MainActivity.onPause]* is triggered. */ @Suppress("KDocUnresolvedReference") - var coverColorMap = ConcurrentHashMap>() + var dominantCoverColorMap = ConcurrentHashMap>() var coverRatioMap = ConcurrentHashMap() // KMK <-- diff --git a/presentation-widget/src/main/java/tachiyomi/presentation/widget/components/UpdatesWidget.kt b/presentation-widget/src/main/java/tachiyomi/presentation/widget/components/UpdatesWidget.kt index 498ff5224..f71bc4d53 100644 --- a/presentation-widget/src/main/java/tachiyomi/presentation/widget/components/UpdatesWidget.kt +++ b/presentation-widget/src/main/java/tachiyomi/presentation/widget/components/UpdatesWidget.kt @@ -89,7 +89,7 @@ fun UpdatesWidget( cover = cover, modifier = GlanceModifier.clickable(actionStartActivity(intent)), // KMK --> - color = MangaCover.coverColorMap[mangaId]?.first?.let { Color(it) }, + color = MangaCover.dominantCoverColorMap[mangaId]?.first?.let { Color(it) }, // KMK <-- ) }