package dev.adriankuta.flights import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.SystemBarStyle import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen import androidx.lifecycle.lifecycleScope import dagger.hilt.android.AndroidEntryPoint import dev.adriankuta.flights.ui.FlightsApp import dev.adriankuta.flights.ui.designsystem.theme.FlightsTheme import kotlinx.coroutines.delay import kotlinx.coroutines.launch @AndroidEntryPoint class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { val splashScreen = installSplashScreen() super.onCreate(savedInstanceState) var isLoading: Boolean by mutableStateOf(true) lifecycleScope.launch { @Suppress("MagicNumber") delay(500) isLoading = false } splashScreen.setKeepOnScreenCondition { isLoading } enableEdgeToEdge() setContent { val darkTheme = shouldUseDarkTheme() // Update the edge to edge configuration to match the theme // This is the same parameters as the default enableEdgeToEdge call, but we manually // resolve whether or not to show dark theme using uiState, since it can be different // than the configuration's dark theme value based on the user preference. DisposableEffect(darkTheme) { enableEdgeToEdge( statusBarStyle = SystemBarStyle.auto( android.graphics.Color.TRANSPARENT, android.graphics.Color.TRANSPARENT, ) { darkTheme }, navigationBarStyle = SystemBarStyle.auto( lightScrim, darkScrim, ) { darkTheme }, ) onDispose {} } FlightsTheme { FlightsApp() } } } } /** * Returns `true` if dark theme should be used, as a function of the [uiState] and the * current system context. */ @Composable private fun shouldUseDarkTheme(): Boolean = isSystemInDarkTheme() /** * The default light scrim, as defined by androidx and the platform: * https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:activity/activity/src/main/java/androidx/activity/EdgeToEdge.kt;l=35-38;drc=27e7d52e8604a080133e8b842db10c89b4482598 */ private val lightScrim = android.graphics.Color.argb(0xe6, 0xFF, 0xFF, 0xFF) /** * The default dark scrim, as defined by androidx and the platform: * https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:activity/activity/src/main/java/androidx/activity/EdgeToEdge.kt;l=40-44;drc=27e7d52e8604a080133e8b842db10c89b4482598 */ private val darkScrim = android.graphics.Color.argb(0x80, 0x1b, 0x1b, 0x1b)