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
public Distance distanceToPrevious(@NonNull TrackPoint previous) {
public Distance distanceToPrevious(TrackPoint previous) {
if (hasSensorDistance()) {
return getSensorDistance();
}
if (!(hasLocation() && previous.hasLocation())) {
if (previous == null || !(hasLocation() && previous.hasLocation())) {
return null;
}
@@ -111,6 +111,11 @@ class TrackRecordingManager {
tmpTrackStatisticsUpdater.addTrackPoint(current.first, recordingDistanceInterval);
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());
return new Pair<>(track, current);
@@ -157,26 +162,28 @@ class TrackRecordingManager {
}
Distance distanceToLastTrackLocation = trackPoint.distanceToPrevious(lastValidTrackPoint);
if (distanceToLastTrackLocation.greaterThan(maxRecordingDistance)) {
insertTrackPointIfNewer(track, lastTrackPoint);
if (distanceToLastTrackLocation != null) {
if (distanceToLastTrackLocation.greaterThan(maxRecordingDistance)) {
insertTrackPointIfNewer(track, lastTrackPoint);
trackPoint.setType(TrackPoint.Type.SEGMENT_START_AUTOMATIC);
insertTrackPoint(track, trackPoint);
trackPoint.setType(TrackPoint.Type.SEGMENT_START_AUTOMATIC);
insertTrackPoint(track, trackPoint);
isIdle = false;
lastTrackPoint = trackPoint;
return;
}
isIdle = false;
lastTrackPoint = trackPoint;
return;
}
if (trackPoint.hasSensorData() || distanceToLastTrackLocation.greaterOrEqualThan(recordingDistanceInterval)) {
insertTrackPointIfNewer(track, lastTrackPoint);
if (trackPoint.hasSensorData() || distanceToLastTrackLocation.greaterOrEqualThan(recordingDistanceInterval)) {
insertTrackPointIfNewer(track, lastTrackPoint);
insertTrackPoint(track, trackPoint);
insertTrackPoint(track, trackPoint);
isIdle = false;
isIdle = false;
lastTrackPoint = trackPoint;
return;
lastTrackPoint = trackPoint;
return;
}
}
if (!isIdle && !trackPoint.isMoving()) {
@@ -450,6 +450,10 @@ public class TrackRecordingService extends Service implements TrackPointCreator.
}
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;
egm2008CorrectionManager.correctAltitude(this, trackPoint);
@@ -72,6 +72,10 @@ public class TrackPointCreator {
}
public void resetSensorData() {
if (remoteSensorManager == null || altitudeSumManager == null) {
Log.d(TAG, "No recording running and no reset necessary.");
return;
}
remoteSensorManager.reset();
altitudeSumManager.reset();
}
@@ -101,6 +105,16 @@ public class TrackPointCreator {
// }
// serviceExecutor = null;
if (remoteSensorManager != null) {
remoteSensorManager.stop();
remoteSensorManager = null;
}
if (altitudeSumManager != null) {
altitudeSumManager.stop(context);
altitudeSumManager = null;
}
this.context = null;
}
@@ -156,6 +170,7 @@ public class TrackPointCreator {
}
//TODO Limit visibility
@VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
public Instant createNow() {
return Instant.now(clock);
}