Skip to main content
The app module is the main application module that serves as the entry point for the Compose Project Template. It orchestrates the app’s initialization, theme setup, and navigation graph.

Key Classes

App

The application class annotated with @HiltAndroidApp for Hilt dependency injection. Package: es.mobiledev.cpt
@HiltAndroidApp
class App : Application() {
    override fun onCreate() {
        super.onCreate()
    }
}
Application
android.app.Application
Base Android Application class providing application-level context
The @HiltAndroidApp annotation triggers Hilt’s code generation and creates the application-level dependency container.

MainActivity

The single activity that hosts all Compose screens using Jetpack Navigation. Package: es.mobiledev.cpt File: app/src/main/java/es/mobiledev/cpt/MainActivity.kt:13
@AndroidEntryPoint
class MainActivity : ComponentActivity() {
    private var navController: NavHostController? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContent {
            navController = rememberNavController()
            navController?.let { safeNavController ->
                CPTTheme {
                    AppNavigation(
                        navController = safeNavController
                    )
                }
            }
        }
    }
}
navController
NavHostController?
Nullable navigation controller for managing app navigation
Features:
  • Edge-to-edge display support via enableEdgeToEdge()
  • Jetpack Compose UI with Material3 theme
  • Hilt dependency injection with @AndroidEntryPoint
  • Single-activity architecture

AppNavigation

Composable function that defines the main navigation graph of the application. Package: es.mobiledev.cpt File: app/src/main/java/es/mobiledev/cpt/AppNavigation.kt:38
@Composable
fun AppNavigation(navController: NavHostController = rememberNavController())
navController
NavHostController
default:"rememberNavController()"
The NavHostController used to manage the app’s navigation
Functionality:
  • Manages navigation between screens (Launcher, Home, Test, ArticleDetail)
  • Controls visibility of TopBar and BottomBar based on current screen
  • Integrates with ScreenWrapper for consistent UI structure
  • Tracks current selected navigation module
The app supports the following navigation destinations:
AppScreens.Launcher
object
Initial launcher screen shown on app startup
  • hasTopBar: false
  • hasBottomBar: false
AppScreens.Home
object
Main home screen displaying articles
  • hasTopBar: true
  • hasBottomBar: true
AppScreens.Test
object
Test navigation screen
  • hasTopBar: true
  • hasBottomBar: true
AppScreens.ArticleDetail
object
Article detail screen with article ID parameter
  • Parameter: id: Long
  • hasTopBar: true
  • hasBottomBar: true

Usage Example

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContent {
            val navController = rememberNavController()
            CPTTheme {
                AppNavigation(navController = navController)
            }
        }
    }
}
// Navigate to article detail
navController.navigate(AppScreens.ArticleDetail(id = 123))

// Navigate to home with backstack management
navController.navigate(AppScreens.Home) {
    popUpTo(AppScreens.Home) {
        inclusive = true
    }
}
The navigation graph uses type-safe navigation with Kotlin serialization. All screen routes are defined in the navigation module using sealed interfaces.

Theme Configuration

The app module includes theme configuration files:
  • Color.kt - Material3 color scheme definitions
  • Theme.kt - CPTTheme composable with light/dark mode support
  • Type.kt - Typography definitions

Module Dependencies

The app module depends on:
- feature:home
- feature:launcher
- feature:articledetail
- navigation
- commonAndroid

Build Configuration

plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
    id("com.google.dagger.hilt.android")
    id("org.jetbrains.kotlin.plugin.serialization")
    id("org.jetbrains.kotlin.plugin.compose")
}

Build docs developers (and LLMs) love