diff --git a/src/main/java/de/dennisguse/opentracks/services/tasks/AnnouncementPeriodicTask.java b/src/main/java/de/dennisguse/opentracks/services/tasks/AnnouncementPeriodicTask.java index 65f0ee203..c0359b01c 100644 --- a/src/main/java/de/dennisguse/opentracks/services/tasks/AnnouncementPeriodicTask.java +++ b/src/main/java/de/dennisguse/opentracks/services/tasks/AnnouncementPeriodicTask.java @@ -169,9 +169,8 @@ public class AnnouncementPeriodicTask implements PeriodicTask { List trackPoints = contentProviderUtils.getTrackPoints(track.getId()); IntervalStatistics intervalStatistics = new IntervalStatistics(); - intervalStatistics.build(trackPoints, (float) (PreferencesUtils.isMetricUnits(context) ? 1 * UnitConversions.KM_TO_M : 1 * UnitConversions.MI_TO_M)); - int numIntervals = intervalStatistics.getIntervalList().size(); - IntervalStatistics.Interval lastInterval = numIntervals > 0 ? intervalStatistics.getIntervalList().get(numIntervals - 1) : null; + intervalStatistics.build(trackPoints, (float) (PreferencesUtils.isMetricUnits(context) ? 1d * UnitConversions.KM_TO_M : 1d * UnitConversions.MI_TO_M)); + IntervalStatistics.Interval lastInterval = intervalStatistics.getLastInterval(); String announcement = AnnouncementUtils.getAnnouncement(context, trackStatistics, category, lastInterval); speakAnnouncement(announcement); diff --git a/src/main/java/de/dennisguse/opentracks/viewmodels/IntervalStatistics.java b/src/main/java/de/dennisguse/opentracks/viewmodels/IntervalStatistics.java index 490021e2a..cb703478f 100644 --- a/src/main/java/de/dennisguse/opentracks/viewmodels/IntervalStatistics.java +++ b/src/main/java/de/dennisguse/opentracks/viewmodels/IntervalStatistics.java @@ -8,7 +8,8 @@ import de.dennisguse.opentracks.util.LocationUtils; import de.dennisguse.opentracks.util.UnitConversions; public class IntervalStatistics { - List intervalList = new ArrayList<>(); + private List intervalList = new ArrayList<>(); + private float distanceInterval_m; /** * @param trackPointList the list of TrackPoint. @@ -16,6 +17,7 @@ public class IntervalStatistics { */ public void build(List trackPointList, float distanceInterval_m) { intervalList.clear(); + this.distanceInterval_m = distanceInterval_m; if (trackPointList == null || trackPointList.size() == 0) { return; @@ -51,6 +53,30 @@ public class IntervalStatistics { return intervalList; } + /** + * Return the last completed interval. + * An interval is complete if its distance is equal to distanceInterval_m. + * + * @return the interval object or null if any interval is completed. + */ + public Interval getLastInterval() { + if (intervalList == null) { + return null; + } + + if (intervalList.size() == 1 && intervalList.get(0).getDistance_m() < distanceInterval_m) { + return null; + } + + for (int i = intervalList.size() - 1; i >= 0; i--) { + if (intervalList.get(i).getDistance_m() >= distanceInterval_m) { + return this.intervalList.get(i); + } + } + + return null; + } + public static class Interval { private float distance_m = 0f; private float time_ms = 0f;