MainActivity.kt (2405B) - raw


      1 package me.rhunk.snapenhance.ui.manager
      2 
      3 import android.content.Intent
      4 import android.os.Bundle
      5 import androidx.activity.ComponentActivity
      6 import androidx.activity.compose.setContent
      7 import androidx.compose.material3.MaterialTheme
      8 import androidx.compose.material3.Scaffold
      9 import androidx.compose.runtime.remember
     10 import androidx.navigation.NavGraph.Companion.findStartDestination
     11 import androidx.navigation.NavHostController
     12 import androidx.navigation.compose.rememberNavController
     13 import me.rhunk.snapenhance.RemoteSideContext
     14 import me.rhunk.snapenhance.SharedContextHolder
     15 import me.rhunk.snapenhance.common.ui.AppMaterialTheme
     16 
     17 class MainActivity : ComponentActivity() {
     18     private lateinit var navController: NavHostController
     19     private lateinit var managerContext: RemoteSideContext
     20 
     21     override fun onNewIntent(intent: Intent) {
     22         super.onNewIntent(intent)
     23         if (::navController.isInitialized.not()) return
     24         intent.getStringExtra("route")?.let { route ->
     25             navController.popBackStack()
     26             navController.navigate(route) {
     27                 popUpTo(navController.graph.findStartDestination().id){
     28                     inclusive = true
     29                 }
     30             }
     31         }
     32     }
     33 
     34     override fun onCreate(savedInstanceState: Bundle?) {
     35         super.onCreate(savedInstanceState)
     36 
     37         managerContext = SharedContextHolder.remote(this).apply {
     38             activity = this@MainActivity
     39             checkForRequirements()
     40         }
     41 
     42         val routes = Routes(managerContext)
     43         routes.getRoutes().forEach { it.init() }
     44 
     45         setContent {
     46             navController = rememberNavController()
     47             val navigation = remember {
     48                 Navigation(managerContext, navController, routes.also {
     49                     it.navController = navController
     50                 })
     51             }
     52             val startDestination = remember { intent.getStringExtra("route") ?: routes.home.routeInfo.id }
     53 
     54             AppMaterialTheme {
     55                 Scaffold(
     56                     containerColor = MaterialTheme.colorScheme.background,
     57                     topBar = { navigation.TopBar() },
     58                     bottomBar = { navigation.BottomBar() },
     59                     floatingActionButton = { navigation.FloatingActionButton() }
     60                 ) { innerPadding -> navigation.Content(innerPadding, startDestination) }
     61             }
     62         }
     63     }
     64 }