diff --git a/app/src/main/java/eu/kanade/presentation/manga/components/MangaCover.kt b/app/src/main/java/eu/kanade/presentation/manga/components/MangaCover.kt index 80e55b317..602c67697 100644 --- a/app/src/main/java/eu/kanade/presentation/manga/components/MangaCover.kt +++ b/app/src/main/java/eu/kanade/presentation/manga/components/MangaCover.kt @@ -51,6 +51,7 @@ enum class MangaCover(val ratio: Float) { alpha: Float = 1f, bgColor: Color? = null, @ColorInt tint: Int? = null, + /** Perform action when cover loaded, specifically generating color map */ onCoverLoaded: ((DomainMangaCover) -> Unit)? = null, size: Size = Size.Normal, // KMK <-- diff --git a/app/src/main/java/eu/kanade/presentation/reader/components/ChapterNavigator.kt b/app/src/main/java/eu/kanade/presentation/reader/components/ChapterNavigator.kt index 6aae702e4..24890d080 100644 --- a/app/src/main/java/eu/kanade/presentation/reader/components/ChapterNavigator.kt +++ b/app/src/main/java/eu/kanade/presentation/reader/components/ChapterNavigator.kt @@ -83,6 +83,7 @@ fun ChapterNavigator( val backgroundColor = MaterialTheme.colorScheme .surfaceColorAtElevation(3.dp) .copy(alpha = if (isSystemInDarkTheme()) 0.9f else 0.95f) + val textColor = MaterialTheme.colorScheme.onSurface val buttonColor = IconButtonDefaults.filledIconButtonColors( containerColor = backgroundColor, disabledContainerColor = backgroundColor, @@ -123,7 +124,12 @@ fun ChapterNavigator( verticalAlignment = Alignment.CenterVertically, ) { // SY --> - Text(text = currentPageText) + Text( + text = currentPageText, + // KMK --> + color = textColor, + // KMK <-- + ) // SY <-- val interactionSource = remember { MutableInteractionSource() } @@ -146,7 +152,12 @@ fun ChapterNavigator( interactionSource = interactionSource, ) - Text(text = totalPages.toString()) + Text( + text = totalPages.toString(), + // KMK --> + color = textColor, + // KMK <-- + ) } } } else { 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 b94412776..67d90336d 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 @@ -100,7 +100,7 @@ object MangaCoverMetadata { * + [onlyDominantColor] = false * - Manga doesn't have vibrant color */ - options.inSampleSize = 4 + options.inSampleSize = SUB_SAMPLE } else { /** * + [onlyDominantColor] = true @@ -154,4 +154,6 @@ object MangaCoverMetadata { val mapColorCopy = MangaCover.dominantCoverColorMap.toMap() preferences.coverColors().set(mapColorCopy.map { "${it.key}|${it.value.first}|${it.value.second}" }.toSet()) } + + const val SUB_SAMPLE = 4 } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt index fe16bd8e2..032233914 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt @@ -125,6 +125,7 @@ import tachiyomi.core.common.util.lang.launchIO import tachiyomi.core.common.util.lang.launchNonCancellable import tachiyomi.core.common.util.lang.withUIContext import tachiyomi.core.common.util.system.logcat +import tachiyomi.domain.manga.model.MangaCover import tachiyomi.domain.manga.model.asMangaCover import tachiyomi.domain.source.service.SourceManager import tachiyomi.i18n.MR @@ -386,8 +387,6 @@ class ReaderActivity : BaseActivity() { */ private fun initializeMenu() { // KMK --> - val seedColor = viewModel.manga?.asMangaCover()?.vibrantCoverColor?.let { ComposeColor(it) } - @Composable fun pageNumberContent() { // KMK <-- @@ -407,7 +406,7 @@ class ReaderActivity : BaseActivity() { // KMK --> binding.pageNumber.setComposeContent { TachiyomiTheme( - seedColor = seedColor.takeIf { themeCoverBased } + seedColor = seedColorState().takeIf { themeCoverBased }, ) { pageNumberContent() } @@ -688,15 +687,15 @@ class ReaderActivity : BaseActivity() { // KMK --> binding.dialogRoot.setComposeContent { TachiyomiTheme( - seedColor = seedColor.takeIf { themeCoverBased } + seedColor = seedColorState().takeIf { themeCoverBased }, ) { dialogRootContent() } } - val colorScheme = seedColor?.let { + val colorScheme = seedColorStatic()?.let { dynamicColorScheme( - seedColor = seedColor, + seedColor = it, isDark = isNightMode(), isAmoled = themeDarkAmoled, style = themeCoverBasedStyle, @@ -725,6 +724,22 @@ class ReaderActivity : BaseActivity() { enableExhAutoScroll() } + // KMK --> + @Composable + private fun seedColorState(): ComposeColor? { + val state by viewModel.state.collectAsState() + return state.manga?.asMangaCover()?.vibrantCoverColor?.let { ComposeColor(it) } + ?: seedColorStatic() + } + + private fun seedColorStatic(): ComposeColor? { + return viewModel.manga?.asMangaCover()?.vibrantCoverColor?.let { ComposeColor(it) } + ?: intent.extras?.getLong("manga")?.takeIf { it > 0 } + ?.let { MangaCover.vibrantCoverColorMap[it] } + ?.let { ComposeColor(it) } + } + // KMK <-- + private fun enableExhAutoScroll() { readerPreferences.autoscrollInterval().changes() .combine(viewModel.state.map { it.autoScroll }.distinctUntilChanged()) { interval, enabled -> @@ -891,15 +906,12 @@ class ReaderActivity : BaseActivity() { * Called from the presenter when a manga is ready. Used to instantiate the appropriate viewer. */ private fun updateViewer() { - // KMK --> - val manga = viewModel.manga - // KMK <-- val prevViewer = viewModel.state.value.viewer val newViewer = ReadingMode.toViewer( viewModel.getMangaReadingMode(), this, // KMK --> - seedColor = manga?.asMangaCover()?.vibrantCoverColor, + seedColor = seedColorStatic()?.toArgb(), // KMK <-- ) @@ -929,6 +941,7 @@ class ReaderActivity : BaseActivity() { viewModel.state.value.lastShiftDoubleState?.let { newViewer.config.shiftDoublePage = it } } + val manga = viewModel.state.value.manga val defaultReaderType = manga?.defaultReaderType( manga.mangaType(sourceName = sourceManager.get(manga.source)?.name), ) @@ -948,7 +961,7 @@ class ReaderActivity : BaseActivity() { loadingIndicator = ReaderProgressIndicator( context = this, // KMK --> - seedColor = manga?.asMangaCover()?.vibrantCoverColor, + seedColor = seedColorStatic()?.toArgb(), // KMK <-- ) binding.readerContainer.addView(loadingIndicator)