ChartView: missing (sensor) data does not draw until the end.

Fixes #42.
This commit is contained in:
Dennis Guse
2021-04-02 17:41:24 +02:00
parent 405120a78b
commit 7be4ac436c
@@ -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;
} }
/** /**