Bugfix: TrackRecordingService needs to send data from lastTrackPoint in it's 1s updates.

This also removes UI updates if a GPS measurement is received as 1s update should be sufficient.

Fixes #828.
This commit is contained in:
Dennis Guse
2021-06-21 12:46:05 +02:00
parent a5431b1cf5
commit 3030b4dfd9
5 changed files with 33 additions and 7 deletions
@@ -1,5 +1,7 @@
package de.dennisguse.opentracks.content.data;
import de.dennisguse.opentracks.R;
public abstract class Altitude {
private final double altitude_m;
@@ -12,12 +14,18 @@ public abstract class Altitude {
return altitude_m;
}
public abstract int getLabelId();
public static class WGS84 extends Altitude {
private WGS84(double altitude_m) {
super(altitude_m);
}
@Override
public int getLabelId() {
return R.string.wgs84;
}
public static Altitude of(double altitude_m) {
return new WGS84(altitude_m);
@@ -30,6 +38,10 @@ public abstract class Altitude {
super(altitude_m);
}
@Override
public int getLabelId() {
return R.string.egm2008;
}
public static Altitude of(double altitude_m) {
return new EGM2008(altitude_m);
@@ -276,10 +276,18 @@ public class StatisticsRecordingFragment extends Fragment {
if (preferenceShowAltitude) {
// Current altitude
Float altitude = latestTrackPoint != null && latestTrackPoint.hasAltitude() ? (float) latestTrackPoint.getAltitude().toM() : null;
Float altitude = null;
int labelId = R.string.value_unknown;
if (latestTrackPoint != null && latestTrackPoint.hasAltitude()) {
altitude = (float) latestTrackPoint.getAltitude().toM();
labelId = latestTrackPoint.getAltitude().getLabelId();
}
Pair<String, String> parts = StringUtils.formatAltitude(getContext(), altitude, preferenceMetricUnits);
viewBinding.statsAltitudeCurrentValue.setText(parts.first);
viewBinding.statsAltitudeCurrentUnit.setText(parts.second);
viewBinding.statsAltitudeCurrentLabelEgm.setText(labelId);
}
// Set coordinate
@@ -313,7 +321,7 @@ public class StatisticsRecordingFragment extends Fragment {
sharedPreferenceChangeListener.onSharedPreferenceChanged(sharedPreferences, getString(R.string.stats_rate_key));
}
this.latestTrackPoint = recordingData.getLatestTrackPoint();
latestTrackPoint = recordingData.getLatestTrackPoint();
if (latestTrackPoint != null && latestTrackPoint.hasLocation() && !latestTrackPoint.isRecent()) {
latestTrackPoint = null;
}
@@ -652,8 +652,6 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand
trackStatisticsUpdater.addTrackPoint(trackPoint, recordingDistanceInterval);
track.setTrackStatistics(trackStatisticsUpdater.getTrackStatistics());
recordingDataObservable.postValue(new RecordingData(track, trackPoint, sensorDataSet));
contentProviderUtils.updateTrack(track);
} catch (SQLiteException e) {
/*
@@ -761,12 +759,19 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand
//TODO This somehow should happen in the HandlerServer as we create a new TrackPoint.
TrackStatisticsUpdater tmpTrackStatisticsUpdater = new TrackStatisticsUpdater(trackStatisticsUpdater);
TrackPoint tmpLastTrackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT);
if (lastTrackPoint != null && lastTrackPoint.hasLocation()) {
//TODO Should happen in TrackPoint? via constructor
tmpLastTrackPoint.setAltitude(lastTrackPoint.getAltitude());
tmpLastTrackPoint.setLongitude(lastTrackPoint.getLongitude());
tmpLastTrackPoint.setLatitude(lastTrackPoint.getLatitude());
}
SensorDataSet sensorDataSet = fillWithSensorDataSet(tmpLastTrackPoint);
tmpTrackStatisticsUpdater.addTrackPoint(tmpLastTrackPoint, recordingDistanceInterval);
track.setTrackStatistics(tmpTrackStatisticsUpdater.getTrackStatistics());
recordingDataObservable.postValue(new RecordingData(track, tmpLastTrackPoint, sensorDataSet));
}