Bugfix: speed showed sometimes 0.0 in UI.

Fixes #1117.
This commit is contained in:
Dennis Guse
2022-02-07 17:16:47 +01:00
parent 1e4e7b8c15
commit 0848897ed0
4 changed files with 36 additions and 36 deletions
@@ -40,6 +40,9 @@ class TrackRecordingManager implements SharedPreferences.OnSharedPreferenceChang
private TrackStatisticsUpdater trackStatisticsUpdater; private TrackStatisticsUpdater trackStatisticsUpdater;
private TrackPoint lastTrackPoint; private TrackPoint lastTrackPoint;
private TrackPoint lastTrackPointUIWithSpeed;
private TrackPoint lastTrackPointUIWithAltitude;
private TrackPoint lastStoredTrackPoint; private TrackPoint lastStoredTrackPoint;
private TrackPoint lastStoredTrackPointWithLocation; private TrackPoint lastStoredTrackPointWithLocation;
@@ -91,17 +94,13 @@ class TrackRecordingManager implements SharedPreferences.OnSharedPreferenceChang
trackStatisticsUpdater = new TrackStatisticsUpdater(track.getTrackStatistics()); trackStatisticsUpdater = new TrackStatisticsUpdater(track.getTrackStatistics());
onNewTrackPoint(trackPointCreator.createSegmentStartManual()); onNewTrackPoint(trackPointCreator.createSegmentStartManual());
lastTrackPoint = null; reset();
lastStoredTrackPoint = null;
lastStoredTrackPointWithLocation = null;
} }
void pause(TrackPointCreator trackPointCreator) { void pause(TrackPointCreator trackPointCreator) {
insertTrackPoint(trackPointCreator.createSegmentEnd()); insertTrackPoint(trackPointCreator.createSegmentEnd());
lastTrackPoint = null; reset();
lastStoredTrackPoint = null;
lastStoredTrackPointWithLocation = null;
} }
void end(TrackPointCreator trackPointCreator) { void end(TrackPointCreator trackPointCreator) {
@@ -111,17 +110,15 @@ class TrackRecordingManager implements SharedPreferences.OnSharedPreferenceChang
trackId = null; trackId = null;
trackStatisticsUpdater = null; trackStatisticsUpdater = null;
lastTrackPoint = null; reset();
lastStoredTrackPoint = null;
lastStoredTrackPointWithLocation = null;
} }
Pair<Track, Pair<TrackPoint, SensorDataSet>> get(TrackPointCreator trackPointCreator) { Pair<Track, Pair<TrackPoint, SensorDataSet>> getDataForUI(TrackPointCreator trackPointCreator) {
if (trackPointCreator == null) { if (trackPointCreator == null) {
return null; return null;
} }
TrackStatisticsUpdater tmpTrackStatisticsUpdater = new TrackStatisticsUpdater(trackStatisticsUpdater); TrackStatisticsUpdater tmpTrackStatisticsUpdater = new TrackStatisticsUpdater(trackStatisticsUpdater);
Pair<TrackPoint, SensorDataSet> current = trackPointCreator.createCurrentTrackPoint(lastTrackPoint); Pair<TrackPoint, SensorDataSet> current = trackPointCreator.createCurrentTrackPoint(lastTrackPointUIWithSpeed, lastTrackPointUIWithAltitude, lastStoredTrackPointWithLocation);
tmpTrackStatisticsUpdater.addTrackPoint(current.first); tmpTrackStatisticsUpdater.addTrackPoint(current.first);
@@ -165,6 +162,12 @@ class TrackRecordingManager implements SharedPreferences.OnSharedPreferenceChang
* @return TrackPoint was stored? * @return TrackPoint was stored?
*/ */
boolean onNewTrackPoint(@NonNull TrackPoint trackPoint) { boolean onNewTrackPoint(@NonNull TrackPoint trackPoint) {
if (trackPoint.hasSpeed()) {
lastTrackPointUIWithSpeed = trackPoint;
}
if (trackPoint.hasAltitude()) {
lastTrackPointUIWithAltitude = trackPoint;
}
//Storing trackPoint //Storing trackPoint
// Always insert the first segment location // 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 @Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (PreferencesUtils.isKey(R.string.recording_distance_interval_key, key)) { if (PreferencesUtils.isKey(R.string.recording_distance_interval_key, key)) {
@@ -46,7 +46,7 @@ public class TrackRecordingService extends Service implements TrackPointCreator.
private static final String TAG = TrackRecordingService.class.getSimpleName(); 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 RecordingStatus STATUS_DEFAULT = RecordingStatus.notRecording();
public static final RecordingData NOT_RECORDING = new RecordingData(null, null, null); public static final RecordingData NOT_RECORDING = new RecordingData(null, null, null);
@@ -367,7 +367,7 @@ public class TrackRecordingService extends Service implements TrackPointCreator.
return; return;
} }
Pair<Track, Pair<TrackPoint, SensorDataSet>> data = trackRecordingManager.get(trackPointCreator); Pair<Track, Pair<TrackPoint, SensorDataSet>> data = trackRecordingManager.getDataForUI(trackPointCreator);
if (data == null) { if (data == null) {
Log.w(TAG, "Requesting data if not recording is taking place, should not be done."); Log.w(TAG, "Requesting data if not recording is taking place, should not be done.");
return; return;
@@ -31,7 +31,6 @@ public class GPSHandler implements LocationListener, GpsStatus.GpsStatusListener
private GpsStatus gpsStatus; private GpsStatus gpsStatus;
private Duration gpsInterval; private Duration gpsInterval;
private Distance thresholdHorizontalAccuracy; private Distance thresholdHorizontalAccuracy;
private TrackPoint lastTrackPoint;
public GPSHandler(TrackPointCreator trackPointCreator) { public GPSHandler(TrackPointCreator trackPointCreator) {
this.trackPointCreator = trackPointCreator; this.trackPointCreator = trackPointCreator;
@@ -53,7 +52,6 @@ public class GPSHandler implements LocationListener, GpsStatus.GpsStatusListener
@SuppressWarnings({"MissingPermission"}) @SuppressWarnings({"MissingPermission"})
//TODO upgrade to AGP7.0.0/API31 started complaining about removeUpdates. //TODO upgrade to AGP7.0.0/API31 started complaining about removeUpdates.
public void onStop() { public void onStop() {
lastTrackPoint = null;
if (locationManager != null && context != null) { if (locationManager != null && context != null) {
if (PermissionUtils.hasGPSPermission(context)) { if (PermissionUtils.hasGPSPermission(context)) {
locationManager.removeUpdates(this); locationManager.removeUpdates(this);
@@ -129,7 +127,6 @@ public class GPSHandler implements LocationListener, GpsStatus.GpsStatusListener
return; return;
} }
lastTrackPoint = trackPoint;
trackPointCreator.onNewTrackPoint(trackPoint); trackPointCreator.onNewTrackPoint(trackPoint);
} }
@@ -165,10 +162,6 @@ public class GPSHandler implements LocationListener, GpsStatus.GpsStatusListener
} }
} }
TrackPoint getLastTrackPoint() {
return lastTrackPoint;
}
Distance getThresholdHorizontalAccuracy() { Distance getThresholdHorizontalAccuracy() {
return thresholdHorizontalAccuracy; return thresholdHorizontalAccuracy;
} }
@@ -177,8 +170,4 @@ public class GPSHandler implements LocationListener, GpsStatus.GpsStatusListener
public void onGpsStatusChanged(GpsStatusValue prevStatus, GpsStatusValue currentStatus) { public void onGpsStatusChanged(GpsStatusValue prevStatus, GpsStatusValue currentStatus) {
trackPointCreator.sendGpsStatus(currentStatus); trackPointCreator.sendGpsStatus(currentStatus);
} }
void reset() {
lastTrackPoint = null;
}
} }
@@ -78,7 +78,6 @@ public class TrackPointCreator implements BluetoothRemoteSensorManager.SensorDat
} }
remoteSensorManager.reset(); remoteSensorManager.reset();
altitudeSumManager.reset(); altitudeSumManager.reset();
gpsHandler.reset();
} }
private SensorDataSet fill(TrackPoint trackPoint) { private SensorDataSet fill(TrackPoint trackPoint) {
@@ -136,22 +135,22 @@ public class TrackPointCreator implements BluetoothRemoteSensorManager.SensorDat
return segmentEnd; return segmentEnd;
} }
public Pair<TrackPoint, SensorDataSet> createCurrentTrackPoint(@Nullable TrackPoint lastValidTrackPoint) { public Pair<TrackPoint, SensorDataSet> createCurrentTrackPoint(@Nullable TrackPoint lastTrackPointUISpeed, @Nullable TrackPoint lastTrackPointUIAltitude, @Nullable TrackPoint lastStoredTrackPointWithLocation) {
TrackPoint currentTrackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT, createNow()); TrackPoint currentTrackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT, createNow());
TrackPoint lastTrackPoint = gpsHandler.getLastTrackPoint();
if (lastTrackPoint != null && lastTrackPoint.hasLocation()) { if (lastTrackPointUISpeed != null) {
currentTrackPoint.setSpeed(lastTrackPoint.getSpeed()); currentTrackPoint.setSpeed(lastTrackPointUISpeed.getSpeed());
currentTrackPoint.setAltitude(lastTrackPoint.getAltitude());
if (lastTrackPoint.hasBearing()) {
currentTrackPoint.setBearing(lastTrackPoint.getBearing());
}
} }
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. //We are taking the coordinates from the last stored TrackPoint, so the distance is monotonously increasing.
currentTrackPoint.setLongitude(lastValidTrackPoint.getLongitude()); currentTrackPoint.setLongitude(lastStoredTrackPointWithLocation.getLongitude());
currentTrackPoint.setLatitude(lastValidTrackPoint.getLatitude()); currentTrackPoint.setLatitude(lastStoredTrackPointWithLocation.getLatitude());
} }
SensorDataSet sensorDataSet = fill(currentTrackPoint); SensorDataSet sensorDataSet = fill(currentTrackPoint);
return new Pair<>(currentTrackPoint, sensorDataSet); return new Pair<>(currentTrackPoint, sensorDataSet);