mirror of
https://github.com/AdrianKuta/android-challange-adrian-kuta.git
synced 2025-07-01 15:37:59 +02:00
86 lines
3.2 KiB
Kotlin
86 lines
3.2 KiB
Kotlin
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)
|