refactor(nav): single GPS-position accessor + reset COG window after a gap

UITask::currentLocation() becomes the one place that reads the
LocationProvider fix. TrailScreen::ownPos, CompassScreen::gpsValid and
NearbyScreen::refresh now delegate to it instead of each duplicating the
getLocationProvider/isValid dance (and the ENV_INCLUDE_GPS guard).

pushCogFix now restarts the course-over-ground ring when the gap since the
previous fix exceeds 15 s: after losing GPS for a while, a window spanning
the stale old fixes would compute a bogus "teleport" heading. The
last-good heading is kept for display continuity.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Jakub
2026-06-04 00:12:15 +02:00
co-authored by Claude Opus 4.8
parent bd364ccfd1
commit 55d164c074
5 changed files with 24 additions and 30 deletions
@@ -13,14 +13,7 @@
class CompassScreen : public UIScreen {
UITask* _task;
static bool gpsValid() {
#if ENV_INCLUDE_GPS == 1
LocationProvider* loc = sensors.getLocationProvider();
return loc && loc->isValid();
#else
return false;
#endif
}
bool gpsValid() const { int32_t lat, lon; return _task->currentLocation(lat, lon); }
// Midpoint circle (DisplayDriver has no circle primitive).
static void drawCircle(DisplayDriver& d, int cx, int cy, int r) {