119 lines
4.3 KiB
Kotlin
119 lines
4.3 KiB
Kotlin
package com.vanced.manager.ui.theme
|
|
|
|
import android.os.Build
|
|
import androidx.compose.foundation.gestures.LocalOverScrollConfiguration
|
|
import androidx.compose.foundation.gestures.OverScrollConfiguration
|
|
import androidx.compose.foundation.isSystemInDarkTheme
|
|
import androidx.compose.material3.*
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.runtime.CompositionLocalProvider
|
|
import androidx.compose.ui.platform.LocalContext
|
|
import com.vanced.manager.core.preferences.holder.managerThemePref
|
|
|
|
const val defAccentColor = 0xFF0477E1
|
|
|
|
private val LightThemeColors = lightColorScheme(
|
|
primary = md_theme_light_primary,
|
|
onPrimary = md_theme_light_onPrimary,
|
|
primaryContainer = md_theme_light_primaryContainer,
|
|
onPrimaryContainer = md_theme_light_onPrimaryContainer,
|
|
secondary = md_theme_light_secondary,
|
|
onSecondary = md_theme_light_onSecondary,
|
|
secondaryContainer = md_theme_light_secondaryContainer,
|
|
onSecondaryContainer = md_theme_light_onSecondaryContainer,
|
|
tertiary = md_theme_light_tertiary,
|
|
onTertiary = md_theme_light_onTertiary,
|
|
tertiaryContainer = md_theme_light_tertiaryContainer,
|
|
onTertiaryContainer = md_theme_light_onTertiaryContainer,
|
|
error = md_theme_light_error,
|
|
errorContainer = md_theme_light_errorContainer,
|
|
onError = md_theme_light_onError,
|
|
onErrorContainer = md_theme_light_onErrorContainer,
|
|
background = md_theme_light_background,
|
|
onBackground = md_theme_light_onBackground,
|
|
surface = md_theme_light_surface,
|
|
onSurface = md_theme_light_onSurface,
|
|
surfaceVariant = md_theme_light_surfaceVariant,
|
|
onSurfaceVariant = md_theme_light_onSurfaceVariant,
|
|
outline = md_theme_light_outline,
|
|
inverseOnSurface = md_theme_light_inverseOnSurface,
|
|
inverseSurface = md_theme_light_inverseSurface,
|
|
)
|
|
private val DarkThemeColors = darkColorScheme(
|
|
primary = md_theme_dark_primary,
|
|
onPrimary = md_theme_dark_onPrimary,
|
|
primaryContainer = md_theme_dark_primaryContainer,
|
|
onPrimaryContainer = md_theme_dark_onPrimaryContainer,
|
|
secondary = md_theme_dark_secondary,
|
|
onSecondary = md_theme_dark_onSecondary,
|
|
secondaryContainer = md_theme_dark_secondaryContainer,
|
|
onSecondaryContainer = md_theme_dark_onSecondaryContainer,
|
|
tertiary = md_theme_dark_tertiary,
|
|
onTertiary = md_theme_dark_onTertiary,
|
|
tertiaryContainer = md_theme_dark_tertiaryContainer,
|
|
onTertiaryContainer = md_theme_dark_onTertiaryContainer,
|
|
error = md_theme_dark_error,
|
|
errorContainer = md_theme_dark_errorContainer,
|
|
onError = md_theme_dark_onError,
|
|
onErrorContainer = md_theme_dark_onErrorContainer,
|
|
background = md_theme_dark_background,
|
|
onBackground = md_theme_dark_onBackground,
|
|
surface = md_theme_dark_surface,
|
|
onSurface = md_theme_dark_onSurface,
|
|
surfaceVariant = md_theme_dark_surfaceVariant,
|
|
onSurfaceVariant = md_theme_dark_onSurfaceVariant,
|
|
outline = md_theme_dark_outline,
|
|
inverseOnSurface = md_theme_dark_inverseOnSurface,
|
|
inverseSurface = md_theme_dark_inverseSurface,
|
|
)
|
|
|
|
@Composable
|
|
fun isDark(): Boolean = when (managerThemePref) {
|
|
"Dark" -> true
|
|
"Light" -> false
|
|
"System Default" -> isSystemInDarkTheme()
|
|
else -> throw IllegalArgumentException("Unknown theme")
|
|
}
|
|
|
|
@Composable
|
|
inline fun apiDependantColorScheme(
|
|
dynamic: () -> ColorScheme,
|
|
static: () -> ColorScheme
|
|
): ColorScheme {
|
|
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
|
dynamic()
|
|
} else {
|
|
static()
|
|
}
|
|
}
|
|
|
|
@Composable
|
|
fun ManagerTheme(
|
|
content: @Composable () -> Unit
|
|
) {
|
|
val context = LocalContext.current
|
|
val colorScheme =
|
|
if (isDark()) {
|
|
apiDependantColorScheme(
|
|
dynamic = { dynamicDarkColorScheme(context) },
|
|
static = { DarkThemeColors }
|
|
)
|
|
} else {
|
|
apiDependantColorScheme(
|
|
dynamic = { dynamicLightColorScheme(context)},
|
|
static = { LightThemeColors }
|
|
)
|
|
}
|
|
MaterialTheme(
|
|
colorScheme = colorScheme,
|
|
typography = ManagerTypography,
|
|
) {
|
|
CompositionLocalProvider(
|
|
LocalOverScrollConfiguration provides OverScrollConfiguration(
|
|
forceShowAlways = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S
|
|
)
|
|
) {
|
|
content()
|
|
}
|
|
}
|
|
} |