refactor: leverage DynamicMaterialTheme with TachiyomiTheme

This commit is contained in:
Cuong-Tran 2024-06-24 16:39:33 +07:00
parent 5d6aa7f98a
commit a4ded07f6f
9 changed files with 67 additions and 107 deletions

View file

@ -5,7 +5,9 @@ import androidx.compose.material3.ColorScheme
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.ReadOnlyComposable
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import com.materialkolor.DynamicMaterialTheme
import eu.kanade.domain.ui.UiPreferences
import eu.kanade.domain.ui.model.AppTheme
import eu.kanade.presentation.theme.colorscheme.BaseColorScheme
@ -38,6 +40,37 @@ fun TachiyomiTheme(
)
}
@Composable
fun TachiyomiTheme(
appTheme: AppTheme? = null,
amoled: Boolean? = null,
// KMK -->
seedColor: Color?,
// KMK <--
content: @Composable () -> Unit,
) {
val uiPreferences = Injekt.get<UiPreferences>()
// KMK -->
val isAmoled = amoled ?: uiPreferences.themeDarkAmoled().get()
if (seedColor != null) {
DynamicMaterialTheme(
seedColor = seedColor,
useDarkTheme = isSystemInDarkTheme(),
withAmoled = isAmoled,
style = uiPreferences.themeCoverBasedStyle().get(),
animate = true,
content = content,
)
} else {
// KMK <--
BaseTachiyomiTheme(
appTheme = appTheme ?: uiPreferences.appTheme().get(),
isAmoled = isAmoled,
content = content,
)
}
}
@Composable
fun TachiyomiPreviewTheme(
appTheme: AppTheme = AppTheme.DEFAULT,

View file

@ -6,7 +6,6 @@ import androidx.activity.compose.BackHandler
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.animation.AnimatedContent
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.systemBarsPadding
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
@ -31,7 +30,6 @@ import cafe.adriel.voyager.navigator.LocalNavigator
import cafe.adriel.voyager.navigator.Navigator
import cafe.adriel.voyager.navigator.currentOrThrow
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.materialkolor.DynamicMaterialTheme
import dev.chrisbanes.haze.HazeState
import dev.chrisbanes.haze.hazeChild
import eu.kanade.domain.manga.model.hasCustomCover
@ -46,6 +44,7 @@ import eu.kanade.presentation.manga.components.DeleteChaptersDialog
import eu.kanade.presentation.manga.components.MangaCoverDialog
import eu.kanade.presentation.manga.components.ScanlatorFilterDialog
import eu.kanade.presentation.manga.components.SetIntervalDialog
import eu.kanade.presentation.theme.TachiyomiTheme
import eu.kanade.presentation.util.AssistContentScreen
import eu.kanade.presentation.util.Screen
import eu.kanade.presentation.util.isTabletUi
@ -194,16 +193,9 @@ class MangaScreen(
}
val seedColor = successState.seedColor
if (screenModel.themeCoverBased && seedColor != null) {
DynamicMaterialTheme(
seedColor = seedColor,
useDarkTheme = isSystemInDarkTheme(),
withAmoled = screenModel.themeDarkAmoled,
style = screenModel.themeCoverBasedStyle,
animate = true,
content = { content() },
)
} else {
TachiyomiTheme(
seedColor = seedColor.takeIf { screenModel.themeCoverBased }
) {
content()
}

View file

@ -224,8 +224,6 @@ 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

@ -1,7 +1,6 @@
package eu.kanade.tachiyomi.ui.manga
import androidx.annotation.ColorInt
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
@ -14,9 +13,9 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
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.theme.TachiyomiTheme
import eu.kanade.presentation.util.Screen
import tachiyomi.presentation.core.components.ScrollbarLazyColumn
import tachiyomi.presentation.core.components.material.Button
@ -36,21 +35,12 @@ class PaletteScreen(
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) {
DynamicMaterialTheme(
seedColor = seedColor,
useDarkTheme = isSystemInDarkTheme(),
withAmoled = themeDarkAmoled,
style = themeCoverBasedStyle,
animate = true,
content = { MaterialThemeContent(seedColor) },
)
} else {
TachiyomiTheme(
seedColor = seedColor.takeIf { themeCoverBased }
) {
MaterialThemeContent(seedColor)
}
}

View file

@ -20,7 +20,6 @@ import android.view.View.LAYER_TYPE_HARDWARE
import android.view.WindowManager
import android.widget.Toast
import androidx.activity.viewModels
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Row
import androidx.compose.material3.AlertDialog
@ -52,7 +51,6 @@ import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
import com.google.android.material.elevation.SurfaceColors
import com.google.android.material.transition.platform.MaterialContainerTransform
import com.hippo.unifile.UniFile
import com.materialkolor.DynamicMaterialTheme
import com.materialkolor.dynamicColorScheme
import dev.chrisbanes.insetter.applyInsetter
import eu.kanade.domain.base.BasePreferences
@ -68,6 +66,7 @@ import eu.kanade.presentation.reader.ReadingModeSelectDialog
import eu.kanade.presentation.reader.appbars.NavBarType
import eu.kanade.presentation.reader.appbars.ReaderAppBars
import eu.kanade.presentation.reader.settings.ReaderSettingsDialog
import eu.kanade.presentation.theme.TachiyomiTheme
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.coil.TachiyomiImageDecoder
import eu.kanade.tachiyomi.data.notification.NotificationReceiver
@ -407,16 +406,9 @@ class ReaderActivity : BaseActivity() {
// KMK -->
binding.pageNumber.setComposeContent {
if (themeCoverBased && seedColor != null) {
DynamicMaterialTheme(
seedColor = seedColor,
useDarkTheme = isSystemInDarkTheme(),
withAmoled = themeDarkAmoled,
style = themeCoverBasedStyle,
animate = true,
content = { pageNumberContent() },
)
} else {
TachiyomiTheme(
seedColor = seedColor.takeIf { themeCoverBased }
) {
pageNumberContent()
}
}
@ -695,16 +687,9 @@ class ReaderActivity : BaseActivity() {
// KMK -->
binding.dialogRoot.setComposeContent {
if (themeCoverBased && seedColor != null) {
DynamicMaterialTheme(
seedColor = seedColor,
useDarkTheme = isSystemInDarkTheme(),
withAmoled = themeDarkAmoled,
style = themeCoverBasedStyle,
animate = true,
content = { dialogRootContent() },
)
} else {
TachiyomiTheme(
seedColor = seedColor.takeIf { themeCoverBased }
) {
dialogRootContent()
}
}

View file

@ -7,7 +7,6 @@ import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
import android.widget.FrameLayout
import androidx.annotation.ColorInt
import androidx.annotation.IntRange
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
@ -18,7 +17,6 @@ import androidx.compose.ui.platform.AbstractComposeView
import androidx.compose.ui.platform.ViewCompositionStrategy
import androidx.core.view.isVisible
import com.google.android.material.progressindicator.CircularProgressIndicator
import com.materialkolor.DynamicMaterialTheme
import eu.kanade.domain.ui.UiPreferences
import eu.kanade.presentation.theme.TachiyomiTheme
import tachiyomi.presentation.core.components.CombinedCircularProgressIndicator
@ -50,23 +48,14 @@ class ReaderProgressIndicator @JvmOverloads constructor(
override fun Content() {
// KMK -->
val uiPreferences = Injekt.get<UiPreferences>()
val themeDarkAmoled = uiPreferences.themeDarkAmoled().get()
val themeCoverBasedStyle = uiPreferences.themeCoverBasedStyle().get()
if (seedColor != null) {
DynamicMaterialTheme(
seedColor = Color(seedColor),
useDarkTheme = isSystemInDarkTheme(),
withAmoled = themeDarkAmoled,
style = themeCoverBasedStyle,
animate = true,
) {
CombinedCircularProgressIndicator(progress = { progress })
}
} else {
val themeCoverBased = uiPreferences.themeCoverBased().get()
// KMK <--
TachiyomiTheme(
// KMK -->
seedColor = seedColor?.let { Color(seedColor) }.takeIf { themeCoverBased }
// KMK <--
TachiyomiTheme {
CombinedCircularProgressIndicator(progress = { progress })
}
) {
CombinedCircularProgressIndicator(progress = { progress })
}
}

View file

@ -3,7 +3,6 @@ package eu.kanade.tachiyomi.ui.reader.viewer
import android.content.Context
import android.util.AttributeSet
import androidx.annotation.ColorInt
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.LocalTextStyle
import androidx.compose.material3.MaterialTheme
@ -14,7 +13,6 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.AbstractComposeView
import com.materialkolor.DynamicMaterialTheme
import eu.kanade.domain.ui.UiPreferences
import eu.kanade.presentation.reader.ChapterTransition
import eu.kanade.presentation.theme.TachiyomiTheme
@ -64,9 +62,14 @@ class ReaderTransitionView @JvmOverloads constructor(
override fun Content() {
data?.let {
// KMK -->
@Composable
fun content() {
val uiPreferences = Injekt.get<UiPreferences>()
val themeCoverBased = uiPreferences.themeCoverBased().get()
// KMK <--
TachiyomiTheme(
// KMK -->
seedColor = seedColor?.let { Color(seedColor) }.takeIf { themeCoverBased }
// KMK <--
) {
CompositionLocalProvider(
LocalTextStyle provides MaterialTheme.typography.bodySmall,
LocalContentColor provides MaterialTheme.colorScheme.onBackground,
@ -78,26 +81,6 @@ class ReaderTransitionView @JvmOverloads constructor(
)
}
}
// KMK -->
val uiPreferences = Injekt.get<UiPreferences>()
val themeDarkAmoled = uiPreferences.themeDarkAmoled().get()
val themeCoverBasedStyle = uiPreferences.themeCoverBasedStyle().get()
if (seedColor != null) {
DynamicMaterialTheme(
seedColor = Color(seedColor),
useDarkTheme = isSystemInDarkTheme(),
withAmoled = themeDarkAmoled,
style = themeCoverBasedStyle,
animate = true,
) {
content()
}
} else {
// KMK <--
TachiyomiTheme {
content()
}
}
}
}

View file

@ -1,7 +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
import androidx.compose.foundation.layout.asPaddingValues
@ -24,8 +23,8 @@ import androidx.compose.ui.unit.dp
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.presentation.components.AppBar
import eu.kanade.presentation.theme.TachiyomiTheme
import eu.kanade.presentation.util.Screen
import eu.kanade.tachiyomi.util.system.copyToClipboard
import tachiyomi.i18n.MR
@ -109,18 +108,11 @@ class MetadataViewScreen(
}
// KMK -->
if (screenModel.themeCoverBased && seedColor != null) {
DynamicMaterialTheme(
seedColor = Color(seedColor),
useDarkTheme = isSystemInDarkTheme(),
withAmoled = screenModel.themeDarkAmoled,
style = screenModel.themeCoverBasedStyle,
animate = true,
content = { content() },
)
} else {
TachiyomiTheme(
seedColor = seedColor?.let { Color(seedColor) }.takeIf { screenModel.themeCoverBased }
) {
// KMK <--
content()
}
// KMK <--
}
}

View file

@ -27,8 +27,6 @@ class MetadataViewScreenModel(
// 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)