forked from upstream-mirrors/OpenTracks
ChartView: missing (sensor) data does not draw until the end.
Fixes #42.
This commit is contained in:
@@ -41,6 +41,7 @@ import java.text.NumberFormat;
|
|||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
import de.dennisguse.opentracks.MarkerDetailActivity;
|
import de.dennisguse.opentracks.MarkerDetailActivity;
|
||||||
import de.dennisguse.opentracks.R;
|
import de.dennisguse.opentracks.R;
|
||||||
@@ -893,35 +894,23 @@ public class ChartView extends View {
|
|||||||
|
|
||||||
private void closePaths() {
|
private void closePaths() {
|
||||||
for (ChartValueSeries chartValueSeries : seriesList) {
|
for (ChartValueSeries chartValueSeries : seriesList) {
|
||||||
int first = getFirstPopulatedChartDataIndex(chartValueSeries);
|
Optional<ChartPoint> firstValid = chartPoints.stream().filter(chartValueSeries::isChartPointValid)
|
||||||
|
.findFirst();
|
||||||
|
Optional<ChartPoint> lastValid = chartPoints.stream().filter(chartValueSeries::isChartPointValid)
|
||||||
|
.reduce((first, second) -> second);
|
||||||
|
|
||||||
if (first != -1) {
|
if (firstValid.isPresent()) {
|
||||||
int xCorner = getX(chartPoints.get(first).getTimeOrDistance());
|
|
||||||
int yCorner = topBorder + effectiveHeight;
|
|
||||||
Path path = chartValueSeries.getPath();
|
Path path = chartValueSeries.getPath();
|
||||||
// Bottom right corner
|
|
||||||
path.lineTo(getX(chartPoints.get(chartPoints.size() - 1).getTimeOrDistance()), yCorner);
|
|
||||||
// Bottom left corner
|
|
||||||
path.lineTo(xCorner, yCorner);
|
|
||||||
// Top right corner
|
|
||||||
double value = chartValueSeries.extractDataFromChartPoint(chartPoints.get(first));
|
|
||||||
path.lineTo(xCorner, getY(chartValueSeries, value));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
int yCorner = topBorder + effectiveHeight;
|
||||||
* Finds the index of the first data point containing data for a series.
|
|
||||||
*
|
path.lineTo(getX(lastValid.get().getTimeOrDistance()), yCorner);
|
||||||
* @return -1 if no data point contains data for the series.
|
path.lineTo(getX(firstValid.get().getTimeOrDistance()), yCorner);
|
||||||
*/
|
|
||||||
private int getFirstPopulatedChartDataIndex(ChartValueSeries chartValueSeries) {
|
double value = chartValueSeries.extractDataFromChartPoint(firstValid.get());
|
||||||
for (int i = 0; i < chartPoints.size(); i++) {
|
path.lineTo(getX(firstValid.get().getTimeOrDistance()), getY(chartValueSeries, value));
|
||||||
if (chartValueSeries.isChartPointValid(chartPoints.get(i))) {
|
|
||||||
return i;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user