refactor: Update seedColor usage in ReaderActivity

- Using state to update seed color when there is change
- Fix: loading seed color in case manga is late to init
- improve: change chapter's slider's text color
This commit is contained in:
Cuong-Tran 2024-07-01 08:39:20 +07:00 committed by Tran M. Cuong
parent c49c4c9c6d
commit e25ff219eb
4 changed files with 41 additions and 14 deletions

View file

@ -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 <--

View file

@ -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 {

View file

@ -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
}

View file

@ -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)