stadiamaps / stadiamaps/ferrostar

Expose an optional completed-render-frame callback through Android navigation views

Open
#950 0 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.