Fix crashing issues with Screen

This commit is contained in:
Cuong-Tran 2024-06-22 22:36:23 +07:00
parent 1c61efd8e9
commit 2bbda8c0bd
No known key found for this signature in database
GPG key ID: 733AA7624B9315C2
5 changed files with 30 additions and 37 deletions

View file

@ -36,7 +36,6 @@ import dev.chrisbanes.haze.HazeState
import dev.chrisbanes.haze.hazeChild
import eu.kanade.domain.manga.model.hasCustomCover
import eu.kanade.domain.manga.model.toSManga
import eu.kanade.domain.ui.UiPreferences
import eu.kanade.presentation.category.components.ChangeCategoryDialog
import eu.kanade.presentation.components.NavigatorAdaptiveSheet
import eu.kanade.presentation.manga.ChapterSettingsDialog
@ -124,13 +123,6 @@ class MangaScreen(
override fun onProvideAssistUrl() = assistUrl
// KMK -->
private val uiPreferences = Injekt.get<UiPreferences>()
private val themeCoverBased = uiPreferences.themeCoverBased().get()
private val themeDarkAmoled = uiPreferences.themeDarkAmoled().get()
private val themeCoverBasedStyle = uiPreferences.themeCoverBasedStyle().get()
// KMK <--
@Composable
override fun Content() {
if (!ifSourcesLoaded()) {
@ -202,12 +194,12 @@ class MangaScreen(
}
val seedColor = successState.seedColor
if (themeCoverBased && seedColor != null) {
if (screenModel.themeCoverBased && seedColor != null) {
DynamicMaterialTheme(
seedColor = seedColor,
useDarkTheme = isSystemInDarkTheme(),
withAmoled = themeDarkAmoled,
style = themeCoverBasedStyle,
withAmoled = screenModel.themeDarkAmoled,
style = screenModel.themeCoverBasedStyle,
animate = true,
content = { content() },
)
@ -387,7 +379,9 @@ class MangaScreen(
navigator.push(ExtensionsScreen(searchSource = successState.source.name))
}
},
onCoverLoaded = { if (themeCoverBased || successState.manga.favorite) screenModel.setPaletteColor(it) },
onCoverLoaded = {
if (screenModel.themeCoverBased || successState.manga.favorite) screenModel.setPaletteColor(it)
},
onPaletteScreenClick = { navigator.push(PaletteScreen(successState.seedColor?.toArgb())) },
hazeState = hazeState,
// KMK <--
@ -691,7 +685,7 @@ class MangaScreen(
seedColor: Color?,
// KMK <--
) {
navigator.push(MetadataViewScreen(manga.id, manga.source, seedColor))
navigator.push(MetadataViewScreen(manga.id, manga.source, seedColor?.toArgb()))
}
private fun openMergedMangaWebview(context: Context, navigator: Navigator, mergedMangaData: MergedMangaData) {

View file

@ -223,6 +223,9 @@ class MangaScreenModel(
// KMK -->
val useNewSourceNavigation by uiPreferences.useNewSourceNavigation().asState(screenModelScope)
val themeCoverBased = uiPreferences.themeCoverBased().get()
val themeDarkAmoled = uiPreferences.themeDarkAmoled().get()
val themeCoverBasedStyle = uiPreferences.themeCoverBasedStyle().get()
// KMK <--
val manga: Manga?

View file

@ -10,7 +10,6 @@ import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.contentColorFor
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
@ -33,15 +32,13 @@ class PaletteScreen(
@ColorInt private val seedColor: Int?,
) : Screen() {
// KMK -->
private val uiPreferences = Injekt.get<UiPreferences>()
private val themeCoverBased = uiPreferences.themeCoverBased().get()
private val themeDarkAmoled = uiPreferences.themeDarkAmoled().get()
private val themeCoverBasedStyle = uiPreferences.themeCoverBasedStyle().get()
// KMK <--
@Composable
override fun Content() {
val uiPreferences = Injekt.get<UiPreferences>()
val themeCoverBased = uiPreferences.themeCoverBased().get()
val themeDarkAmoled = uiPreferences.themeDarkAmoled().get()
val themeCoverBasedStyle = uiPreferences.themeCoverBasedStyle().get()
val seedColor = seedColor?.let { Color(it) } ?: MaterialTheme.colorScheme.primary
if (themeCoverBased) {

View file

@ -1,5 +1,6 @@
package exh.ui.metadata
import androidx.annotation.ColorInt
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.WindowInsets
@ -24,7 +25,6 @@ import cafe.adriel.voyager.core.model.rememberScreenModel
import cafe.adriel.voyager.navigator.LocalNavigator
import cafe.adriel.voyager.navigator.currentOrThrow
import com.materialkolor.DynamicMaterialTheme
import eu.kanade.domain.ui.UiPreferences
import eu.kanade.presentation.components.AppBar
import eu.kanade.presentation.util.Screen
import eu.kanade.tachiyomi.util.system.copyToClipboard
@ -36,24 +36,14 @@ import tachiyomi.presentation.core.screens.EmptyScreen
import tachiyomi.presentation.core.screens.LoadingScreen
import tachiyomi.presentation.core.util.clickableNoIndication
import tachiyomi.presentation.core.util.plus
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
class MetadataViewScreen(
private val mangaId: Long,
private val sourceId: Long,
// KMK -->
private val seedColor: Color?,
@ColorInt private val seedColor: Int?,
// KMK <--
) : Screen() {
// KMK -->
private val uiPreferences = Injekt.get<UiPreferences>()
private val themeCoverBased = uiPreferences.themeCoverBased().get()
private val themeDarkAmoled = uiPreferences.themeDarkAmoled().get()
private val themeCoverBasedStyle = uiPreferences.themeCoverBasedStyle().get()
// KMK <--
@Composable
override fun Content() {
val screenModel = rememberScreenModel { MetadataViewScreenModel(mangaId, sourceId) }
@ -119,12 +109,12 @@ class MetadataViewScreen(
}
// KMK -->
if (themeCoverBased && seedColor != null) {
if (screenModel.themeCoverBased && seedColor != null) {
DynamicMaterialTheme(
seedColor = seedColor,
seedColor = Color(seedColor),
useDarkTheme = isSystemInDarkTheme(),
withAmoled = themeDarkAmoled,
style = themeCoverBasedStyle,
withAmoled = screenModel.themeDarkAmoled,
style = screenModel.themeCoverBasedStyle,
animate = true,
content = { content() },
)

View file

@ -2,6 +2,7 @@ package exh.ui.metadata
import cafe.adriel.voyager.core.model.StateScreenModel
import cafe.adriel.voyager.core.model.screenModelScope
import eu.kanade.domain.ui.UiPreferences
import eu.kanade.tachiyomi.source.online.MetadataSource
import exh.metadata.metadata.RaisedSearchMetadata
import exh.source.getMainSource
@ -22,6 +23,14 @@ class MetadataViewScreenModel(
private val sourceManager: SourceManager = Injekt.get(),
private val getManga: GetManga = Injekt.get(),
) : StateScreenModel<MetadataViewState>(MetadataViewState.Loading) {
// KMK -->
private val uiPreferences = Injekt.get<UiPreferences>()
val themeCoverBased = uiPreferences.themeCoverBased().get()
val themeDarkAmoled = uiPreferences.themeDarkAmoled().get()
val themeCoverBasedStyle = uiPreferences.themeCoverBasedStyle().get()
// KMK <--
private val _manga = MutableStateFlow<Manga?>(null)
val manga = _manga.asStateFlow()