107 lines
No EOL
4.3 KiB
Kotlin
107 lines
No EOL
4.3 KiB
Kotlin
package com.pixelized.rplexicon
|
|
|
|
import android.app.Activity
|
|
import android.os.Bundle
|
|
import androidx.activity.ComponentActivity
|
|
import androidx.activity.compose.BackHandler
|
|
import androidx.activity.compose.setContent
|
|
import androidx.compose.foundation.layout.WindowInsets
|
|
import androidx.compose.foundation.layout.fillMaxSize
|
|
import androidx.compose.foundation.layout.navigationBarsPadding
|
|
import androidx.compose.foundation.layout.padding
|
|
import androidx.compose.material3.MaterialTheme
|
|
import androidx.compose.material3.Scaffold
|
|
import androidx.compose.material3.SnackbarHost
|
|
import androidx.compose.material3.SnackbarHostState
|
|
import androidx.compose.material3.Surface
|
|
import androidx.compose.runtime.CompositionLocalProvider
|
|
import androidx.compose.runtime.compositionLocalOf
|
|
import androidx.compose.runtime.remember
|
|
import androidx.compose.runtime.staticCompositionLocalOf
|
|
import androidx.compose.ui.Modifier
|
|
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
|
|
import androidx.core.view.WindowCompat
|
|
import androidx.hilt.navigation.compose.hiltViewModel
|
|
import com.pixelized.rplexicon.ui.composable.BlurredOverlayHost
|
|
import com.pixelized.rplexicon.ui.navigation.ScreenNavHost
|
|
import com.pixelized.rplexicon.ui.screens.rolls.BlurredRollOverlayHostState
|
|
import com.pixelized.rplexicon.ui.screens.rolls.RollOverlay
|
|
import com.pixelized.rplexicon.ui.screens.rolls.RollOverlayViewModel
|
|
import com.pixelized.rplexicon.ui.screens.rolls.rememberBlurredRollOverlayHostState
|
|
import com.pixelized.rplexicon.ui.theme.LexiconTheme
|
|
import dagger.hilt.android.AndroidEntryPoint
|
|
|
|
val LocalActivity = staticCompositionLocalOf<Activity> {
|
|
error("Activity not available")
|
|
}
|
|
val LocalSnack = staticCompositionLocalOf<SnackbarHostState> {
|
|
error("SnackbarHostState not available")
|
|
}
|
|
val LocalRollOverlay = compositionLocalOf<BlurredRollOverlayHostState> {
|
|
error("LocalRollOverlay not yet ready")
|
|
}
|
|
val NO_WINDOW_INSETS = WindowInsets(0, 0, 0, 0)
|
|
|
|
@AndroidEntryPoint
|
|
class MainActivity : ComponentActivity() {
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
super.onCreate(savedInstanceState)
|
|
|
|
// Disable system inset consuming.
|
|
WindowCompat.setDecorFitsSystemWindows(window, false)
|
|
|
|
// splashscreen management
|
|
installSplashScreen().apply {
|
|
setKeepOnScreenCondition { false }
|
|
}
|
|
|
|
setContent {
|
|
LexiconTheme {
|
|
val rollViewModel = hiltViewModel<RollOverlayViewModel>()
|
|
val overlay = rememberBlurredRollOverlayHostState(
|
|
viewModel = rollViewModel,
|
|
)
|
|
|
|
CompositionLocalProvider(
|
|
LocalActivity provides this,
|
|
LocalSnack provides remember { SnackbarHostState() },
|
|
LocalRollOverlay provides overlay,
|
|
) {
|
|
Scaffold(
|
|
contentWindowInsets = NO_WINDOW_INSETS,
|
|
content = { padding ->
|
|
Surface(
|
|
modifier = Modifier
|
|
.fillMaxSize()
|
|
.padding(paddingValues = padding),
|
|
color = MaterialTheme.colorScheme.background
|
|
) {
|
|
BlurredOverlayHost(
|
|
rollOverlayState = overlay,
|
|
overlay = {
|
|
RollOverlay(
|
|
viewModel = rollViewModel,
|
|
)
|
|
},
|
|
content = {
|
|
ScreenNavHost()
|
|
},
|
|
)
|
|
}
|
|
},
|
|
snackbarHost = {
|
|
SnackbarHost(
|
|
modifier = Modifier.navigationBarsPadding(),
|
|
hostState = LocalSnack.current,
|
|
)
|
|
}
|
|
)
|
|
BackHandler(enabled = overlay.isOverlayVisible) {
|
|
overlay.hideOverlay()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |