57 lines
2.0 KiB
Kotlin
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
|
|
)
|
|
} |