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.
Problem Statement
Nav3 introduces a scene/strategy system that allows multiple
NavEntryobjects to be composed simultaneously – for example, list-detail layouts on tablets usingListDetailSceneStrategyor customSceneStrategyimplementations. 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 forscope.screenand the active transaction, and include all visible routes in crash context.Solution Brainstorm
Build on the
SentryNavEntryDecoratorfrom #5000 to track entry composition lifecycle:NavEntryDecorator(orDisposableEffect) to detect when entries enter and leave composition. Maintain a set of currently-visible panes.NavEntry.metadata(e.g. thelistDetailPanekey fromListDetailSceneStrategy). 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"]).visiblefield listing all visible routes at the time of the navigation event, only when multipane is active.contexts.navigation.visible) – a list of visible-pane entries (route + args), updated on visibility changes, separate from the backstack list.Open questions:
SceneStrategyimplementations that don't use standard metadata keys?view_namesinclude 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'sNavControllerexposes a single current destination at a time, soscope.screenand the active transaction always reflect one screen. There is noview_namesarray or visible-pane tracking. Apps using Nav2 with multipane patterns (e.g.SlidingPaneLayoutor manual fragment transactions alongside navigation) get no multipane-aware telemetry from the SDK.