fix(navigation): restore meeting edit and unify home actions [WPB-27923] - #5233
Conversation
New ADR(s) in this PR 📚:14. Migrate to Navigation 3 with KMP-ready navigation contractsDate: 2026-08-10 StatusProposed ContextWire currently uses Compose Destinations on top of Navigation Compose 2. Generated destinations, Navigation state, a Metro graph instance and a ViewModel owner have related, but different, Compose Destinations is not the desired long-term navigation layer. Navigation 3 gives Wire an DecisionWe will replace Compose Destinations with Navigation 3 and Wire-owned navigation contracts.
For example, route identity, graph selection and ViewModel ownership are separate: @Serializable
data class ConversationRoute(
override val sessionId: WireSessionId,
val conversationId: ConversationId,
override val entryId: WireNavEntryId = WireNavEntryId.random(),
) : SessionRoute
wireEntry<ConversationRoute> { route ->
ConversationScreen(
viewModel = conversationViewModel(route.toViewModelArgs()),
onBack = actions::back,
)
}
The migration will be delivered incrementally: KMP contracts and runtime foundation, ownership ConsequencesNavigation becomes typed, application-owned and testable. Existing entries keep deterministic The migration temporarily increases the amount of adapter and test code. Wire must explicitly The migration is complete only when one production navigation runtime remains, generated |
Test Results2 629 tests +5 2 629 ✅ +5 1m 21s ⏱️ -1s Results for commit c52acd5. ± Comparison against base commit 9371126. This pull request removes 1 and adds 6 tests. Note that renamed tests count towards both.♻️ This comment has been updated with latest results. |
|
APKs built during tests are available here. Scroll down to Artifacts! |
…e-actions # Conflicts: # app/src/main/kotlin/com/wire/android/ui/home/meetings/MeetingsScreen.kt
|
APKs built during tests are available here. Scroll down to Artifacts! |
https://wearezeta.atlassian.net/browse/WPB-27923
PR Submission Checklist for internal contributors
The PR Title
SQPIT-764The PR Description
What's new in this PR?
Issues
HomeTopLevelNavigation3Actions.Navigation3suffix did not communicate whether a contract was reusable UI API or directly coupled to the Navigation 3 runtime.Causes
The Navigation 3 migration removed the previous
editMeetingcallback mapping from the Meetings Home screen.At the same time, top-level navigation contracts were migrated incrementally. This left Home with multiple ways of exposing child navigation and no documented naming rule.
Solutions
This PR restores meeting editing by mapping the selected meeting to:
NewMeetingType.Edit(meetingId)The same
meetingIdis then passed to the typedNewMeetingDetailsRoute.It also makes
HomeTopLevelNavigation3Actionsthe single composition point for every interactive Home root:flowchart TD HomeNavigation3Actions --> HomeTopLevelNavigation3Actions HomeTopLevelNavigation3Actions --> ConversationListNavigationActions HomeTopLevelNavigation3Actions --> SettingsNavigation3Actions HomeTopLevelNavigation3Actions --> AllFilesNavigationActions HomeTopLevelNavigation3Actions --> WhatsNewNavigationActions HomeTopLevelNavigation3Actions --> MeetingsHomeNavigationActionsFeature-specific functions are no longer flattened into the Home contract.
Main Conversations and Archive reuse the same decorated conversation-list action bundle, including Navigation 3 result handling.
Naming rule
The
Navigation3suffix describes technical coupling, not migration status.ConversationListNavigationActionsConversationEntryNavigation3ActionsMeetingsHomeNavigationActionsMeetingsNavigation3ActionsAllFilesNavigationActionsSettingsNavigation3ActionsThis naming rule is documented in ADR 0014 so future migrations follow the same structure.
The new Home-root action bundles are data classes to preserve Compose parameter stability.