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 { AndroidFragment { fragment -> fragment.onCharacterClick = { id -> navController.navigate(CharacterDetailRoute(id)) } fragment.onNavigateBack = { navController.popBackStack() } } } } } } } }