package soy.iko.opencode.ui.theme import android.app.Activity import android.content.Context import android.content.ContextWrapper import android.os.Build import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.material3.MaterialTheme import androidx.compose.material3.darkColorScheme import androidx.compose.material3.dynamicDarkColorScheme import androidx.compose.material3.dynamicLightColorScheme import androidx.compose.material3.lightColorScheme import androidx.compose.runtime.Composable import androidx.compose.runtime.SideEffect import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalView import androidx.core.view.WindowCompat private val DarkColors = darkColorScheme( primary = Color(0xFF7AA2F7), secondary = Color(0xFF9ECE6A), tertiary = Color(0xFFBB9AF7), background = Color(0xFF1A1B26), surface = Color(0xFF1F2335), ) private val LightColors = lightColorScheme( primary = Color(0xFF34548A), secondary = Color(0xFF485E30), tertiary = Color(0xFF5A4A78), ) @Composable fun OpencodeTheme( darkTheme: Boolean = isSystemInDarkTheme(), dynamicColor: Boolean = false, content: @Composable () -> Unit, ) { val context = LocalContext.current val colorScheme = when { dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) darkTheme -> DarkColors else -> LightColors } val view = LocalView.current if (!view.isInEditMode) { SideEffect { val window = view.context.findActivity()?.window ?: return@SideEffect WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = !darkTheme } } MaterialTheme( colorScheme = colorScheme, content = content, ) } private tailrec fun Context.findActivity(): Activity? = when (this) { is Activity -> this is ContextWrapper -> baseContext.findActivity() else -> null }