af51607053
# Conflicts: # app/src/main/java/eu/kanade/domain/source/interactor/GetEnabledSources.kt # app/src/main/java/eu/kanade/domain/source/service/SourcePreferences.kt # app/src/main/java/eu/kanade/domain/ui/UiPreferences.kt # app/src/main/java/eu/kanade/presentation/library/LibrarySettingsDialog.kt # app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt # app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsLibraryScreen.kt # app/src/main/java/eu/kanade/presentation/reader/settings/GeneralSettingsPage.kt # app/src/main/java/eu/kanade/presentation/reader/settings/ReadingModePage.kt # app/src/main/java/eu/kanade/tachiyomi/App.kt # app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadProvider.kt # app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt # app/src/main/java/eu/kanade/tachiyomi/di/PreferenceModule.kt # app/src/main/java/eu/kanade/tachiyomi/source/SourceExtensions.kt # app/src/main/java/eu/kanade/tachiyomi/ui/base/delegate/SecureActivityDelegate.kt # app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryScreenModel.kt # app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt # app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt # app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt # app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderViewModel.kt # app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences.kt # app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/ViewerConfig.kt # app/src/main/java/eu/kanade/tachiyomi/ui/stats/StatsScreenModel.kt # app/src/main/java/eu/kanade/tachiyomi/util/CrashLogUtil.kt # app/src/main/java/mihon/feature/migration/list/MigrationListScreenModel.kt # core/common/src/main/kotlin/eu/kanade/tachiyomi/network/NetworkHelper.kt # domain/src/main/java/tachiyomi/domain/library/service/LibraryPreferences.kt
105 lines
3.7 KiB
Kotlin
105 lines
3.7 KiB
Kotlin
package eu.kanade.presentation.theme
|
|
|
|
import android.content.Context
|
|
import androidx.compose.foundation.isSystemInDarkTheme
|
|
import androidx.compose.material3.ColorScheme
|
|
import androidx.compose.material3.MaterialExpressiveTheme
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.runtime.remember
|
|
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.BaseColorScheme
|
|
import eu.kanade.presentation.theme.colorscheme.CatppuccinColorScheme
|
|
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.MonochromeColorScheme
|
|
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,
|
|
) {
|
|
val context = LocalContext.current
|
|
val isDark = isSystemInDarkTheme()
|
|
MaterialExpressiveTheme(
|
|
colorScheme = remember(appTheme, isDark, isAmoled) {
|
|
getThemeColorScheme(
|
|
context = context,
|
|
appTheme = appTheme,
|
|
isDark = isDark,
|
|
isAmoled = isAmoled,
|
|
)
|
|
},
|
|
content = content,
|
|
)
|
|
}
|
|
|
|
private fun getThemeColorScheme(
|
|
context: Context,
|
|
appTheme: AppTheme,
|
|
isDark: Boolean,
|
|
isAmoled: Boolean,
|
|
): ColorScheme {
|
|
val colorScheme = if (appTheme == AppTheme.MONET) {
|
|
MonetColorScheme(context)
|
|
} else {
|
|
colorSchemes.getOrDefault(appTheme, TachiyomiColorScheme)
|
|
}
|
|
return colorScheme.getColorScheme(
|
|
isDark = isDark,
|
|
isAmoled = isAmoled,
|
|
overrideDarkSurfaceContainers = appTheme != AppTheme.MONET,
|
|
)
|
|
}
|
|
|
|
private val colorSchemes: Map<AppTheme, BaseColorScheme> = mapOf(
|
|
AppTheme.DEFAULT to TachiyomiColorScheme,
|
|
AppTheme.CATPPUCCIN to CatppuccinColorScheme,
|
|
AppTheme.GREEN_APPLE to GreenAppleColorScheme,
|
|
AppTheme.LAVENDER to LavenderColorScheme,
|
|
AppTheme.MIDNIGHT_DUSK to MidnightDuskColorScheme,
|
|
AppTheme.MONOCHROME to MonochromeColorScheme,
|
|
AppTheme.NORD to NordColorScheme,
|
|
AppTheme.STRAWBERRY_DAIQUIRI to StrawberryColorScheme,
|
|
AppTheme.TAKO to TakoColorScheme,
|
|
AppTheme.TEALTURQUOISE to TealTurqoiseColorScheme,
|
|
AppTheme.TIDAL_WAVE to TidalWaveColorScheme,
|
|
AppTheme.YINYANG to YinYangColorScheme,
|
|
AppTheme.YOTSUBA to YotsubaColorScheme,
|
|
)
|