diff --git a/src/main/java/de/dennisguse/opentracks/content/data/TrackPoint.java b/src/main/java/de/dennisguse/opentracks/content/data/TrackPoint.java index 520a86806..363e4886a 100644 --- a/src/main/java/de/dennisguse/opentracks/content/data/TrackPoint.java +++ b/src/main/java/de/dennisguse/opentracks/content/data/TrackPoint.java @@ -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; } diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java index 688e8c385..bf74b1414 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java @@ -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()) { diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java index 6f05c9d6b..f331c9c8b 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java @@ -450,6 +450,10 @@ public class TrackRecordingService extends Service implements TrackPointCreator. } Pair> 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); 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 a28f744f2..94957960e 100644 --- a/src/main/java/de/dennisguse/opentracks/services/handlers/TrackPointCreator.java +++ b/src/main/java/de/dennisguse/opentracks/services/handlers/TrackPointCreator.java @@ -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); }