VendettaManager/app/src/main/java/dev/beefers/vendetta/manager/ui/theme/Theme.kt

57 lines
2.0 KiB
Kotlin

package dev.beefers.vendetta.manager.ui.theme
import android.app.Activity
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
import com.google.accompanist.systemuicontroller.rememberSystemUiController
import dev.beefers.vendetta.manager.domain.manager.PreferenceManager
import dev.beefers.vendetta.manager.domain.manager.Theme
import org.koin.androidx.compose.get
@Composable
fun VendettaManagerTheme(
content: @Composable () -> Unit
) {
val prefs = get<PreferenceManager>()
val dynamicColor = prefs.monet
val darkTheme = when (prefs.theme) {
Theme.SYSTEM -> isSystemInDarkTheme()
Theme.DARK -> true
Theme.LIGHT -> false
}
val systemUiController = rememberSystemUiController()
val colorScheme = when {
dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {
val context = LocalContext.current
if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context)
}
darkTheme -> darkColorScheme()
else -> lightColorScheme()
}
val view = LocalView.current
if (!view.isInEditMode) {
SideEffect {
val window = (view.context as Activity).window
WindowCompat.setDecorFitsSystemWindows(window, false)
systemUiController.setSystemBarsColor(Color.Transparent, darkIcons = !darkTheme)
}
}
MaterialTheme(
colorScheme = colorScheme,
typography = Typography,
content = content
)
}