mirror of
https://codeberg.org/OpenTracksApp/OpenTracks.git
synced 2026-10-11 21:43:05 +02:00
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());
|
List<TrackPoint> trackPoints = contentProviderUtils.getTrackPoints(track.getId());
|
||||||
IntervalStatistics intervalStatistics = new IntervalStatistics();
|
IntervalStatistics intervalStatistics = new IntervalStatistics();
|
||||||
intervalStatistics.build(trackPoints, (float) (PreferencesUtils.isMetricUnits(context) ? 1 * UnitConversions.KM_TO_M : 1 * UnitConversions.MI_TO_M));
|
intervalStatistics.build(trackPoints, (float) (PreferencesUtils.isMetricUnits(context) ? 1d * UnitConversions.KM_TO_M : 1d * UnitConversions.MI_TO_M));
|
||||||
int numIntervals = intervalStatistics.getIntervalList().size();
|
IntervalStatistics.Interval lastInterval = intervalStatistics.getLastInterval();
|
||||||
IntervalStatistics.Interval lastInterval = numIntervals > 0 ? intervalStatistics.getIntervalList().get(numIntervals - 1) : null;
|
|
||||||
|
|
||||||
String announcement = AnnouncementUtils.getAnnouncement(context, trackStatistics, category, lastInterval);
|
String announcement = AnnouncementUtils.getAnnouncement(context, trackStatistics, category, lastInterval);
|
||||||
speakAnnouncement(announcement);
|
speakAnnouncement(announcement);
|
||||||
|
|||||||
@@ -8,7 +8,8 @@ import de.dennisguse.opentracks.util.LocationUtils;
|
|||||||
import de.dennisguse.opentracks.util.UnitConversions;
|
import de.dennisguse.opentracks.util.UnitConversions;
|
||||||
|
|
||||||
public class IntervalStatistics {
|
public class IntervalStatistics {
|
||||||
List<Interval> intervalList = new ArrayList<>();
|
private List<Interval> intervalList = new ArrayList<>();
|
||||||
|
private float distanceInterval_m;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param trackPointList the list of TrackPoint.
|
* @param trackPointList the list of TrackPoint.
|
||||||
@@ -16,6 +17,7 @@ public class IntervalStatistics {
|
|||||||
*/
|
*/
|
||||||
public void build(List<TrackPoint> trackPointList, float distanceInterval_m) {
|
public void build(List<TrackPoint> trackPointList, float distanceInterval_m) {
|
||||||
intervalList.clear();
|
intervalList.clear();
|
||||||
|
this.distanceInterval_m = distanceInterval_m;
|
||||||
|
|
||||||
if (trackPointList == null || trackPointList.size() == 0) {
|
if (trackPointList == null || trackPointList.size() == 0) {
|
||||||
return;
|
return;
|
||||||
@@ -51,6 +53,30 @@ public class IntervalStatistics {
|
|||||||
return intervalList;
|
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 {
|
public static class Interval {
|
||||||
private float distance_m = 0f;
|
private float distance_m = 0f;
|
||||||
private float time_ms = 0f;
|
private float time_ms = 0f;
|
||||||
|
|||||||
Reference in New Issue
Block a user