60
app/src/main/kotlin/com/example/architecture/MainActivity.kt
Normal file
60
app/src/main/kotlin/com/example/architecture/MainActivity.kt
Normal file
@@ -0,0 +1,60 @@
|
||||
package com.example.architecture
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.fragment.app.FragmentActivity
|
||||
import androidx.fragment.compose.AndroidFragment
|
||||
import androidx.navigation.compose.NavHost
|
||||
import androidx.navigation.compose.composable
|
||||
import androidx.navigation.compose.rememberNavController
|
||||
import com.example.architecture.core.design.system.theme.AppTheme
|
||||
import com.example.architecture.feature.about.presentation.AboutRoute
|
||||
import com.example.architecture.feature.about.presentation.aboutGraph
|
||||
import com.example.architecture.feature.characters.presentation.compose.CharacterDetailRoute
|
||||
import com.example.architecture.feature.characters.presentation.compose.CharacterListRoute
|
||||
import com.example.architecture.feature.characters.presentation.compose.charactersGraph
|
||||
import com.example.architecture.feature.characters.presentation.views.CharacterListFragment
|
||||
|
||||
/**
|
||||
* Hosts the single Compose NavHost and owns every cross-feature / cross-toolkit wiring:
|
||||
* - the characters graph (Compose list + detail),
|
||||
* - the About graph (MVVM contrast),
|
||||
* - the Views renderer embedded via [AndroidFragment] (Compose↔View interop).
|
||||
*
|
||||
* Extends [FragmentActivity] (not plain ComponentActivity) so [AndroidFragment] has a FragmentManager.
|
||||
*/
|
||||
class MainActivity : FragmentActivity() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
enableEdgeToEdge()
|
||||
setContent {
|
||||
AppTheme {
|
||||
val navController = rememberNavController()
|
||||
NavHost(
|
||||
navController = navController,
|
||||
startDestination = CharacterListRoute,
|
||||
) {
|
||||
charactersGraph(
|
||||
navController = navController,
|
||||
onOpenAbout = { navController.navigate(AboutRoute) },
|
||||
onOpenViewsList = { navController.navigate(CharactersViewsRoute) },
|
||||
)
|
||||
aboutGraph(
|
||||
onNavigateBack = { navController.popBackStack() },
|
||||
)
|
||||
// Compose↔View interop: the same characters list, rendered by a Fragment. :app
|
||||
// injects the navigation callbacks so the Views module stays nav-agnostic.
|
||||
composable<CharactersViewsRoute> {
|
||||
AndroidFragment<CharacterListFragment> { fragment ->
|
||||
fragment.onCharacterClick = { id ->
|
||||
navController.navigate(CharacterDetailRoute(id))
|
||||
}
|
||||
fragment.onNavigateBack = { navController.popBackStack() }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user