Skip to content

feat(ui): set up Navigation Compose with Welcome → ChannelList placeholder #8

@ilmoniemi

Description

@ilmoniemi

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

  • navigation-compose is added to gradle/libs.versions.toml (with its own version entry, since it is not covered by the Compose BOM) and consumed in app/build.gradle.kts through the catalog alias — no inline "androidx.navigation:navigation-compose:x.y.z" literal in build.gradle.kts.
  • MainActivity no longer renders the Greeting Composable; the AGP-template Greeting function and GreetingPreview are deleted.
  • MainActivity hosts a NavHost with two routes: welcome (start destination) and channel_list.
  • The welcome route renders WelcomeScreen(onPaired = …, onSetup = …), where onPaired navigates to channel_list and onSetup is a no-op with a comment referencing feat(ui): wire Welcome screen CTAs to Scanner navigation + external browser #14.
  • The channel_list route renders Text("Channel list placeholder").
  • ./gradlew assembleDebug passes.

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    size:s<100 lines; default for non-trivial tickets

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions