Bugfix: TrackStatistics handles SEGMENT_START_AUTOMATIC properly.

This commit is contained in:
Dennis Guse
2021-04-12 18:56:34 +02:00
parent 67bbd9ca24
commit da70fca389
5 changed files with 32 additions and 18 deletions
@@ -59,7 +59,7 @@ public class TestDataUtil {
int i = 0; int i = 0;
List<TrackPoint> trackPoints = List.of( List<TrackPoint> trackPoints = List.of(
TrackPoint.createSegmentStartManualWithTime(Instant.ofEpochMilli(i++ + 1)), TrackPoint.createSegmentStartManualWithTime(Instant.ofEpochSecond(i++)),
createTrackPoint(i++), createTrackPoint(i++),
createTrackPoint(i++), createTrackPoint(i++),
createTrackPoint(i++), createTrackPoint(i++),
@@ -67,13 +67,13 @@ public class TestDataUtil {
createTrackPoint(i++), createTrackPoint(i++),
createTrackPoint(i++), createTrackPoint(i++),
createTrackPoint(i++), createTrackPoint(i++),
TrackPoint.createSegmentEndWithTime(Instant.ofEpochSecond(i++ + 1)), createTrackPoint(i++, TrackPoint.Type.SEGMENT_END_MANUAL),
TrackPoint.createSegmentStartManualWithTime(Instant.ofEpochSecond(i++)), TrackPoint.createSegmentStartManualWithTime(Instant.ofEpochSecond(i++)),
createTrackPoint(i++), createTrackPoint(i++),
createTrackPoint(i++), createTrackPoint(i++),
createTrackPoint(i++), createTrackPoint(i++),
TrackPoint.createSegmentEndWithTime(Instant.ofEpochSecond(i++ + 1)) createTrackPoint(i, TrackPoint.Type.SEGMENT_END_MANUAL)
); );
//TODO Use TrackStatisticsUpdater //TODO Use TrackStatisticsUpdater
@@ -110,11 +110,6 @@ public class TestDataUtil {
return pair.first; return pair.first;
} }
/**
* Creates a location.
*
* @param i the index for the TrackPoint.
*/
public static TrackPoint createTrackPoint(int i) { public static TrackPoint createTrackPoint(int i) {
TrackPoint trackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT); TrackPoint trackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT);
trackPoint.setLatitude(INITIAL_LATITUDE + (double) i / 10000.0); trackPoint.setLatitude(INITIAL_LATITUDE + (double) i / 10000.0);
@@ -90,11 +90,15 @@ public class ExportImportTest {
TrackRecordingService service = ((TrackRecordingService.Binder) mServiceRule.bindService(new Intent(context, TrackRecordingService.class))) TrackRecordingService service = ((TrackRecordingService.Binder) mServiceRule.bindService(new Intent(context, TrackRecordingService.class)))
.getService(); .getService();
trackId = service.startNewTrack(); 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; 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.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.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); 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.pauseCurrentTrack();
service.resumeCurrentTrack(); 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, 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, 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); 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.setCyclingCadence_rpm(cyclingCadence);
tp.setPower(power); tp.setPower(power);
tp.setAltitudeGain(altitudeGain); tp.setAltitudeGain(altitudeGain);
tp.setAltitudeLoss(altitudeGain); //TODO
tp.setSensorDistance(distance); tp.setSensorDistance(distance);
return tp; return tp;
} }
@@ -33,18 +33,18 @@ public class TrackStatisticsUpdaterTest {
// then // then
TrackStatistics statistics = subject.getTrackStatistics(); TrackStatistics statistics = subject.getTrackStatistics();
assertEquals(85.35, statistics.getTotalDistance().toM(), 0.01); assertEquals(99.58, statistics.getTotalDistance().toM(), 0.01);
assertEquals(Duration.ofMillis(13999), statistics.getTotalTime()); assertEquals(Duration.ofSeconds(14), statistics.getTotalTime());
assertEquals(Duration.ofSeconds(6), statistics.getMovingTime()); assertEquals(Duration.ofSeconds(7), statistics.getMovingTime());
assertEquals(2.5, statistics.getMinAltitude(), 0.01); assertEquals(2.5, statistics.getMinAltitude(), 0.01);
assertEquals(27.5, statistics.getMaxAltitude(), 0.01); assertEquals(27.5, statistics.getMaxAltitude(), 0.01);
assertEquals(27, statistics.getTotalAltitudeGain(), 0.01); assertEquals(36, statistics.getTotalAltitudeGain(), 0.01);
assertEquals(27.0, statistics.getTotalAltitudeLoss(), 0.01); assertEquals(36, statistics.getTotalAltitudeLoss(), 0.01);
assertEquals(14.226, statistics.getMaxSpeed().toMPS(), 0.01); assertEquals(14.226, statistics.getMaxSpeed().toMPS(), 0.01);
assertEquals(14.226, statistics.getAverageMovingSpeed().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 @Test
@@ -595,8 +595,8 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand
private void insertTrackPoint(@NonNull Track track, @NonNull TrackPoint trackPoint) { private void insertTrackPoint(@NonNull Track track, @NonNull TrackPoint trackPoint) {
try { try {
if (altitudeSumManager != null) { if (altitudeSumManager != null) {
trackPoint.setAltitudeGain(altitudeSumManager.getAltitudeGain_m()); trackPoint.setAltitudeGain(getAltitudeGain_m());
trackPoint.setAltitudeLoss(altitudeSumManager.getAltitudeLoss_m()); trackPoint.setAltitudeLoss(getAltitudeLoss_m());
altitudeSumManager.reset(); altitudeSumManager.reset();
} }
if (remoteSensorManager != null) { if (remoteSensorManager != null) {
@@ -689,6 +689,11 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand
this.remoteSensorManager = remoteSensorManager; this.remoteSensorManager = remoteSensorManager;
} }
@VisibleForTesting
public void setAltitudeSumManager(AltitudeSumManager altitudeSumManager) {
this.altitudeSumManager = altitudeSumManager;
}
public GpsStatusValue getGpsStatus() { public GpsStatusValue getGpsStatus() {
return handlerServer.getGpsStatus(); return handlerServer.getGpsStatus();
} }
@@ -123,7 +123,7 @@ public class TrackStatisticsUpdater {
currentSegment.setStopTime(trackPoint.getTime()); currentSegment.setStopTime(trackPoint.getTime());
currentSegment.setTotalTime(Duration.between(currentSegment.getStartTime(), trackPoint.getTime())); currentSegment.setTotalTime(Duration.between(currentSegment.getStartTime(), trackPoint.getTime()));
if (trackPoint.isSegmentStart()) { if (trackPoint.getType() == TrackPoint.Type.SEGMENT_START_MANUAL) {
reset(trackPoint); reset(trackPoint);
return; return;
} }
@@ -183,6 +183,11 @@ public class TrackStatisticsUpdater {
updateSpeed(trackPoint, lastTrackPoint); updateSpeed(trackPoint, lastTrackPoint);
} }
if (trackPoint.getType() == TrackPoint.Type.SEGMENT_START_AUTOMATIC) {
reset(trackPoint);
return;
}
lastTrackPoint = trackPoint; lastTrackPoint = trackPoint;
lastMovingTrackPoint = trackPoint; lastMovingTrackPoint = trackPoint;
} }