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 c76402675..870978911 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/content/data/TestDataUtil.java +++ b/src/androidTest/java/de/dennisguse/opentracks/content/data/TestDataUtil.java @@ -19,8 +19,6 @@ import de.dennisguse.opentracks.data.models.Position; import de.dennisguse.opentracks.data.models.Speed; import de.dennisguse.opentracks.data.models.Track; import de.dennisguse.opentracks.data.models.TrackPoint; -import de.dennisguse.opentracks.stats.SegmentStatisticUpdater; -import de.dennisguse.opentracks.stats.TrackStatisticsUpdater; import de.dennisguse.opentracks.ui.markers.MarkerUtils; import de.dennisguse.opentracks.util.FileUtils; @@ -160,20 +158,4 @@ public class TestDataUtil { return trackPoints; } } - - public static Pair buildTrackWithTrackPoints(ContentProviderUtils contentProviderUtils, int numberOfPoints) { - Track dummyTrack = new Track(); - dummyTrack.setId(new Track.Id(System.currentTimeMillis())); - dummyTrack.setName("Dummy Track"); - contentProviderUtils.insertTrack(dummyTrack); - TrackStatisticsUpdater trackStatisticsUpdater = new TrackStatisticsUpdater(); - for (int i = 0; i < numberOfPoints; i++) { - TrackPoint tp = TestDataUtil.createTrackPoint(i); - contentProviderUtils.insertTrackPoint(tp, dummyTrack.getId()); - trackStatisticsUpdater.addTrackPoint(tp); - } - dummyTrack.setStatistics(trackStatisticsUpdater.getTrackStatistics()); - contentProviderUtils.updateTrack(dummyTrack); - return new Pair<>(dummyTrack.getId(), trackStatisticsUpdater.getSegmentStatisticUpdater()); - } } diff --git a/src/androidTest/java/de/dennisguse/opentracks/services/announcement/VoiceAnnouncementUtilsTest.java b/src/androidTest/java/de/dennisguse/opentracks/services/announcement/VoiceAnnouncementUtilsTest.java index a4b5c8bbe..fca43146e 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/services/announcement/VoiceAnnouncementUtilsTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/services/announcement/VoiceAnnouncementUtilsTest.java @@ -26,15 +26,19 @@ import de.dennisguse.opentracks.LocaleRule; import de.dennisguse.opentracks.content.data.TestDataUtil; import de.dennisguse.opentracks.data.ContentProviderUtils; import de.dennisguse.opentracks.data.TrackPointIterator; +import de.dennisguse.opentracks.data.models.AltitudeGainLoss; import de.dennisguse.opentracks.data.models.Distance; import de.dennisguse.opentracks.data.models.HeartRate; import de.dennisguse.opentracks.data.models.Speed; +import de.dennisguse.opentracks.data.models.Statistics; import de.dennisguse.opentracks.data.models.Track; +import de.dennisguse.opentracks.data.models.TrackPoint; import de.dennisguse.opentracks.sensors.sensorData.SensorDataSet; import de.dennisguse.opentracks.settings.PreferencesUtils; import de.dennisguse.opentracks.settings.UnitSystem; import de.dennisguse.opentracks.stats.SegmentStatisticUpdater; import de.dennisguse.opentracks.stats.SensorStatistics; +import de.dennisguse.opentracks.stats.TrackStatisticsUpdater; import de.dennisguse.opentracks.ui.intervals.IntervalStatisticsUpdater; @RunWith(AndroidJUnit4.class) @@ -66,16 +70,19 @@ public class VoiceAnnouncementUtilsTest { @Test public void getAnnouncement_metric_speed() { - SegmentStatisticUpdater stats = new SegmentStatisticUpdater(); - stats.setStartTime(Instant.EPOCH); - stats.setTotalDistance(Distance.of(20000)); - stats.setTotalTime(Duration.ofHours(2).plusMinutes(5).plusSeconds(10)); - stats.setMovingTime(Duration.ofHours(1).plusMinutes(5).plusSeconds(10)); - stats.setMaxSpeed(Speed.of(100)); - stats.setTotalAltitudeGain(6000f); - - Track track = new Track(); - track.setTrackStatistics(stats); + Track track = new Track(new Statistics( + Instant.EPOCH, + Instant.EPOCH, + Duration.ofHours(2).plusMinutes(5).plusSeconds(10), + Duration.ofHours(1).plusMinutes(5).plusSeconds(10), + Distance.of(20000), + false, + Speed.of(100), + null, + null, + null, + null + )); SensorDataSet dataSet = Mockito.mock(SensorDataSet.class); Mockito.when(dataSet.getHeartRate()).thenReturn(new Pair<>(HeartRate.of(60), "unused")); @@ -89,16 +96,19 @@ public class VoiceAnnouncementUtilsTest { @Test public void getAnnouncement_metric_speed_rounding_check() { - SegmentStatisticUpdater stats = new SegmentStatisticUpdater(); - stats.setStartTime(Instant.EPOCH); - stats.setTotalDistance(Distance.of(20000)); - stats.setTotalTime(Duration.ofHours(1).plusMinutes(5).plusSeconds(10)); - stats.setMovingTime(Duration.ofHours(1).plusSeconds(1)); - stats.setMaxSpeed(Speed.of(100)); - stats.setTotalAltitudeGain(6000f); - - Track track = new Track(); - track.setTrackStatistics(stats); + Track track = new Track(new Statistics( + Instant.EPOCH, + Instant.EPOCH, + Duration.ofHours(2).plusMinutes(5).plusSeconds(10), + Duration.ofHours(1).plusSeconds(1), + Distance.of(20000), + false, + Speed.of(100), + null, + new AltitudeGainLoss(6000, 6000), + null, + null + )); SensorDataSet dataSet = Mockito.mock(SensorDataSet.class); Mockito.when(dataSet.getHeartRate()).thenReturn(new Pair<>(HeartRate.of(60), "unused")); @@ -112,16 +122,19 @@ public class VoiceAnnouncementUtilsTest { @Test public void getAnnouncement_metric_distance_rounding_check() { - SegmentStatisticUpdater stats = new SegmentStatisticUpdater(); - stats.setStartTime(Instant.EPOCH); - stats.setTotalDistance(Distance.of(19999)); - stats.setTotalTime(Duration.ofHours(1).plusMinutes(5).plusSeconds(10)); - stats.setMovingTime(Duration.ofHours(1)); - stats.setMaxSpeed(Speed.of(100)); - stats.setTotalAltitudeGain(6000f); - - Track track = new Track(); - track.setTrackStatistics(stats); + Track track = new Track(new Statistics( + Instant.EPOCH, + Instant.EPOCH, + Duration.ofHours(2).plusMinutes(5).plusSeconds(10), + Duration.ofHours(1), + Distance.of(19999), + false, + Speed.of(100), + null, + new AltitudeGainLoss(6000, 6000), + null, + null + )); SensorDataSet dataSet = Mockito.mock(SensorDataSet.class); Mockito.when(dataSet.getHeartRate()).thenReturn(new Pair<>(HeartRate.of(60), "unused")); @@ -135,16 +148,19 @@ public class VoiceAnnouncementUtilsTest { @Test public void getAnnouncement_metric_distance_rounding_check_two() { - SegmentStatisticUpdater stats = new SegmentStatisticUpdater(); - stats.setStartTime(Instant.EPOCH); - stats.setTotalDistance(Distance.of(19900)); - stats.setTotalTime(Duration.ofHours(1).plusMinutes(5).plusSeconds(10)); - stats.setMovingTime(Duration.ofHours(1)); - stats.setMaxSpeed(Speed.of(100)); - stats.setTotalAltitudeGain(6000f); - - Track track = new Track(); - track.setTrackStatistics(stats); + Track track = new Track(new Statistics( + Instant.EPOCH, + Instant.EPOCH, + Duration.ofHours(2).plusMinutes(5).plusSeconds(10), + Duration.ofHours(1), + Distance.of(19900), + false, + Speed.of(100), + null, + new AltitudeGainLoss(6000, 6000), + null, + null + )); SensorDataSet dataSet = Mockito.mock(SensorDataSet.class); Mockito.when(dataSet.getHeartRate()).thenReturn(new Pair<>(HeartRate.of(60), "unused")); @@ -160,7 +176,7 @@ public class VoiceAnnouncementUtilsTest { public void getAnnouncement_withInterval_metric_speed() { // given int numberOfPoints = 1000; - Pair trackWithStats = TestDataUtil.buildTrackWithTrackPoints(contentProviderUtils, numberOfPoints); + Pair trackWithStats = buildTrackWithTrackPoints(contentProviderUtils, numberOfPoints); Track.Id trackId = trackWithStats.first; SegmentStatisticUpdater stats = trackWithStats.second; IntervalStatisticsUpdater.Interval lastInterval; @@ -174,8 +190,7 @@ public class VoiceAnnouncementUtilsTest { SensorDataSet dataSet = Mockito.mock(SensorDataSet.class); Mockito.when(dataSet.getHeartRate()).thenReturn(new Pair<>(HeartRate.of(60), "unused")); - Track track = new Track(); - track.setTrackStatistics(stats); + Track track = new Track(stats.getStatistics()); // when String announcement = VoiceAnnouncementUtils.createStatistics(context, track, dataSet, UnitSystem.METRIC, true, lastInterval, null).toString(); @@ -186,16 +201,19 @@ public class VoiceAnnouncementUtilsTest { @Test public void getAnnouncement_metric_pace() { - SegmentStatisticUpdater stats = new SegmentStatisticUpdater(); - stats.setStartTime(Instant.EPOCH); - stats.setTotalDistance(Distance.of(20000)); - stats.setTotalTime(Duration.ofHours(2).plusMinutes(5).plusSeconds(10)); - stats.setMovingTime(Duration.ofHours(1).plusMinutes(5).plusSeconds(10)); - stats.setMaxSpeed(Speed.of(100)); - stats.setTotalAltitudeGain(6000f); - - Track track = new Track(); - track.setTrackStatistics(stats); + Track track = new Track(new Statistics( + Instant.EPOCH, + Instant.EPOCH, + Duration.ofHours(2).plusMinutes(5).plusSeconds(10), + Duration.ofHours(1).plusMinutes(5).plusSeconds(10), + Distance.of(20000), + false, + Speed.of(100), + null, + new AltitudeGainLoss(6000, 6000), + null, + null + )); SensorDataSet dataSet = Mockito.mock(SensorDataSet.class); Mockito.when(dataSet.getHeartRate()).thenReturn(new Pair<>(HeartRate.of(60), "unused")); @@ -211,7 +229,7 @@ public class VoiceAnnouncementUtilsTest { public void getAnnouncement_withInterval_metric_pace() { // given int numberOfPoints = 1000; - Pair trackWithStats = TestDataUtil.buildTrackWithTrackPoints(contentProviderUtils, numberOfPoints); + Pair trackWithStats = buildTrackWithTrackPoints(contentProviderUtils, numberOfPoints); Track.Id trackId = trackWithStats.first; SegmentStatisticUpdater stats = trackWithStats.second; IntervalStatisticsUpdater.Interval lastInterval; @@ -222,8 +240,7 @@ public class VoiceAnnouncementUtilsTest { lastInterval = intervalStatistics.getIntervalList().get(intervalStatistics.getIntervalList().size() - 1); } - Track track = new Track(); - track.setTrackStatistics(stats); + Track track = new Track(stats.getStatistics()); SensorDataSet dataSet = Mockito.mock(SensorDataSet.class); Mockito.when(dataSet.getHeartRate()).thenReturn(new Pair<>(HeartRate.of(60), "unused")); @@ -237,16 +254,19 @@ public class VoiceAnnouncementUtilsTest { @Test public void getAnnouncement_imperial_speed() { - SegmentStatisticUpdater stats = new SegmentStatisticUpdater(); - stats.setStartTime(Instant.EPOCH); - stats.setTotalDistance(Distance.of(20000)); - stats.setTotalTime(Duration.ofHours(2).plusMinutes(5).plusSeconds(10)); - stats.setMovingTime(Duration.ofHours(1).plusMinutes(5).plusSeconds(10)); - stats.setMaxSpeed(Speed.of(100)); - stats.setTotalAltitudeGain(6000f); - - Track track = new Track(); - track.setTrackStatistics(stats); + Track track = new Track(new Statistics( + Instant.EPOCH, + Instant.EPOCH, + Duration.ofHours(2).plusMinutes(5).plusSeconds(10), + Duration.ofHours(1).plusMinutes(5).plusSeconds(10), + Distance.of(20000), + false, + Speed.of(100), + null, + new AltitudeGainLoss(6000, 6000), + null, + null + )); SensorDataSet dataSet = Mockito.mock(SensorDataSet.class); Mockito.when(dataSet.getHeartRate()).thenReturn(new Pair<>(HeartRate.of(60), "unused")); @@ -260,14 +280,19 @@ public class VoiceAnnouncementUtilsTest { @Test public void getAnnouncement_imperial_speed_1() { - SegmentStatisticUpdater stats = new SegmentStatisticUpdater(); - stats.setStartTime(Instant.EPOCH); - stats.setTotalDistance(Distance.ofMile(1.1)); - stats.setTotalTime(Duration.ofHours(2).plusMinutes(5).plusSeconds(10)); - stats.setMovingTime(Duration.ofHours(1)); - - Track track = new Track(); - track.setTrackStatistics(stats); + Track track = new Track(new Statistics( + Instant.EPOCH, + Instant.EPOCH, + Duration.ofHours(2).plusMinutes(5).plusSeconds(10), + Duration.ofHours(1), + Distance.ofMile(1.1), + false, + null, + null, + null, + null, + null + )); SensorDataSet dataSet = Mockito.mock(SensorDataSet.class); Mockito.when(dataSet.getHeartRate()).thenReturn(new Pair<>(HeartRate.of(60), "unused")); @@ -281,14 +306,19 @@ public class VoiceAnnouncementUtilsTest { @Test public void getAnnouncement_imperial_meter_speed_1() { - SegmentStatisticUpdater stats = new SegmentStatisticUpdater(); - stats.setStartTime(Instant.EPOCH); - stats.setTotalDistance(Distance.ofMile(1.1)); - stats.setTotalTime(Duration.ofHours(2).plusMinutes(5).plusSeconds(10)); - stats.setMovingTime(Duration.ofHours(1)); - - Track track = new Track(); - track.setTrackStatistics(stats); + Track track = new Track(new Statistics( + Instant.EPOCH, + Instant.EPOCH, + Duration.ofHours(2).plusMinutes(5).plusSeconds(10), + Duration.ofHours(1), + Distance.ofMile(1.1), + false, + null, + null, + null, + null, + null + )); SensorDataSet dataSet = Mockito.mock(SensorDataSet.class); Mockito.when(dataSet.getHeartRate()).thenReturn(new Pair<>(HeartRate.of(60), "unused")); @@ -302,14 +332,19 @@ public class VoiceAnnouncementUtilsTest { @Test public void getAnnouncement_metric_speed_1() { - SegmentStatisticUpdater stats = new SegmentStatisticUpdater(); - stats.setStartTime(Instant.EPOCH); - stats.setTotalDistance(Distance.ofKilometer(1.1)); - stats.setTotalTime(Duration.ofHours(2).plusMinutes(5).plusSeconds(10)); - stats.setMovingTime(Duration.ofHours(1)); - - Track track = new Track(); - track.setTrackStatistics(stats); + Track track = new Track(new Statistics( + Instant.EPOCH, + Instant.EPOCH, + Duration.ofHours(2).plusMinutes(5).plusSeconds(10), + Duration.ofHours(1), + Distance.ofKilometer(1.1), + false, + null, + null, + null, + null, + null + )); SensorDataSet dataSet = Mockito.mock(SensorDataSet.class); Mockito.when(dataSet.getHeartRate()).thenReturn(new Pair<>(HeartRate.of(60), "unused")); @@ -325,7 +360,7 @@ public class VoiceAnnouncementUtilsTest { public void getAnnouncement_withInterval_imperial_speed() { // given int numberOfPoints = 1000; - Pair trackWithStats = TestDataUtil.buildTrackWithTrackPoints(contentProviderUtils, numberOfPoints); + Pair trackWithStats = buildTrackWithTrackPoints(contentProviderUtils, numberOfPoints); Track.Id trackId = trackWithStats.first; SegmentStatisticUpdater stats = trackWithStats.second; IntervalStatisticsUpdater.Interval lastInterval; @@ -336,8 +371,7 @@ public class VoiceAnnouncementUtilsTest { lastInterval = intervalStatistics.getIntervalList().get(intervalStatistics.getIntervalList().size() - 1); } - Track track = new Track(); - track.setTrackStatistics(stats); + Track track = new Track(stats.getStatistics()); SensorDataSet dataSet = Mockito.mock(SensorDataSet.class); Mockito.when(dataSet.getHeartRate()).thenReturn(new Pair<>(HeartRate.of(60), "unused")); @@ -351,16 +385,19 @@ public class VoiceAnnouncementUtilsTest { @Test public void getAnnouncement_imperial_pace() { - SegmentStatisticUpdater stats = new SegmentStatisticUpdater(); - stats.setStartTime(Instant.EPOCH); - stats.setTotalDistance(Distance.of(20000)); - stats.setTotalTime(Duration.ofHours(2).plusMinutes(5).plusSeconds(10)); - stats.setMovingTime(Duration.ofHours(1).plusMinutes(5).plusSeconds(10)); - stats.setMaxSpeed(Speed.of(100)); - stats.setTotalAltitudeGain(6000f); - - Track track = new Track(); - track.setTrackStatistics(stats); + Track track = new Track(new Statistics( + Instant.EPOCH, + Instant.EPOCH, + Duration.ofHours(2).plusMinutes(5).plusSeconds(10), + Duration.ofHours(1).plusMinutes(5).plusSeconds(10), + Distance.of(20000), + false, + Speed.of(100), + null, + new AltitudeGainLoss(6000, 6000), + null, + null + )); SensorDataSet dataSet = Mockito.mock(SensorDataSet.class); Mockito.when(dataSet.getHeartRate()).thenReturn(new Pair<>(HeartRate.of(60), "unused")); @@ -376,7 +413,7 @@ public class VoiceAnnouncementUtilsTest { public void getAnnouncement_withInterval_imperial_pace() { // given int numberOfPoints = 1000; - Pair trackWithStats = TestDataUtil.buildTrackWithTrackPoints(contentProviderUtils, numberOfPoints); + Pair trackWithStats = buildTrackWithTrackPoints(contentProviderUtils, numberOfPoints); Track.Id trackId = trackWithStats.first; SegmentStatisticUpdater stats = trackWithStats.second; IntervalStatisticsUpdater.Interval lastInterval; @@ -387,8 +424,7 @@ public class VoiceAnnouncementUtilsTest { lastInterval = intervalStatistics.getIntervalList().get(intervalStatistics.getIntervalList().size() - 1); } - Track track = new Track(); - track.setTrackStatistics(stats); + Track track = new Track(stats.getStatistics()); SensorDataSet dataSet = Mockito.mock(SensorDataSet.class); Mockito.when(dataSet.getHeartRate()).thenReturn(new Pair<>(HeartRate.of(60), "unused")); @@ -406,7 +442,7 @@ public class VoiceAnnouncementUtilsTest { PreferencesUtils.setVoiceAnnounceLapHeartRate(true); int numberOfPoints = 1000; - Pair trackWithStats = TestDataUtil.buildTrackWithTrackPoints(contentProviderUtils, numberOfPoints); + Pair trackWithStats = buildTrackWithTrackPoints(contentProviderUtils, numberOfPoints); Track.Id trackId = trackWithStats.first; SegmentStatisticUpdater stats = trackWithStats.second; IntervalStatisticsUpdater.Interval lastInterval; @@ -419,8 +455,7 @@ public class VoiceAnnouncementUtilsTest { SensorStatistics sensorStatistics = new SensorStatistics(HeartRate.of(180f), HeartRate.of(180f), null, null, null, null); - Track track = new Track(); - track.setTrackStatistics(stats); + Track track = new Track(stats.getStatistics()); SensorDataSet dataSet = Mockito.mock(SensorDataSet.class); Mockito.when(dataSet.getHeartRate()).thenReturn(new Pair<>(HeartRate.of(60), "unused")); @@ -444,7 +479,7 @@ public class VoiceAnnouncementUtilsTest { PreferencesUtils.setVoiceAnnounceLapSpeedPace(false); int numberOfPoints = 1000; - Pair trackWithStats = TestDataUtil.buildTrackWithTrackPoints(contentProviderUtils, numberOfPoints); + Pair trackWithStats = buildTrackWithTrackPoints(contentProviderUtils, numberOfPoints); Track.Id trackId = trackWithStats.first; SegmentStatisticUpdater stats = trackWithStats.second; IntervalStatisticsUpdater.Interval lastInterval; @@ -457,8 +492,7 @@ public class VoiceAnnouncementUtilsTest { SensorStatistics sensorStatistics = new SensorStatistics(HeartRate.of(180f), HeartRate.of(180f), null, null, null, null); - Track track = new Track(); - track.setTrackStatistics(stats); + Track track = new Track(stats.getStatistics()); SensorDataSet dataSet = Mockito.mock(SensorDataSet.class); Mockito.when(dataSet.getHeartRate()).thenReturn(new Pair<>(HeartRate.of(60), "unused")); @@ -484,4 +518,20 @@ public class VoiceAnnouncementUtilsTest { assertEquals("1.1 miles", MessageFormat.format(template, Map.of("n", 1.11))); assertEquals("1.2 miles", MessageFormat.format(template, Map.of("n", 1.18))); } + + public static Pair buildTrackWithTrackPoints(ContentProviderUtils contentProviderUtils, int numberOfPoints) { + Track dummyTrack = new Track(); + dummyTrack.setId(new Track.Id(System.currentTimeMillis())); + dummyTrack.setName("Dummy Track"); + contentProviderUtils.insertTrack(dummyTrack); + TrackStatisticsUpdater trackStatisticsUpdater = new TrackStatisticsUpdater(); + for (int i = 0; i < numberOfPoints; i++) { + TrackPoint tp = TestDataUtil.createTrackPoint(i); + contentProviderUtils.insertTrackPoint(tp, dummyTrack.getId()); + trackStatisticsUpdater.addTrackPoint(tp); + } + dummyTrack.setStatistics(trackStatisticsUpdater.getTrackStatistics()); + contentProviderUtils.updateTrack(dummyTrack); + return new Pair<>(dummyTrack.getId(), trackStatisticsUpdater.getSegmentStatisticUpdater()); + } } diff --git a/src/main/java/de/dennisguse/opentracks/data/models/Track.java b/src/main/java/de/dennisguse/opentracks/data/models/Track.java index b23bb559c..c20d6916d 100644 --- a/src/main/java/de/dennisguse/opentracks/data/models/Track.java +++ b/src/main/java/de/dennisguse/opentracks/data/models/Track.java @@ -54,11 +54,17 @@ public class Track { @NonNull private Statistics trackStatistics; + @Deprecated @VisibleForTesting public Track() { this(ZoneOffset.UTC); } + @VisibleForTesting + public Track(Statistics statistics) { + this(ZoneOffset.UTC, statistics); + } + @Deprecated //TODO Remove public Track(@NonNull ZoneOffset zoneOffset) { this(zoneOffset, new SegmentStatisticUpdater().getStatistics());