git.iko.soy/opencode-android
on 325e359 help sign in
64 lines 2.1 kB history raw
1package soy.iko.opencode.ui.theme
3import android.app.Activity
4import android.content.Context
5import android.content.ContextWrapper
6import android.os.Build
7import androidx.compose.foundation.isSystemInDarkTheme
8import androidx.compose.material3.MaterialTheme
9import androidx.compose.material3.darkColorScheme
10import androidx.compose.material3.dynamicDarkColorScheme
11import androidx.compose.material3.dynamicLightColorScheme
12import androidx.compose.material3.lightColorScheme
13import androidx.compose.runtime.Composable
14import androidx.compose.runtime.SideEffect
15import androidx.compose.ui.graphics.Color
16import androidx.compose.ui.platform.LocalContext
17import androidx.compose.ui.platform.LocalView
18import androidx.core.view.WindowCompat
20private val DarkColors = darkColorScheme(
21 primary = Color(0xFF7AA2F7),
22 secondary = Color(0xFF9ECE6A),
23 tertiary = Color(0xFFBB9AF7),
24 background = Color(0xFF1A1B26),
25 surface = Color(0xFF1F2335),
28private val LightColors = lightColorScheme(
29 primary = Color(0xFF34548A),
30 secondary = Color(0xFF485E30),
31 tertiary = Color(0xFF5A4A78),
34@Composable
35fun OpencodeTheme(
36 darkTheme: Boolean = isSystemInDarkTheme(),
37 dynamicColor: Boolean = false,
38 content: @Composable () -> Unit,
39) {
40 val context = LocalContext.current
41 val colorScheme = when {
42 dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S ->
43 if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context)
44 darkTheme -> DarkColors
45 else -> LightColors
46 }
47 val view = LocalView.current
48 if (!view.isInEditMode) {
49 SideEffect {
50 val window = view.context.findActivity()?.window ?: return@SideEffect
51 WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = !darkTheme
52 }
53 }
54 MaterialTheme(
55 colorScheme = colorScheme,
56 content = content,
57 )
60private tailrec fun Context.findActivity(): Activity? = when (this) {
61 is Activity -> this
62 is ContextWrapper -> baseContext.findActivity()
63 else -> null