manager: webui-next is now amoled mode compliant

This commit is contained in:
Rifat Azad
2025-07-03 22:27:18 +06:00
parent a361fa3272
commit 25fa6b7b9b

View File

@@ -2,14 +2,16 @@ package com.rifsxd.ksunext.ui.webui
import android.content.Context import android.content.Context
import android.content.res.Configuration import android.content.res.Configuration
import android.os.Build
import androidx.compose.material3.dynamicDarkColorScheme import androidx.compose.material3.dynamicDarkColorScheme
import androidx.compose.material3.dynamicLightColorScheme import androidx.compose.material3.dynamicLightColorScheme
import androidx.compose.material3.surfaceColorAtElevation import androidx.compose.material3.surfaceColorAtElevation
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.rifsxd.ksunext.ui.theme.AMOLED_BLACK
/** /**
* @author rifsxd * @author rifsxd
* @date 2025/6/2. * @date 2025/6/2.
@@ -17,64 +19,124 @@ import androidx.compose.ui.unit.dp
object MonetColorsProvider { object MonetColorsProvider {
fun getColorsCss(context: Context): String { fun getColorsCss(context: Context): String {
// Detect dark mode
val isDark = (context.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES val isDark = (context.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES
val prefs = context.getSharedPreferences("settings", Context.MODE_PRIVATE)
val amoledMode = prefs.getBoolean("enable_amoled", false)
val colorScheme = if (isDark) { val colorScheme = if (isDark) {
dynamicDarkColorScheme(context) dynamicDarkColorScheme(context)
} else { } else {
dynamicLightColorScheme(context) dynamicLightColorScheme(context)
} }
val monetColors = mapOf( fun blend(c1: Color, c2: Color, ratio: Float): Color {
// App Base Colors val inv = 1f - ratio
"primary" to colorScheme.primary.toArgb().toHex(), return Color(
"onPrimary" to colorScheme.onPrimary.toArgb().toHex(), red = c1.red * inv + c2.red * ratio,
"primaryContainer" to colorScheme.primaryContainer.toArgb().toHex(), green = c1.green * inv + c2.green * ratio,
"onPrimaryContainer" to colorScheme.onPrimaryContainer.toArgb().toHex(), blue = c1.blue * inv + c2.blue * ratio,
"inversePrimary" to colorScheme.inversePrimary.toArgb().toHex(), alpha = c1.alpha
"secondary" to colorScheme.secondary.toArgb().toHex(), )
"onSecondary" to colorScheme.onSecondary.toArgb().toHex(), }
"secondaryContainer" to colorScheme.secondaryContainer.toArgb().toHex(),
"onSecondaryContainer" to colorScheme.onSecondaryContainer.toArgb().toHex(),
"tertiary" to colorScheme.tertiary.toArgb().toHex(),
"onTertiary" to colorScheme.onTertiary.toArgb().toHex(),
"tertiaryContainer" to colorScheme.tertiaryContainer.toArgb().toHex(),
"onTertiaryContainer" to colorScheme.onTertiaryContainer.toArgb().toHex(),
"background" to colorScheme.background.toArgb().toHex(),
"onBackground" to colorScheme.onBackground.toArgb().toHex(),
"surface" to colorScheme.surface.toArgb().toHex(),
"tonalSurface" to colorScheme.surfaceColorAtElevation(1.dp).toArgb().toHex(), // surfaceColorAtElevation(1.dp) not available here
"onSurface" to colorScheme.onSurface.toArgb().toHex(),
"surfaceVariant" to colorScheme.surfaceVariant.toArgb().toHex(),
"onSurfaceVariant" to colorScheme.onSurfaceVariant.toArgb().toHex(),
"surfaceTint" to colorScheme.surfaceTint.toArgb().toHex(),
"inverseSurface" to colorScheme.inverseSurface.toArgb().toHex(),
"inverseOnSurface" to colorScheme.inverseOnSurface.toArgb().toHex(),
"error" to colorScheme.error.toArgb().toHex(),
"onError" to colorScheme.onError.toArgb().toHex(),
"errorContainer" to colorScheme.errorContainer.toArgb().toHex(),
"onErrorContainer" to colorScheme.onErrorContainer.toArgb().toHex(),
"outline" to colorScheme.outline.toArgb().toHex(),
"outlineVariant" to colorScheme.outlineVariant.toArgb().toHex(),
"scrim" to colorScheme.scrim.toArgb().toHex(),
"surfaceBright" to colorScheme.surfaceBright.toArgb().toHex(),
"surfaceDim" to colorScheme.surfaceDim.toArgb().toHex(),
"surfaceContainer" to colorScheme.surfaceContainer.toArgb().toHex(),
"surfaceContainerHigh" to colorScheme.surfaceContainerHigh.toArgb().toHex(),
"surfaceContainerHighest" to colorScheme.surfaceContainerHighest.toArgb().toHex(),
"surfaceContainerLow" to colorScheme.surfaceContainerLow.toArgb().toHex(),
"surfaceContainerLowest" to colorScheme.surfaceContainerLowest.toArgb().toHex(),
"filledTonalButtonContentColor" to colorScheme.onPrimaryContainer.toArgb().toHex(),
"filledTonalButtonContainerColor" to colorScheme.secondaryContainer.toArgb().toHex(),
"filledTonalButtonDisabledContentColor" to colorScheme.onSurfaceVariant.toArgb().toHex(),
"filledTonalButtonDisabledContainerColor" to colorScheme.surfaceVariant.toArgb().toHex(),
"filledCardContentColor" to colorScheme.onPrimaryContainer.toArgb().toHex(),
"filledCardContainerColor" to colorScheme.primaryContainer.toArgb().toHex(),
"filledCardDisabledContentColor" to colorScheme.onSurfaceVariant.toArgb().toHex(),
"filledCardDisabledContainerColor" to colorScheme.surfaceVariant.toArgb().toHex()
)
val monetColors = if (isDark && amoledMode) {
mapOf(
"primary" to colorScheme.primary.toArgb().toHex(),
"onPrimary" to colorScheme.onPrimary.toArgb().toHex(),
"primaryContainer" to blend(colorScheme.primaryContainer, AMOLED_BLACK, 0.6f).toArgb().toHex(),
"onPrimaryContainer" to colorScheme.onPrimaryContainer.toArgb().toHex(),
"inversePrimary" to colorScheme.inversePrimary.toArgb().toHex(),
"secondary" to colorScheme.secondary.toArgb().toHex(),
"onSecondary" to colorScheme.onSecondary.toArgb().toHex(),
"secondaryContainer" to blend(colorScheme.secondaryContainer, AMOLED_BLACK, 0.6f).toArgb().toHex(),
"onSecondaryContainer" to colorScheme.onSecondaryContainer.toArgb().toHex(),
"tertiary" to colorScheme.tertiary.toArgb().toHex(),
"onTertiary" to colorScheme.onTertiary.toArgb().toHex(),
"tertiaryContainer" to blend(colorScheme.tertiaryContainer, AMOLED_BLACK, 0.6f).toArgb().toHex(),
"onTertiaryContainer" to colorScheme.onTertiaryContainer.toArgb().toHex(),
"background" to AMOLED_BLACK.toArgb().toHex(),
"onBackground" to colorScheme.onBackground.toArgb().toHex(),
"surface" to AMOLED_BLACK.toArgb().toHex(),
"tonalSurface" to blend(colorScheme.surfaceColorAtElevation(1.dp), AMOLED_BLACK, 0.6f).toArgb().toHex(),
"onSurface" to colorScheme.onSurface.toArgb().toHex(),
"surfaceVariant" to blend(colorScheme.surfaceVariant, AMOLED_BLACK, 0.6f).toArgb().toHex(),
"onSurfaceVariant" to colorScheme.onSurfaceVariant.toArgb().toHex(),
"surfaceTint" to colorScheme.surfaceTint.toArgb().toHex(),
"inverseSurface" to colorScheme.inverseSurface.toArgb().toHex(),
"inverseOnSurface" to colorScheme.inverseOnSurface.toArgb().toHex(),
"error" to colorScheme.error.toArgb().toHex(),
"onError" to colorScheme.onError.toArgb().toHex(),
"errorContainer" to colorScheme.errorContainer.toArgb().toHex(),
"onErrorContainer" to colorScheme.onErrorContainer.toArgb().toHex(),
"outline" to colorScheme.outline.toArgb().toHex(),
"outlineVariant" to colorScheme.outlineVariant.toArgb().toHex(),
"scrim" to colorScheme.scrim.toArgb().toHex(),
"surfaceBright" to blend(colorScheme.surfaceBright, AMOLED_BLACK, 0.6f).toArgb().toHex(),
"surfaceDim" to blend(colorScheme.surfaceDim, AMOLED_BLACK, 0.6f).toArgb().toHex(),
"surfaceContainer" to blend(colorScheme.surfaceContainer, AMOLED_BLACK, 0.6f).toArgb().toHex(),
"surfaceContainerHigh" to blend(colorScheme.surfaceContainerHigh, AMOLED_BLACK, 0.6f).toArgb().toHex(),
"surfaceContainerHighest" to blend(colorScheme.surfaceContainerHighest, AMOLED_BLACK, 0.6f).toArgb().toHex(),
"surfaceContainerLow" to blend(colorScheme.surfaceContainerLow, AMOLED_BLACK, 0.6f).toArgb().toHex(),
"surfaceContainerLowest" to blend(colorScheme.surfaceContainerLowest, AMOLED_BLACK, 0.6f).toArgb().toHex(),
"filledTonalButtonContentColor" to colorScheme.onPrimaryContainer.toArgb().toHex(),
"filledTonalButtonContainerColor" to blend(colorScheme.secondaryContainer, AMOLED_BLACK, 0.6f).toArgb().toHex(),
"filledTonalButtonDisabledContentColor" to colorScheme.onSurfaceVariant.toArgb().toHex(),
"filledTonalButtonDisabledContainerColor" to blend(colorScheme.surfaceVariant, AMOLED_BLACK, 0.6f).toArgb().toHex(),
"filledCardContentColor" to colorScheme.onPrimaryContainer.toArgb().toHex(),
"filledCardContainerColor" to blend(colorScheme.primaryContainer, AMOLED_BLACK, 0.6f).toArgb().toHex(),
"filledCardDisabledContentColor" to colorScheme.onSurfaceVariant.toArgb().toHex(),
"filledCardDisabledContainerColor" to blend(colorScheme.surfaceVariant, AMOLED_BLACK, 0.6f).toArgb().toHex()
)
} else {
mapOf(
"primary" to colorScheme.primary.toArgb().toHex(),
"onPrimary" to colorScheme.onPrimary.toArgb().toHex(),
"primaryContainer" to colorScheme.primaryContainer.toArgb().toHex(),
"onPrimaryContainer" to colorScheme.onPrimaryContainer.toArgb().toHex(),
"inversePrimary" to colorScheme.inversePrimary.toArgb().toHex(),
"secondary" to colorScheme.secondary.toArgb().toHex(),
"onSecondary" to colorScheme.onSecondary.toArgb().toHex(),
"secondaryContainer" to colorScheme.secondaryContainer.toArgb().toHex(),
"onSecondaryContainer" to colorScheme.onSecondaryContainer.toArgb().toHex(),
"tertiary" to colorScheme.tertiary.toArgb().toHex(),
"onTertiary" to colorScheme.onTertiary.toArgb().toHex(),
"tertiaryContainer" to colorScheme.tertiaryContainer.toArgb().toHex(),
"onTertiaryContainer" to colorScheme.onTertiaryContainer.toArgb().toHex(),
"background" to colorScheme.background.toArgb().toHex(),
"onBackground" to colorScheme.onBackground.toArgb().toHex(),
"surface" to colorScheme.surface.toArgb().toHex(),
"tonalSurface" to colorScheme.surfaceColorAtElevation(1.dp).toArgb().toHex(),
"onSurface" to colorScheme.onSurface.toArgb().toHex(),
"surfaceVariant" to colorScheme.surfaceVariant.toArgb().toHex(),
"onSurfaceVariant" to colorScheme.onSurfaceVariant.toArgb().toHex(),
"surfaceTint" to colorScheme.surfaceTint.toArgb().toHex(),
"inverseSurface" to colorScheme.inverseSurface.toArgb().toHex(),
"inverseOnSurface" to colorScheme.inverseOnSurface.toArgb().toHex(),
"error" to colorScheme.error.toArgb().toHex(),
"onError" to colorScheme.onError.toArgb().toHex(),
"errorContainer" to colorScheme.errorContainer.toArgb().toHex(),
"onErrorContainer" to colorScheme.onErrorContainer.toArgb().toHex(),
"outline" to colorScheme.outline.toArgb().toHex(),
"outlineVariant" to colorScheme.outlineVariant.toArgb().toHex(),
"scrim" to colorScheme.scrim.toArgb().toHex(),
"surfaceBright" to colorScheme.surfaceBright.toArgb().toHex(),
"surfaceDim" to colorScheme.surfaceDim.toArgb().toHex(),
"surfaceContainer" to colorScheme.surfaceContainer.toArgb().toHex(),
"surfaceContainerHigh" to colorScheme.surfaceContainerHigh.toArgb().toHex(),
"surfaceContainerHighest" to colorScheme.surfaceContainerHighest.toArgb().toHex(),
"surfaceContainerLow" to colorScheme.surfaceContainerLow.toArgb().toHex(),
"surfaceContainerLowest" to colorScheme.surfaceContainerLowest.toArgb().toHex(),
"filledTonalButtonContentColor" to colorScheme.onPrimaryContainer.toArgb().toHex(),
"filledTonalButtonContainerColor" to colorScheme.secondaryContainer.toArgb().toHex(),
"filledTonalButtonDisabledContentColor" to colorScheme.onSurfaceVariant.toArgb().toHex(),
"filledTonalButtonDisabledContainerColor" to colorScheme.surfaceVariant.toArgb().toHex(),
"filledCardContentColor" to colorScheme.onPrimaryContainer.toArgb().toHex(),
"filledCardContainerColor" to colorScheme.primaryContainer.toArgb().toHex(),
"filledCardDisabledContentColor" to colorScheme.onSurfaceVariant.toArgb().toHex(),
"filledCardDisabledContainerColor" to colorScheme.surfaceVariant.toArgb().toHex()
)
}
return monetColors.toCssVars() return monetColors.toCssVars()
} }