From da70fca389cabdd8a4e19198bb4870d8a81c0f0c Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Mon, 12 Apr 2021 18:56:34 +0200 Subject: [PATCH] Bugfix: TrackStatistics handles SEGMENT_START_AUTOMATIC properly. --- .../opentracks/content/data/TestDataUtil.java | 11 +++-------- .../io/file/importer/ExportImportTest.java | 11 ++++++++++- .../opentracks/stats/TrackStatisticsUpdaterTest.java | 12 ++++++------ .../opentracks/services/TrackRecordingService.java | 9 +++++++-- .../opentracks/stats/TrackStatisticsUpdater.java | 7 ++++++- 5 files changed, 32 insertions(+), 18 deletions(-) diff --git a/src/androidTest/java/de/dennisguse/opentracks/content/data/TestDataUtil.java b/src/androidTest/java/de/dennisguse/opentracks/content/data/TestDataUtil.java index bc9f9521f..80cee95cf 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/content/data/TestDataUtil.java +++ b/src/androidTest/java/de/dennisguse/opentracks/content/data/TestDataUtil.java @@ -59,7 +59,7 @@ public class TestDataUtil { int i = 0; List trackPoints = List.of( - TrackPoint.createSegmentStartManualWithTime(Instant.ofEpochMilli(i++ + 1)), + TrackPoint.createSegmentStartManualWithTime(Instant.ofEpochSecond(i++)), createTrackPoint(i++), createTrackPoint(i++), createTrackPoint(i++), @@ -67,13 +67,13 @@ public class TestDataUtil { createTrackPoint(i++), createTrackPoint(i++), createTrackPoint(i++), - TrackPoint.createSegmentEndWithTime(Instant.ofEpochSecond(i++ + 1)), + createTrackPoint(i++, TrackPoint.Type.SEGMENT_END_MANUAL), TrackPoint.createSegmentStartManualWithTime(Instant.ofEpochSecond(i++)), createTrackPoint(i++), createTrackPoint(i++), createTrackPoint(i++), - TrackPoint.createSegmentEndWithTime(Instant.ofEpochSecond(i++ + 1)) + createTrackPoint(i, TrackPoint.Type.SEGMENT_END_MANUAL) ); //TODO Use TrackStatisticsUpdater @@ -110,11 +110,6 @@ public class TestDataUtil { return pair.first; } - /** - * Creates a location. - * - * @param i the index for the TrackPoint. - */ public static TrackPoint createTrackPoint(int i) { TrackPoint trackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT); trackPoint.setLatitude(INITIAL_LATITUDE + (double) i / 10000.0); diff --git a/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/ExportImportTest.java b/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/ExportImportTest.java index 1cfa01652..3703b74d9 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/ExportImportTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/ExportImportTest.java @@ -90,11 +90,15 @@ public class ExportImportTest { TrackRecordingService service = ((TrackRecordingService.Binder) mServiceRule.bindService(new Intent(context, TrackRecordingService.class))) .getService(); + trackId = service.startNewTrack(); + //TODO Workaround as those managers overwrite input data; We need to refactor TrackRecordingService to make it actually testable + service.setAltitudeSumManager(null); + service.setRemoteSensorManager(null); Distance sensorDistance = hasSensorDistance ? Distance.of(5) : null; - service.newTrackPoint(createTrackPoint(System.currentTimeMillis(), 3, 14, 10, 15, 10, 0, 66, 3, 50, sensorDistance), 0); + service.newTrackPoint(createTrackPoint(System.currentTimeMillis(), 3, 14, 10, 15, 10, 1, 66, 3, 50, sensorDistance), 0); service.insertMarker("Marker 1", "Marker 1 category", "Marker 1 desc", null); service.newTrackPoint(createTrackPoint(System.currentTimeMillis(), 3, 14.001, 10, 15, 10, 0, 66, 3, 50, sensorDistance), 0); service.newTrackPoint(createTrackPoint(System.currentTimeMillis(), 3, 14.002, 10, 15, 10, 0, 66, 3, 50, sensorDistance), 0); @@ -102,6 +106,10 @@ public class ExportImportTest { service.pauseCurrentTrack(); service.resumeCurrentTrack(); + //TODO Workaround as those managers overwrite input data; We need to refactor TrackRecordingService to make it actually testable + service.setAltitudeSumManager(null); + service.setRemoteSensorManager(null); + service.newTrackPoint(createTrackPoint(System.currentTimeMillis(), 3, 14.003, 10, 15, 10, 0, 66, 3, 50, sensorDistance), 0); service.newTrackPoint(createTrackPoint(System.currentTimeMillis(), 3, 16, 10, 15, 10, 0, 66, 3, 50, sensorDistance), 0); service.newTrackPoint(createTrackPoint(System.currentTimeMillis(), 3, 16.001, 10, 15, 10, 0, 66, 3, 50, sensorDistance), 0); @@ -437,6 +445,7 @@ public class ExportImportTest { tp.setCyclingCadence_rpm(cyclingCadence); tp.setPower(power); tp.setAltitudeGain(altitudeGain); + tp.setAltitudeLoss(altitudeGain); //TODO tp.setSensorDistance(distance); return tp; } diff --git a/src/androidTest/java/de/dennisguse/opentracks/stats/TrackStatisticsUpdaterTest.java b/src/androidTest/java/de/dennisguse/opentracks/stats/TrackStatisticsUpdaterTest.java index 330226168..96c4c5cc8 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/stats/TrackStatisticsUpdaterTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/stats/TrackStatisticsUpdaterTest.java @@ -33,18 +33,18 @@ public class TrackStatisticsUpdaterTest { // then TrackStatistics statistics = subject.getTrackStatistics(); - assertEquals(85.35, statistics.getTotalDistance().toM(), 0.01); - assertEquals(Duration.ofMillis(13999), statistics.getTotalTime()); - assertEquals(Duration.ofSeconds(6), statistics.getMovingTime()); + assertEquals(99.58, statistics.getTotalDistance().toM(), 0.01); + assertEquals(Duration.ofSeconds(14), statistics.getTotalTime()); + assertEquals(Duration.ofSeconds(7), statistics.getMovingTime()); assertEquals(2.5, statistics.getMinAltitude(), 0.01); assertEquals(27.5, statistics.getMaxAltitude(), 0.01); - assertEquals(27, statistics.getTotalAltitudeGain(), 0.01); - assertEquals(27.0, statistics.getTotalAltitudeLoss(), 0.01); + assertEquals(36, statistics.getTotalAltitudeGain(), 0.01); + assertEquals(36, statistics.getTotalAltitudeLoss(), 0.01); assertEquals(14.226, statistics.getMaxSpeed().toMPS(), 0.01); assertEquals(14.226, statistics.getAverageMovingSpeed().toMPS(), 0.01); - assertEquals(6.566, statistics.getAverageSpeed().toMPS(), 0.01); + assertEquals(7.11, statistics.getAverageSpeed().toMPS(), 0.01); } @Test diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java index b52c6499f..a716cfa42 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java @@ -595,8 +595,8 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand private void insertTrackPoint(@NonNull Track track, @NonNull TrackPoint trackPoint) { try { if (altitudeSumManager != null) { - trackPoint.setAltitudeGain(altitudeSumManager.getAltitudeGain_m()); - trackPoint.setAltitudeLoss(altitudeSumManager.getAltitudeLoss_m()); + trackPoint.setAltitudeGain(getAltitudeGain_m()); + trackPoint.setAltitudeLoss(getAltitudeLoss_m()); altitudeSumManager.reset(); } if (remoteSensorManager != null) { @@ -689,6 +689,11 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand this.remoteSensorManager = remoteSensorManager; } + @VisibleForTesting + public void setAltitudeSumManager(AltitudeSumManager altitudeSumManager) { + this.altitudeSumManager = altitudeSumManager; + } + public GpsStatusValue getGpsStatus() { return handlerServer.getGpsStatus(); } diff --git a/src/main/java/de/dennisguse/opentracks/stats/TrackStatisticsUpdater.java b/src/main/java/de/dennisguse/opentracks/stats/TrackStatisticsUpdater.java index 629f8b535..b99a88cbf 100644 --- a/src/main/java/de/dennisguse/opentracks/stats/TrackStatisticsUpdater.java +++ b/src/main/java/de/dennisguse/opentracks/stats/TrackStatisticsUpdater.java @@ -123,7 +123,7 @@ public class TrackStatisticsUpdater { currentSegment.setStopTime(trackPoint.getTime()); currentSegment.setTotalTime(Duration.between(currentSegment.getStartTime(), trackPoint.getTime())); - if (trackPoint.isSegmentStart()) { + if (trackPoint.getType() == TrackPoint.Type.SEGMENT_START_MANUAL) { reset(trackPoint); return; } @@ -183,6 +183,11 @@ public class TrackStatisticsUpdater { updateSpeed(trackPoint, lastTrackPoint); } + if (trackPoint.getType() == TrackPoint.Type.SEGMENT_START_AUTOMATIC) { + reset(trackPoint); + return; + } + lastTrackPoint = trackPoint; lastMovingTrackPoint = trackPoint; }