forked from upstream-mirrors/OpenTracks
Import: empty tracks cannot be imported as TrackStatistics cannot be restored.
#316.
This commit is contained in:
@@ -83,6 +83,21 @@ public class LegacyImportTest {
|
|||||||
assertTrackpoint(importedTrackPoints.get(5), TrackPoint.Type.TRACKPOINT, "2020-11-28T17:07:20.870Z", 1.234046, 12.340082, 417.99432373046875);
|
assertTrackpoint(importedTrackPoints.get(5), TrackPoint.Type.TRACKPOINT, "2020-11-28T17:07:20.870Z", 1.234046, 12.340082, 417.99432373046875);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* At least one valid location is required.
|
||||||
|
* Before v3.15.0, Tracks without TrackPoints could be created; such tracks cannot be imported as we cannot restore the TrackStatistics (especially startTime and stopTime).
|
||||||
|
*/
|
||||||
|
@LargeTest
|
||||||
|
@Test(expected = ImportParserException.class)
|
||||||
|
public void kml_without_locations() {
|
||||||
|
// given
|
||||||
|
KmlFileTrackImporter trackImporter = new KmlFileTrackImporter(context);
|
||||||
|
InputStream inputStream = InstrumentationRegistry.getInstrumentation().getContext().getResources().openRawResource(de.dennisguse.opentracks.debug.test.R.raw.legacy_kml_empty);
|
||||||
|
|
||||||
|
// when
|
||||||
|
importTrackId = trackImporter.importFile(inputStream);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check that data that contains pause (lat=100, lng=0) and resume (lat=200, lng=0) locations are restored to a segment break.
|
* Check that data that contains pause (lat=100, lng=0) and resume (lat=200, lng=0) locations are restored to a segment break.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ public class TrackStatisticsUpdaterTest {
|
|||||||
assertEquals(2.5, statistics.getMinElevation(), 0.01);
|
assertEquals(2.5, statistics.getMinElevation(), 0.01);
|
||||||
assertEquals(27.5, statistics.getMaxElevation(), 0.01);
|
assertEquals(27.5, statistics.getMaxElevation(), 0.01);
|
||||||
assertEquals(18.0, statistics.getTotalElevationGain(), 0.01);
|
assertEquals(18.0, statistics.getTotalElevationGain(), 0.01);
|
||||||
assertEquals(72.0, statistics.getTotalElevationLoss(), 0.01);
|
assertEquals(18.0, statistics.getTotalElevationLoss(), 0.01);
|
||||||
|
|
||||||
assertEquals(14.226, statistics.getMaxSpeed(), 0.01);
|
assertEquals(14.226, statistics.getMaxSpeed(), 0.01);
|
||||||
assertEquals(14.226, statistics.getAverageMovingSpeed(), 0.01);
|
assertEquals(14.226, statistics.getAverageMovingSpeed(), 0.01);
|
||||||
|
|||||||
@@ -0,0 +1,62 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<kml xmlns="http://www.opengis.net/kml/2.2"
|
||||||
|
xmlns:gx="http://www.google.com/kml/ext/2.2"
|
||||||
|
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||||
|
xmlns:opentracks="http://opentracksapp.com/xmlschemas/v1">
|
||||||
|
<Document>
|
||||||
|
<open>1</open>
|
||||||
|
<visibility>1</visibility>
|
||||||
|
<name><![CDATA[2020-08-24 20:57]]></name>
|
||||||
|
<atom:generator><![CDATA[OpenTracks]]></atom:generator>
|
||||||
|
<Style id="track">
|
||||||
|
<LineStyle><color>7f0000ff</color><width>4</width></LineStyle>
|
||||||
|
<IconStyle>
|
||||||
|
<scale>1.3</scale>
|
||||||
|
<Icon><href>http://earth.google.com/images/kml-icons/track-directional/track-0.png</href></Icon>
|
||||||
|
</IconStyle>
|
||||||
|
</Style>
|
||||||
|
<Style id="start"><IconStyle>
|
||||||
|
<scale>1.3</scale>
|
||||||
|
<Icon><href>http://maps.google.com/mapfiles/kml/paddle/grn-circle.png</href></Icon>
|
||||||
|
<hotSpot x="32" y="1" xunits="pixels" yunits="pixels"/>
|
||||||
|
</IconStyle></Style>
|
||||||
|
<Style id="end"><IconStyle>
|
||||||
|
<scale>1.3</scale>
|
||||||
|
<Icon><href>http://maps.google.com/mapfiles/kml/paddle/red-circle.png</href></Icon>
|
||||||
|
<hotSpot x="32" y="1" xunits="pixels" yunits="pixels"/>
|
||||||
|
</IconStyle></Style>
|
||||||
|
<Style id="waypoint"><IconStyle>
|
||||||
|
<scale>1.3</scale>
|
||||||
|
<Icon><href>http://maps.google.com/mapfiles/kml/pushpin/blue-pushpin.png</href></Icon>
|
||||||
|
<hotSpot x="20" y="2" xunits="pixels" yunits="pixels"/>
|
||||||
|
</IconStyle></Style>
|
||||||
|
<Schema id="schema">
|
||||||
|
<gx:SimpleArrayField name="speed" type="float">
|
||||||
|
<displayName><![CDATA[Speed (m/s)]]></displayName>
|
||||||
|
</gx:SimpleArrayField>
|
||||||
|
<gx:SimpleArrayField name="power" type="float">
|
||||||
|
<displayName><![CDATA[Power (W)]]></displayName>
|
||||||
|
</gx:SimpleArrayField>
|
||||||
|
<gx:SimpleArrayField name="cadence" type="float">
|
||||||
|
<displayName><![CDATA[Cadence (rpm)]]></displayName>
|
||||||
|
</gx:SimpleArrayField>
|
||||||
|
<gx:SimpleArrayField name="heart_rate" type="float">
|
||||||
|
<displayName><![CDATA[Heart rate (bpm)]]></displayName>
|
||||||
|
</gx:SimpleArrayField>
|
||||||
|
</Schema>
|
||||||
|
<Placemark>
|
||||||
|
<name><![CDATA[2020-08-24 20:57]]></name>
|
||||||
|
<description><![CDATA[]]></description>
|
||||||
|
<icon><![CDATA[UNKNOWN]]></icon>
|
||||||
|
<opentracks:trackid>9316e527-a5b8-47c5-bdbd-954b4be7d80e</opentracks:trackid>
|
||||||
|
<styleUrl>#track</styleUrl>
|
||||||
|
<ExtendedData>
|
||||||
|
<Data name="type"><value><![CDATA[unknown]]></value></Data>
|
||||||
|
</ExtendedData>
|
||||||
|
<gx:MultiTrack>
|
||||||
|
<altitudeMode>absolute</altitudeMode>
|
||||||
|
<gx:interpolate>1</gx:interpolate>
|
||||||
|
</gx:MultiTrack>
|
||||||
|
</Placemark>
|
||||||
|
</Document>
|
||||||
|
</kml>
|
||||||
@@ -257,6 +257,9 @@ abstract class AbstractFileTrackImporter extends DefaultHandler implements Track
|
|||||||
for (TrackPoint trackPoint : trackData.bufferedTrackPoints) {
|
for (TrackPoint trackPoint : trackData.bufferedTrackPoints) {
|
||||||
statistics.addTrackPoint(trackPoint, recordingDistanceInterval);
|
statistics.addTrackPoint(trackPoint, recordingDistanceInterval);
|
||||||
}
|
}
|
||||||
|
if (!statistics.isTrackInitialized()) {
|
||||||
|
throw new ImportParserException("Track did not contain any locations.");
|
||||||
|
}
|
||||||
trackData.track.setTrackStatistics(statistics.getTrackStatistics());
|
trackData.track.setTrackStatistics(statistics.getTrackStatistics());
|
||||||
|
|
||||||
Track track = contentProviderUtils.getTrack(trackData.track.getUuid());
|
Track track = contentProviderUtils.getTrack(trackData.track.getUuid());
|
||||||
|
|||||||
@@ -97,6 +97,10 @@ public class TrackStatisticsUpdater {
|
|||||||
return stats;
|
return stats;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isTrackInitialized() {
|
||||||
|
return trackInitialized;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds a trackPoint.
|
* Adds a trackPoint.
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user