forked from upstream-mirrors/OpenTracks
Bugfix: interval stats announced incorrectly because an error in last interval computing. Fixes #443.
This commit is contained in:
@@ -169,9 +169,8 @@ public class AnnouncementPeriodicTask implements PeriodicTask {
|
||||
|
||||
List<TrackPoint> 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);
|
||||
|
||||
@@ -8,7 +8,8 @@ import de.dennisguse.opentracks.util.LocationUtils;
|
||||
import de.dennisguse.opentracks.util.UnitConversions;
|
||||
|
||||
public class IntervalStatistics {
|
||||
List<Interval> intervalList = new ArrayList<>();
|
||||
private List<Interval> intervalList = new ArrayList<>();
|
||||
private float distanceInterval_m;
|
||||
|
||||
/**
|
||||
* @param trackPointList the list of TrackPoint.
|
||||
@@ -16,6 +17,7 @@ public class IntervalStatistics {
|
||||
*/
|
||||
public void build(List<TrackPoint> 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;
|
||||
|
||||
Reference in New Issue
Block a user