From a4ded07f6f7f42d07eaf04acb9a5fcf93e7136bf Mon Sep 17 00:00:00 2001 From: Cuong-Tran Date: Mon, 24 Jun 2024 16:39:33 +0700 Subject: [PATCH] refactor: leverage DynamicMaterialTheme with TachiyomiTheme --- .../presentation/theme/TachiyomiTheme.kt | 33 +++++++++++++++++++ .../kanade/tachiyomi/ui/manga/MangaScreen.kt | 16 +++------ .../tachiyomi/ui/manga/MangaScreenModel.kt | 2 -- .../tachiyomi/ui/manga/PaletteScreen.kt | 18 +++------- .../tachiyomi/ui/reader/ReaderActivity.kt | 29 ++++------------ .../reader/viewer/ReaderProgressIndicator.kt | 25 ++++---------- .../ui/reader/viewer/ReaderTransitionView.kt | 31 ++++------------- .../exh/ui/metadata/MetadataViewScreen.kt | 18 +++------- .../ui/metadata/MetadataViewScreenModel.kt | 2 -- 9 files changed, 67 insertions(+), 107 deletions(-) diff --git a/app/src/main/java/eu/kanade/presentation/theme/TachiyomiTheme.kt b/app/src/main/java/eu/kanade/presentation/theme/TachiyomiTheme.kt index af550aa5d..331f4b32f 100644 --- a/app/src/main/java/eu/kanade/presentation/theme/TachiyomiTheme.kt +++ b/app/src/main/java/eu/kanade/presentation/theme/TachiyomiTheme.kt @@ -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() + // 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, 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 f109b8ee2..a7c62cc96 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 @@ -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() } 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 ef15a8677..b1e2ed4f8 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 @@ -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? diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/PaletteScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/PaletteScreen.kt index 0c200365d..01355b19a 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/PaletteScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/PaletteScreen.kt @@ -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() 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) } } 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 8b27cdfdb..fe16bd8e2 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 @@ -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() } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ReaderProgressIndicator.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ReaderProgressIndicator.kt index 7699385e7..56a5796d6 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ReaderProgressIndicator.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ReaderProgressIndicator.kt @@ -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() - 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 }) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ReaderTransitionView.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ReaderTransitionView.kt index e750b9e6f..c9b00bf77 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ReaderTransitionView.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ReaderTransitionView.kt @@ -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() + 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() - 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() - } - } } } diff --git a/app/src/main/java/exh/ui/metadata/MetadataViewScreen.kt b/app/src/main/java/exh/ui/metadata/MetadataViewScreen.kt index 0c85b7a8b..5b875baa1 100644 --- a/app/src/main/java/exh/ui/metadata/MetadataViewScreen.kt +++ b/app/src/main/java/exh/ui/metadata/MetadataViewScreen.kt @@ -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 <-- } } diff --git a/app/src/main/java/exh/ui/metadata/MetadataViewScreenModel.kt b/app/src/main/java/exh/ui/metadata/MetadataViewScreenModel.kt index bff994ebe..f43f6677d 100644 --- a/app/src/main/java/exh/ui/metadata/MetadataViewScreenModel.kt +++ b/app/src/main/java/exh/ui/metadata/MetadataViewScreenModel.kt @@ -27,8 +27,6 @@ class MetadataViewScreenModel( // KMK --> private val uiPreferences = Injekt.get() val themeCoverBased = uiPreferences.themeCoverBased().get() - val themeDarkAmoled = uiPreferences.themeDarkAmoled().get() - val themeCoverBasedStyle = uiPreferences.themeCoverBasedStyle().get() // KMK <-- private val _manga = MutableStateFlow(null)