stadiamaps / stadiamaps/ferrostar
Expose an optional completed-render-frame callback through Android navigation views
- Dominant language
- Kotlin
- Stars
- 419
- Forks
- 81
- Avg merge
- 6d 1h
- Merged PRs (30d)
- 7
Description
## Context
Ferrostar Android `DynamicallyOrientingNavigationView` delegates to `NavigationMapView`, which delegates to MapLibre Compose `MaplibreMap`. Neither public Ferrostar view exposes a renderer-frame callback or the underlying Android `MapView`.
For a navigation client to measure accepted-route→displayed-route truthfully, it must arm a one-shot at acceptance and consume it on the first later MapLibre *completed renderer frame*. A Compose recomposition, `withFrameNanos`, or a wrapper state emission is not that witness.
## Dependency
I opened maplibre/maplibre-compose#1043 requesting a lifecycle-safe completed-frame callback (or `MapView` access) based on `MapView.OnDidFinishRenderingFrameListener`. `MapAdapter.Callbacks.onFrame` is an FPS/rate signal and cannot substitute.
## Requested Ferrostar plumbing
Once that lower-level hook is available, please thread an optional callback through `NavigationMapView` and `DynamicallyOrientingNavigationView`, preserving the existing defaults. This lets an app correlate one accepted automatic route with the first subsequent completed rendered frame without forking/copying Ferrostar’s whole navigation map.
model: gpt-5
Contributor guide
Research direction
Start by locating NavigationMapView and DynamicallyOrientingNavigationView, then trace how each delegates to MaplibreMap. Confirm that the lower-level completed-render-frame hook from maplibre-compose#1043 is available before threading an optional callback through both views. Done means existing defaults remain unchanged and clients can receive the first subsequent completed renderer-frame callback.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- kotlin
- Domain
- mobile-dev
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 42/100