The TachiyomiTheme introduced a dependency-injection construct that didn't exist at the time of rendering previews, so I've changed the preview function to use a preview version of the theme that uses declarative configuration over dependency injection
85 lines
3.0 KiB
Kotlin
85 lines
3.0 KiB
Kotlin
package eu.kanade.presentation.theme
|
|
|
|
import androidx.compose.foundation.isSystemInDarkTheme
|
|
import androidx.compose.material3.ColorScheme
|
|
import androidx.compose.material3.MaterialTheme
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.runtime.ReadOnlyComposable
|
|
import androidx.compose.ui.platform.LocalContext
|
|
import eu.kanade.domain.ui.UiPreferences
|
|
import eu.kanade.domain.ui.model.AppTheme
|
|
import eu.kanade.presentation.theme.colorscheme.GreenAppleColorScheme
|
|
import eu.kanade.presentation.theme.colorscheme.LavenderColorScheme
|
|
import eu.kanade.presentation.theme.colorscheme.MidnightDuskColorScheme
|
|
import eu.kanade.presentation.theme.colorscheme.MonetColorScheme
|
|
import eu.kanade.presentation.theme.colorscheme.NordColorScheme
|
|
import eu.kanade.presentation.theme.colorscheme.StrawberryColorScheme
|
|
import eu.kanade.presentation.theme.colorscheme.TachiyomiColorScheme
|
|
import eu.kanade.presentation.theme.colorscheme.TakoColorScheme
|
|
import eu.kanade.presentation.theme.colorscheme.TealTurqoiseColorScheme
|
|
import eu.kanade.presentation.theme.colorscheme.TidalWaveColorScheme
|
|
import eu.kanade.presentation.theme.colorscheme.YinYangColorScheme
|
|
import eu.kanade.presentation.theme.colorscheme.YotsubaColorScheme
|
|
import uy.kohesive.injekt.Injekt
|
|
import uy.kohesive.injekt.api.get
|
|
|
|
@Composable
|
|
fun TachiyomiTheme(
|
|
appTheme: AppTheme? = null,
|
|
amoled: Boolean? = null,
|
|
content: @Composable () -> Unit,
|
|
) {
|
|
val uiPreferences = Injekt.get<UiPreferences>()
|
|
BaseTachiyomiTheme(
|
|
appTheme = appTheme ?: uiPreferences.appTheme().get(),
|
|
isAmoled = amoled ?: uiPreferences.themeDarkAmoled().get(),
|
|
content = content,
|
|
)
|
|
}
|
|
|
|
@Composable
|
|
fun TachiyomiPreviewTheme(
|
|
appTheme: AppTheme = AppTheme.DEFAULT,
|
|
isAmoled: Boolean = false,
|
|
content: @Composable () -> Unit,
|
|
) = BaseTachiyomiTheme(appTheme, isAmoled, content)
|
|
|
|
@Composable
|
|
private fun BaseTachiyomiTheme(
|
|
appTheme: AppTheme,
|
|
isAmoled: Boolean,
|
|
content: @Composable () -> Unit,
|
|
) {
|
|
MaterialTheme(
|
|
colorScheme = getThemeColorScheme(appTheme, isAmoled),
|
|
content = content,
|
|
)
|
|
}
|
|
|
|
@Composable
|
|
@ReadOnlyComposable
|
|
private fun getThemeColorScheme(
|
|
appTheme: AppTheme,
|
|
isAmoled: Boolean,
|
|
): ColorScheme {
|
|
val colorScheme = when (appTheme) {
|
|
AppTheme.DEFAULT -> TachiyomiColorScheme
|
|
AppTheme.MONET -> MonetColorScheme(LocalContext.current)
|
|
AppTheme.GREEN_APPLE -> GreenAppleColorScheme
|
|
AppTheme.LAVENDER -> LavenderColorScheme
|
|
AppTheme.MIDNIGHT_DUSK -> MidnightDuskColorScheme
|
|
AppTheme.NORD -> NordColorScheme
|
|
AppTheme.STRAWBERRY_DAIQUIRI -> StrawberryColorScheme
|
|
AppTheme.TAKO -> TakoColorScheme
|
|
AppTheme.TEALTURQUOISE -> TealTurqoiseColorScheme
|
|
AppTheme.TIDAL_WAVE -> TidalWaveColorScheme
|
|
AppTheme.YINYANG -> YinYangColorScheme
|
|
AppTheme.YOTSUBA -> YotsubaColorScheme
|
|
else -> TachiyomiColorScheme
|
|
}
|
|
return colorScheme.getColorScheme(
|
|
isSystemInDarkTheme(),
|
|
isAmoled,
|
|
)
|
|
}
|