Bugfix: reset TrackRecordingManager properly.

Fixes #901.
This commit is contained in:
Dennis Guse
2021-08-05 18:43:18 +02:00
parent 7a2741e508
commit 6f3efd9ff2
4 changed files with 42 additions and 16 deletions
@@ -310,11 +310,11 @@ public class TrackPoint {
} }
@Nullable @Nullable
public Distance distanceToPrevious(@NonNull TrackPoint previous) { public Distance distanceToPrevious(TrackPoint previous) {
if (hasSensorDistance()) { if (hasSensorDistance()) {
return getSensorDistance(); return getSensorDistance();
} }
if (!(hasLocation() && previous.hasLocation())) { if (previous == null || !(hasLocation() && previous.hasLocation())) {
return null; return null;
} }
@@ -111,6 +111,11 @@ class TrackRecordingManager {
tmpTrackStatisticsUpdater.addTrackPoint(current.first, recordingDistanceInterval); tmpTrackStatisticsUpdater.addTrackPoint(current.first, recordingDistanceInterval);
Track track = getTrack(); //Get copy Track track = getTrack(); //Get copy
if (track == null) {
Log.w(TAG, "Requesting data if not recording is taking place, should not be done.");
return null;
}
track.setTrackStatistics(tmpTrackStatisticsUpdater.getTrackStatistics()); track.setTrackStatistics(tmpTrackStatisticsUpdater.getTrackStatistics());
return new Pair<>(track, current); return new Pair<>(track, current);
@@ -157,26 +162,28 @@ class TrackRecordingManager {
} }
Distance distanceToLastTrackLocation = trackPoint.distanceToPrevious(lastValidTrackPoint); Distance distanceToLastTrackLocation = trackPoint.distanceToPrevious(lastValidTrackPoint);
if (distanceToLastTrackLocation.greaterThan(maxRecordingDistance)) { if (distanceToLastTrackLocation != null) {
insertTrackPointIfNewer(track, lastTrackPoint); if (distanceToLastTrackLocation.greaterThan(maxRecordingDistance)) {
insertTrackPointIfNewer(track, lastTrackPoint);
trackPoint.setType(TrackPoint.Type.SEGMENT_START_AUTOMATIC); trackPoint.setType(TrackPoint.Type.SEGMENT_START_AUTOMATIC);
insertTrackPoint(track, trackPoint); insertTrackPoint(track, trackPoint);
isIdle = false; isIdle = false;
lastTrackPoint = trackPoint; lastTrackPoint = trackPoint;
return; return;
} }
if (trackPoint.hasSensorData() || distanceToLastTrackLocation.greaterOrEqualThan(recordingDistanceInterval)) { if (trackPoint.hasSensorData() || distanceToLastTrackLocation.greaterOrEqualThan(recordingDistanceInterval)) {
insertTrackPointIfNewer(track, lastTrackPoint); insertTrackPointIfNewer(track, lastTrackPoint);
insertTrackPoint(track, trackPoint); insertTrackPoint(track, trackPoint);
isIdle = false; isIdle = false;
lastTrackPoint = trackPoint; lastTrackPoint = trackPoint;
return; return;
}
} }
if (!isIdle && !trackPoint.isMoving()) { if (!isIdle && !trackPoint.isMoving()) {
@@ -450,6 +450,10 @@ public class TrackRecordingService extends Service implements TrackPointCreator.
} }
Pair<Track, Pair<TrackPoint, SensorDataSet>> data = trackRecordingManager.get(handlerServer); Pair<Track, Pair<TrackPoint, SensorDataSet>> data = trackRecordingManager.get(handlerServer);
if (data == null) {
Log.w(TAG, "Requesting data if not recording is taking place, should not be done.");
return;
}
TrackPoint trackPoint = data.second.first; TrackPoint trackPoint = data.second.first;
egm2008CorrectionManager.correctAltitude(this, trackPoint); egm2008CorrectionManager.correctAltitude(this, trackPoint);
@@ -72,6 +72,10 @@ public class TrackPointCreator {
} }
public void resetSensorData() { public void resetSensorData() {
if (remoteSensorManager == null || altitudeSumManager == null) {
Log.d(TAG, "No recording running and no reset necessary.");
return;
}
remoteSensorManager.reset(); remoteSensorManager.reset();
altitudeSumManager.reset(); altitudeSumManager.reset();
} }
@@ -101,6 +105,16 @@ public class TrackPointCreator {
// } // }
// serviceExecutor = null; // serviceExecutor = null;
if (remoteSensorManager != null) {
remoteSensorManager.stop();
remoteSensorManager = null;
}
if (altitudeSumManager != null) {
altitudeSumManager.stop(context);
altitudeSumManager = null;
}
this.context = null; this.context = null;
} }
@@ -156,6 +170,7 @@ public class TrackPointCreator {
} }
//TODO Limit visibility //TODO Limit visibility
@VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
public Instant createNow() { public Instant createNow() {
return Instant.now(clock); return Instant.now(clock);
} }