From 54b9c4370b094b462b746167a466f26c6b2ec147 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rom=C3=A1n?= Date: Thu, 16 Apr 2020 18:53:49 +0200 Subject: [PATCH] KML description: max/min elevation will not show if have invalid values (unknow). --- .../content/DescriptionGeneratorTest.java | 34 +++++++++++++++++++ .../content/DescriptionGenerator.java | 8 +++-- .../importer/AbstractFileTrackImporter.java | 3 ++ .../opentracks/stats/TrackStatistics.java | 8 +++++ 4 files changed, 51 insertions(+), 2 deletions(-) diff --git a/src/androidTest/java/de/dennisguse/opentracks/content/DescriptionGeneratorTest.java b/src/androidTest/java/de/dennisguse/opentracks/content/DescriptionGeneratorTest.java index 2daf4007d..232b7f620 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/content/DescriptionGeneratorTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/content/DescriptionGeneratorTest.java @@ -88,6 +88,40 @@ public class DescriptionGeneratorTest { Assert.assertEquals(expected, descriptionGenerator.generateTrackDescription(track, true)); } + @Test + public void testGenerateTrackDescriptionWithoutMaxMinElevation() { + Track track = new Track(); + TrackStatistics stats = new TrackStatistics(); + stats.setTotalDistance(20000); + stats.setTotalTime(600000); + stats.setMovingTime(300000); + stats.setMaxSpeed(100); + stats.setMaxElevation(Double.POSITIVE_INFINITY); + stats.setMinElevation(Double.NEGATIVE_INFINITY); + stats.setTotalElevationGain(6000); + stats.setStartTime_ms(START_TIME); + track.setTrackStatistics(stats); + track.setCategory("hiking"); + String expected = //"Created by" + "OpenTracks

" + + "Name: -
" + + "Activity type: hiking
" + + "Description: -
" + + "Total distance: 20.00 km (12.4 mi)
" + + "Total time: 10:00
" + + "Moving time: 05:00
" + + "Average speed: 120.00 km/h (74.6 mi/h)
" + + "Average moving speed: 240.00 km/h (149.1 mi/h)
" + + "Max speed: 360.00 km/h (223.7 mi/h)
" + + "Average pace: 0:30 min/km (0:48 min/mi)
" + + "Average moving pace: 0:15 min/km (0:24 min/mi)
" + + "Fastest pace: 0:10 min/km (0:16 min/mi)
" + + "Elevation gain: 6000 m (19685 ft)
" + + "Recorded: " + StringUtils.formatDateTime(context, START_TIME) + "
"; + + Assert.assertEquals(expected, descriptionGenerator.generateTrackDescription(track, true)); + } + /** * Tests {@link DescriptionGenerator#writeDistance(double, StringBuilder, int, String)}. diff --git a/src/main/java/de/dennisguse/opentracks/content/DescriptionGenerator.java b/src/main/java/de/dennisguse/opentracks/content/DescriptionGenerator.java index e4933e6f2..be850d530 100644 --- a/src/main/java/de/dennisguse/opentracks/content/DescriptionGenerator.java +++ b/src/main/java/de/dennisguse/opentracks/content/DescriptionGenerator.java @@ -126,10 +126,14 @@ public class DescriptionGenerator { writePace(stats.getMaxSpeed(), builder, R.string.description_fastest_pace_in_minute, lineBreak); // Max elevation - writeElevation(stats.getMaxElevation(), builder, R.string.description_max_elevation, lineBreak); + if (stats.hasElevationMax()) { + writeElevation(stats.getMaxElevation(), builder, R.string.description_max_elevation, lineBreak); + } // Min elevation - writeElevation(stats.getMinElevation(), builder, R.string.description_min_elevation, lineBreak); + if (stats.hasElevationMin()) { + writeElevation(stats.getMinElevation(), builder, R.string.description_min_elevation, lineBreak); + } // Elevation gain writeElevation(stats.getTotalElevationGain(), builder, R.string.description_elevation_gain, lineBreak); diff --git a/src/main/java/de/dennisguse/opentracks/io/file/importer/AbstractFileTrackImporter.java b/src/main/java/de/dennisguse/opentracks/io/file/importer/AbstractFileTrackImporter.java index 726a6ed00..3446e5873 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/importer/AbstractFileTrackImporter.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/importer/AbstractFileTrackImporter.java @@ -313,6 +313,9 @@ abstract class AbstractFileTrackImporter extends DefaultHandler implements Track */ protected TrackPoint getTrackPoint() throws SAXException { TrackPoint trackPoint = createTrackPoint(); + if (trackPoint == null) { + throw new SAXException(createErrorMessage("Invalid location detected: " + trackPoint)); + } // Calculate derived attributes from the previous point if (trackData.lastLocationInCurrentSegment != null && trackData.lastLocationInCurrentSegment.getTime() != 0) { diff --git a/src/main/java/de/dennisguse/opentracks/stats/TrackStatistics.java b/src/main/java/de/dennisguse/opentracks/stats/TrackStatistics.java index 37cd6b273..fa4fb271d 100644 --- a/src/main/java/de/dennisguse/opentracks/stats/TrackStatistics.java +++ b/src/main/java/de/dennisguse/opentracks/stats/TrackStatistics.java @@ -176,6 +176,10 @@ public class TrackStatistics { this.maxSpeed_mps = maxSpeed; } + public boolean hasElevationMin() { + return !Double.isInfinite(getMinElevation()); + } + /** * Gets the minimum elevation. * This is calculated from the smoothed elevation, so this can actually be more than the current elevation. @@ -193,6 +197,10 @@ public class TrackStatistics { elevationExtremities.setMin(elevation); } + public boolean hasElevationMax() { + return !Double.isInfinite(getMaxElevation()); + } + /** * Gets the maximum elevation. * This is calculated from the smoothed elevation, so this can actually be less than the current elevation.