From 0848897ed028ba5e33287c537376d70d20d70f06 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Mon, 7 Feb 2022 17:16:47 +0100 Subject: [PATCH] Bugfix: speed showed sometimes 0.0 in UI. Fixes #1117. --- .../services/TrackRecordingManager.java | 34 +++++++++++++------ .../services/TrackRecordingService.java | 4 +-- .../services/handlers/GPSHandler.java | 11 ------ .../services/handlers/TrackPointCreator.java | 23 ++++++------- 4 files changed, 36 insertions(+), 36 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java index cba14897d..1a8132d2a 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java @@ -40,6 +40,9 @@ class TrackRecordingManager implements SharedPreferences.OnSharedPreferenceChang private TrackStatisticsUpdater trackStatisticsUpdater; private TrackPoint lastTrackPoint; + private TrackPoint lastTrackPointUIWithSpeed; + private TrackPoint lastTrackPointUIWithAltitude; + private TrackPoint lastStoredTrackPoint; private TrackPoint lastStoredTrackPointWithLocation; @@ -91,17 +94,13 @@ class TrackRecordingManager implements SharedPreferences.OnSharedPreferenceChang trackStatisticsUpdater = new TrackStatisticsUpdater(track.getTrackStatistics()); onNewTrackPoint(trackPointCreator.createSegmentStartManual()); - lastTrackPoint = null; - lastStoredTrackPoint = null; - lastStoredTrackPointWithLocation = null; + reset(); } void pause(TrackPointCreator trackPointCreator) { insertTrackPoint(trackPointCreator.createSegmentEnd()); - lastTrackPoint = null; - lastStoredTrackPoint = null; - lastStoredTrackPointWithLocation = null; + reset(); } void end(TrackPointCreator trackPointCreator) { @@ -111,17 +110,15 @@ class TrackRecordingManager implements SharedPreferences.OnSharedPreferenceChang trackId = null; trackStatisticsUpdater = null; - lastTrackPoint = null; - lastStoredTrackPoint = null; - lastStoredTrackPointWithLocation = null; + reset(); } - Pair> get(TrackPointCreator trackPointCreator) { + Pair> getDataForUI(TrackPointCreator trackPointCreator) { if (trackPointCreator == null) { return null; } TrackStatisticsUpdater tmpTrackStatisticsUpdater = new TrackStatisticsUpdater(trackStatisticsUpdater); - Pair current = trackPointCreator.createCurrentTrackPoint(lastTrackPoint); + Pair current = trackPointCreator.createCurrentTrackPoint(lastTrackPointUIWithSpeed, lastTrackPointUIWithAltitude, lastStoredTrackPointWithLocation); tmpTrackStatisticsUpdater.addTrackPoint(current.first); @@ -165,6 +162,12 @@ class TrackRecordingManager implements SharedPreferences.OnSharedPreferenceChang * @return TrackPoint was stored? */ boolean onNewTrackPoint(@NonNull TrackPoint trackPoint) { + if (trackPoint.hasSpeed()) { + lastTrackPointUIWithSpeed = trackPoint; + } + if (trackPoint.hasAltitude()) { + lastTrackPointUIWithAltitude = trackPoint; + } //Storing trackPoint // Always insert the first segment location @@ -253,6 +256,15 @@ class TrackRecordingManager implements SharedPreferences.OnSharedPreferenceChang } } + private void reset() { + lastTrackPoint = null; + lastTrackPointUIWithSpeed = null; + lastTrackPointUIWithAltitude = null; + + lastStoredTrackPoint = null; + lastStoredTrackPointWithLocation = null; + } + @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { if (PreferencesUtils.isKey(R.string.recording_distance_interval_key, key)) { diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java index c85c359c7..205ef49c4 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java @@ -46,7 +46,7 @@ public class TrackRecordingService extends Service implements TrackPointCreator. private static final String TAG = TrackRecordingService.class.getSimpleName(); - private static final Duration RECORDING_DATA_UPDATE_INTERVAL = Duration.ofSeconds(1); + private static final Duration RECORDING_DATA_UPDATE_INTERVAL = Duration.ofMillis(100); public static final RecordingStatus STATUS_DEFAULT = RecordingStatus.notRecording(); public static final RecordingData NOT_RECORDING = new RecordingData(null, null, null); @@ -367,7 +367,7 @@ public class TrackRecordingService extends Service implements TrackPointCreator. return; } - Pair> data = trackRecordingManager.get(trackPointCreator); + Pair> data = trackRecordingManager.getDataForUI(trackPointCreator); if (data == null) { Log.w(TAG, "Requesting data if not recording is taking place, should not be done."); return; diff --git a/src/main/java/de/dennisguse/opentracks/services/handlers/GPSHandler.java b/src/main/java/de/dennisguse/opentracks/services/handlers/GPSHandler.java index 5e499444c..667953959 100644 --- a/src/main/java/de/dennisguse/opentracks/services/handlers/GPSHandler.java +++ b/src/main/java/de/dennisguse/opentracks/services/handlers/GPSHandler.java @@ -31,7 +31,6 @@ public class GPSHandler implements LocationListener, GpsStatus.GpsStatusListener private GpsStatus gpsStatus; private Duration gpsInterval; private Distance thresholdHorizontalAccuracy; - private TrackPoint lastTrackPoint; public GPSHandler(TrackPointCreator trackPointCreator) { this.trackPointCreator = trackPointCreator; @@ -53,7 +52,6 @@ public class GPSHandler implements LocationListener, GpsStatus.GpsStatusListener @SuppressWarnings({"MissingPermission"}) //TODO upgrade to AGP7.0.0/API31 started complaining about removeUpdates. public void onStop() { - lastTrackPoint = null; if (locationManager != null && context != null) { if (PermissionUtils.hasGPSPermission(context)) { locationManager.removeUpdates(this); @@ -129,7 +127,6 @@ public class GPSHandler implements LocationListener, GpsStatus.GpsStatusListener return; } - lastTrackPoint = trackPoint; trackPointCreator.onNewTrackPoint(trackPoint); } @@ -165,10 +162,6 @@ public class GPSHandler implements LocationListener, GpsStatus.GpsStatusListener } } - TrackPoint getLastTrackPoint() { - return lastTrackPoint; - } - Distance getThresholdHorizontalAccuracy() { return thresholdHorizontalAccuracy; } @@ -177,8 +170,4 @@ public class GPSHandler implements LocationListener, GpsStatus.GpsStatusListener public void onGpsStatusChanged(GpsStatusValue prevStatus, GpsStatusValue currentStatus) { trackPointCreator.sendGpsStatus(currentStatus); } - - void reset() { - lastTrackPoint = null; - } } diff --git a/src/main/java/de/dennisguse/opentracks/services/handlers/TrackPointCreator.java b/src/main/java/de/dennisguse/opentracks/services/handlers/TrackPointCreator.java index 5610e0f84..5b108c933 100644 --- a/src/main/java/de/dennisguse/opentracks/services/handlers/TrackPointCreator.java +++ b/src/main/java/de/dennisguse/opentracks/services/handlers/TrackPointCreator.java @@ -78,7 +78,6 @@ public class TrackPointCreator implements BluetoothRemoteSensorManager.SensorDat } remoteSensorManager.reset(); altitudeSumManager.reset(); - gpsHandler.reset(); } private SensorDataSet fill(TrackPoint trackPoint) { @@ -136,22 +135,22 @@ public class TrackPointCreator implements BluetoothRemoteSensorManager.SensorDat return segmentEnd; } - public Pair createCurrentTrackPoint(@Nullable TrackPoint lastValidTrackPoint) { + public Pair createCurrentTrackPoint(@Nullable TrackPoint lastTrackPointUISpeed, @Nullable TrackPoint lastTrackPointUIAltitude, @Nullable TrackPoint lastStoredTrackPointWithLocation) { TrackPoint currentTrackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT, createNow()); - TrackPoint lastTrackPoint = gpsHandler.getLastTrackPoint(); - if (lastTrackPoint != null && lastTrackPoint.hasLocation()) { - currentTrackPoint.setSpeed(lastTrackPoint.getSpeed()); - currentTrackPoint.setAltitude(lastTrackPoint.getAltitude()); - if (lastTrackPoint.hasBearing()) { - currentTrackPoint.setBearing(lastTrackPoint.getBearing()); - } + if (lastTrackPointUISpeed != null) { + currentTrackPoint.setSpeed(lastTrackPointUISpeed.getSpeed()); } - if (lastValidTrackPoint != null && lastValidTrackPoint.hasLocation()) { + if (lastTrackPointUIAltitude != null) { + currentTrackPoint.setAltitude(lastTrackPointUIAltitude.getAltitude()); + } + + if (lastStoredTrackPointWithLocation != null && lastStoredTrackPointWithLocation.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()); + currentTrackPoint.setLongitude(lastStoredTrackPointWithLocation.getLongitude()); + currentTrackPoint.setLatitude(lastStoredTrackPointWithLocation.getLatitude()); } + SensorDataSet sensorDataSet = fill(currentTrackPoint); return new Pair<>(currentTrackPoint, sensorDataSet);