While recording: UI updates altitude, speed, and bearing to most recently received value.

Fixes #866.
This commit is contained in:
Dennis Guse
2021-07-15 19:22:34 +02:00
parent db24639829
commit d42d1214ea
2 changed files with 18 additions and 9 deletions
@@ -134,16 +134,21 @@ public class HandlerServer {
return segmentEnd; return segmentEnd;
} }
//TODO get lastTrackPoint from LocationHandler public Pair<TrackPoint, SensorDataSet> createCurrentTrackPoint(@Nullable TrackPoint lastValidTrackPoint) {
public Pair<TrackPoint, SensorDataSet> createCurrentTrackPoint(@Nullable TrackPoint lastTrackPoint) {
TrackPoint currentTrackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT, createNow()); TrackPoint currentTrackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT, createNow());
TrackPoint lastTrackPoint = locationHandler.getLastTrackPoint();
if (lastTrackPoint != null && lastTrackPoint.hasLocation()) { if (lastTrackPoint != null && lastTrackPoint.hasLocation()) {
//TODO Should happen in TrackPoint? via constructor
currentTrackPoint.setSpeed(lastTrackPoint.getSpeed()); currentTrackPoint.setSpeed(lastTrackPoint.getSpeed());
currentTrackPoint.setAltitude(lastTrackPoint.getAltitude()); currentTrackPoint.setAltitude(lastTrackPoint.getAltitude());
currentTrackPoint.setLongitude(lastTrackPoint.getLongitude()); if (lastTrackPoint.hasBearing()) {
currentTrackPoint.setLatitude(lastTrackPoint.getLatitude()); 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); SensorDataSet sensorDataSet = fill(currentTrackPoint);
@@ -28,7 +28,7 @@ class LocationHandler implements LocationListener, GpsStatus.GpsStatusListener {
private LocationListenerPolicy locationListenerPolicy; private LocationListenerPolicy locationListenerPolicy;
private Duration currentRecordingInterval; private Duration currentRecordingInterval;
private Distance thresholdHorizontalAccuracy; private Distance thresholdHorizontalAccuracy;
private TrackPoint lastValidTrackPoint; private TrackPoint lastTrackPoint;
public LocationHandler(HandlerServer handlerServer) { public LocationHandler(HandlerServer handlerServer) {
this.handlerServer = handlerServer; this.handlerServer = handlerServer;
@@ -110,8 +110,8 @@ class LocationHandler implements LocationListener, GpsStatus.GpsStatusListener {
} }
Duration idleTime = Duration.ofSeconds(0); Duration idleTime = Duration.ofSeconds(0);
if (lastValidTrackPoint != null && trackPoint.getTime().isAfter(lastValidTrackPoint.getTime())) { if (lastTrackPoint != null && trackPoint.getTime().isAfter(lastTrackPoint.getTime())) {
idleTime = Duration.between(lastValidTrackPoint.getTime(), trackPoint.getTime()); idleTime = Duration.between(lastTrackPoint.getTime(), trackPoint.getTime());
} }
locationListenerPolicy.updateIdleTime(idleTime); locationListenerPolicy.updateIdleTime(idleTime);
@@ -119,7 +119,7 @@ class LocationHandler implements LocationListener, GpsStatus.GpsStatusListener {
registerLocationListener(); registerLocationListener();
} }
lastValidTrackPoint = trackPoint; lastTrackPoint = trackPoint;
handlerServer.onNewTrackPoint(trackPoint, thresholdHorizontalAccuracy); 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. * Called from {@link GpsStatus} to inform that GPS status has changed from prevStatus to currentStatus.
* *