User Story
As a developer wiring up Pyrycode Mobile's onboarding flow, I want Navigation Compose set up so the app boots into Welcome and can navigate to a Channel List placeholder route, so that #14 can attach real CTA destinations and the data-layer tickets can replace the Channel List placeholder with real UI without redoing the activity host.
Context
This is the navigation-host ticket that turns the merged WelcomeScreen (#7) into the actual app entrypoint and prepares the channel_list destination that later tickets will replace with real UI. MainActivity currently still renders the AGP-template Greeting("Android") Composable; this ticket replaces that with a NavHost rooted at Welcome.
#7 has merged, so the Welcome route renders WelcomeScreen directly — no placeholder branch. #14 will later replace the navigation callbacks with the Scanner route and an external-browser intent; for this ticket, onPaired navigates to channel_list and onSetup is a no-op with a comment referencing #14. The conditional start destination based on pairing state (#13) and the real Channel List UI are out of scope.
Acceptance Criteria
Technical Notes
- Compose BOM is already wired (
composeBom = "2026.02.01" in libs.versions.toml); Navigation Compose is not part of the BOM, so it needs its own version pin.
- Keep the NavHost-hosting Composable stateless — create the
NavController via rememberNavController() inside it.
- A navigation instrumentation test is optional. Defer if
NavController testing utilities require non-trivial setup; do not block the ticket on it.
Out of Scope
Depends On
None — #7 (WelcomeScreen) has merged, so this ticket can render it directly. Runs in parallel with the data-layer chain.
Size Estimate
S — three files touched (gradle/libs.versions.toml, app/build.gradle.kts, MainActivity.kt), ~30–50 LOC of production code, established Compose Navigation pattern.
User Story
As a developer wiring up Pyrycode Mobile's onboarding flow, I want Navigation Compose set up so the app boots into Welcome and can navigate to a Channel List placeholder route, so that #14 can attach real CTA destinations and the data-layer tickets can replace the Channel List placeholder with real UI without redoing the activity host.
Context
This is the navigation-host ticket that turns the merged
WelcomeScreen(#7) into the actual app entrypoint and prepares thechannel_listdestination that later tickets will replace with real UI.MainActivitycurrently still renders the AGP-templateGreeting("Android")Composable; this ticket replaces that with aNavHostrooted at Welcome.#7 has merged, so the Welcome route renders
WelcomeScreendirectly — no placeholder branch. #14 will later replace the navigation callbacks with the Scanner route and an external-browser intent; for this ticket,onPairednavigates tochannel_listandonSetupis a no-op with a comment referencing #14. The conditional start destination based on pairing state (#13) and the real Channel List UI are out of scope.Acceptance Criteria
navigation-composeis added togradle/libs.versions.toml(with its own version entry, since it is not covered by the Compose BOM) and consumed inapp/build.gradle.ktsthrough the catalog alias — no inline"androidx.navigation:navigation-compose:x.y.z"literal inbuild.gradle.kts.MainActivityno longer renders theGreetingComposable; the AGP-templateGreetingfunction andGreetingPrevieware deleted.MainActivityhosts aNavHostwith two routes:welcome(start destination) andchannel_list.welcomeroute rendersWelcomeScreen(onPaired = …, onSetup = …), whereonPairednavigates tochannel_listandonSetupis a no-op with a comment referencing feat(ui): wire Welcome screen CTAs to Scanner navigation + external browser #14.channel_listroute rendersText("Channel list placeholder")../gradlew assembleDebugpasses.Technical Notes
composeBom = "2026.02.01"inlibs.versions.toml); Navigation Compose is not part of the BOM, so it needs its own version pin.NavControllerviarememberNavController()inside it.NavControllertesting utilities require non-trivial setup; do not block the ticket on it.Out of Scope
Depends On
None — #7 (WelcomeScreen) has merged, so this ticket can render it directly. Runs in parallel with the data-layer chain.
Size Estimate
S — three files touched (
gradle/libs.versions.toml,app/build.gradle.kts,MainActivity.kt), ~30–50 LOC of production code, established Compose Navigation pattern.