From d42d1214ea73c35d580e5e753047449a59102dcf Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Thu, 15 Jul 2021 19:22:34 +0200 Subject: [PATCH] While recording: UI updates altitude, speed, and bearing to most recently received value. Fixes #866. --- .../services/handlers/HandlerServer.java | 15 ++++++++++----- .../services/handlers/LocationHandler.java | 12 ++++++++---- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/services/handlers/HandlerServer.java b/src/main/java/de/dennisguse/opentracks/services/handlers/HandlerServer.java index 50c147fa8..769d8679f 100644 --- a/src/main/java/de/dennisguse/opentracks/services/handlers/HandlerServer.java +++ b/src/main/java/de/dennisguse/opentracks/services/handlers/HandlerServer.java @@ -134,16 +134,21 @@ public class HandlerServer { return segmentEnd; } - //TODO get lastTrackPoint from LocationHandler - public Pair createCurrentTrackPoint(@Nullable TrackPoint lastTrackPoint) { + public Pair createCurrentTrackPoint(@Nullable TrackPoint lastValidTrackPoint) { TrackPoint currentTrackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT, createNow()); + TrackPoint lastTrackPoint = locationHandler.getLastTrackPoint(); if (lastTrackPoint != null && lastTrackPoint.hasLocation()) { - //TODO Should happen in TrackPoint? via constructor currentTrackPoint.setSpeed(lastTrackPoint.getSpeed()); currentTrackPoint.setAltitude(lastTrackPoint.getAltitude()); - currentTrackPoint.setLongitude(lastTrackPoint.getLongitude()); - currentTrackPoint.setLatitude(lastTrackPoint.getLatitude()); + if (lastTrackPoint.hasBearing()) { + currentTrackPoint.setBearing(lastTrackPoint.getBearing()); + } + } + if (lastValidTrackPoint != null && lastValidTrackPoint.hasLocation()) { + //We are taking the coordinates from the last stored TrackPoint, so the distance is monotonously increasing. + currentTrackPoint.setLongitude(lastValidTrackPoint.getLongitude()); + currentTrackPoint.setLatitude(lastValidTrackPoint.getLatitude()); } SensorDataSet sensorDataSet = fill(currentTrackPoint); diff --git a/src/main/java/de/dennisguse/opentracks/services/handlers/LocationHandler.java b/src/main/java/de/dennisguse/opentracks/services/handlers/LocationHandler.java index b6a971459..7201af376 100644 --- a/src/main/java/de/dennisguse/opentracks/services/handlers/LocationHandler.java +++ b/src/main/java/de/dennisguse/opentracks/services/handlers/LocationHandler.java @@ -28,7 +28,7 @@ class LocationHandler implements LocationListener, GpsStatus.GpsStatusListener { private LocationListenerPolicy locationListenerPolicy; private Duration currentRecordingInterval; private Distance thresholdHorizontalAccuracy; - private TrackPoint lastValidTrackPoint; + private TrackPoint lastTrackPoint; public LocationHandler(HandlerServer handlerServer) { this.handlerServer = handlerServer; @@ -110,8 +110,8 @@ class LocationHandler implements LocationListener, GpsStatus.GpsStatusListener { } Duration idleTime = Duration.ofSeconds(0); - if (lastValidTrackPoint != null && trackPoint.getTime().isAfter(lastValidTrackPoint.getTime())) { - idleTime = Duration.between(lastValidTrackPoint.getTime(), trackPoint.getTime()); + if (lastTrackPoint != null && trackPoint.getTime().isAfter(lastTrackPoint.getTime())) { + idleTime = Duration.between(lastTrackPoint.getTime(), trackPoint.getTime()); } locationListenerPolicy.updateIdleTime(idleTime); @@ -119,7 +119,7 @@ class LocationHandler implements LocationListener, GpsStatus.GpsStatusListener { registerLocationListener(); } - lastValidTrackPoint = trackPoint; + lastTrackPoint = trackPoint; handlerServer.onNewTrackPoint(trackPoint, thresholdHorizontalAccuracy); } @@ -155,6 +155,10 @@ class LocationHandler implements LocationListener, GpsStatus.GpsStatusListener { } } + TrackPoint getLastTrackPoint() { + return lastTrackPoint; + } + /** * Called from {@link GpsStatus} to inform that GPS status has changed from prevStatus to currentStatus. *