Skip to content

Nav3: Multipane support #5649

Description

@0xadam-brown

Problem Statement

Nav3 introduces a scene/strategy system that allows multiple NavEntry objects to be composed simultaneously – for example, list-detail layouts on tablets using ListDetailSceneStrategy or custom SceneStrategy implementations. The Stage 1 integration (single-stack, single-pane parity with Nav2, #5000) doesn't account for this: when multiple panes are visible, the SDK needs to report which screens are on-screen, choose a "primary" pane for scope.screen and the active transaction, and include all visible routes in crash context.

Solution Brainstorm

Build on the SentryNavEntryDecorator from #5000 to track entry composition lifecycle:

  • Visible pane tracking. Use NavEntryDecorator (or DisposableEffect) to detect when entries enter and leave composition. Maintain a set of currently-visible panes.
  • Primary pane selection. When multiple panes are visible, pick the "most specific" as primary – detail over list, using Nav3's NavEntry.metadata (e.g. the listDetailPane key from ListDetailSceneStrategy). Fall back to recency or stack position when metadata is absent.
  • scope.screen – set to the primary pane's route name.
  • contexts.app.view_names – set to the full list of visible route names when more than one pane is composed (e.g. ["/ProductList", "/ProductDetail"]).
  • Breadcrumbs – include a visible field listing all visible routes at the time of the navigation event, only when multipane is active.
  • Crash context (contexts.navigation.visible) – a list of visible-pane entries (route + args), updated on visibility changes, separate from the backstack list.
  • Active transaction – targets the primary pane only; named after the detail route when a list-detail scene is active.

Open questions:

  • Should we detect multipane purely from metadata, or also offer an explicit API for custom SceneStrategy implementations that don't use standard metadata keys?
  • Should view_names include panes from all strategies (e.g. a two-pane + dialog simultaneously), or only the "main" scene's entries?

Existing Nav2 support

The current Nav2 integration (sentry-android-navigation) does not support multipane layouts. Nav2's NavController exposes a single current destination at a time, so scope.screen and the active transaction always reflect one screen. There is no view_names array or visible-pane tracking. Apps using Nav2 with multipane patterns (e.g. SlidingPaneLayout or manual fragment transactions alongside navigation) get no multipane-aware telemetry from the SDK.

Metadata

Metadata

Assignees

No one assigned
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions