From 04b8d0f4a825b7b860a4ef4367ed53ce4d5b7eb2 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Thu, 3 Sep 2020 23:43:20 +0200 Subject: [PATCH] Import/Export: elevation gain per TrackPoint. --- .../opentracks/content/data/TestDataUtil.java | 2 +- .../io/file/importer/ExportImportTest.java | 11 +++++--- .../io/file/exporter/KmlTrackWriter.java | 8 ++++++ .../file/importer/KmlFileTrackImporter.java | 28 ++++++++++++------- 4 files changed, 34 insertions(+), 15 deletions(-) diff --git a/src/androidTest/java/de/dennisguse/opentracks/content/data/TestDataUtil.java b/src/androidTest/java/de/dennisguse/opentracks/content/data/TestDataUtil.java index 83c272937..9ae50ac84 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/content/data/TestDataUtil.java +++ b/src/androidTest/java/de/dennisguse/opentracks/content/data/TestDataUtil.java @@ -68,9 +68,9 @@ public class TestDataUtil { trackPoint.setSpeed(5f + (i / 10)); trackPoint.setHeartRate_bpm(100f + i); - trackPoint.setCyclingCadence_rpm(200f + i); trackPoint.setCyclingCadence_rpm(300f + i); trackPoint.setPower(400f + i); + trackPoint.setElevationGain(500f + i); return trackPoint; } diff --git a/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/ExportImportTest.java b/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/ExportImportTest.java index 4b58f68d4..7520f790f 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/ExportImportTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/ExportImportTest.java @@ -133,7 +133,7 @@ public class ExportImportTest { assertMarkers(); // 3. trackpoints - assertTrackpoints(false, false, false); + assertTrackpoints(false, false, false, false); } @LargeTest @@ -168,7 +168,7 @@ public class ExportImportTest { assertMarkers(); // 3. trackpoints - assertTrackpoints(true, true, true); + assertTrackpoints(true, true, true, true); } @LargeTest @@ -257,7 +257,7 @@ public class ExportImportTest { assertMarkers(); // 3. trackpoints - assertTrackpoints(false, true, true); + assertTrackpoints(false, true, true, false); } @LargeTest @@ -304,7 +304,7 @@ public class ExportImportTest { } } - private void assertTrackpoints(boolean verifyPower, boolean verifyHeartrate, boolean verifyCadence) { + private void assertTrackpoints(boolean verifyPower, boolean verifyHeartrate, boolean verifyCadence, boolean verifyElevationGain) { List importedTrackPoints = contentProviderUtils.getTrackPoints(importTrackId); assertEquals(trackPoints.size(), importedTrackPoints.size()); @@ -330,6 +330,9 @@ public class ExportImportTest { if (verifyPower) { assertEquals(trackPoint.getPower(), importedTrackPoint.getPower(), 0.01); } + if (verifyElevationGain) { + assertEquals(trackPoint.getElevationGain(), importedTrackPoint.getElevationGain(), 0.01); + } } } } \ No newline at end of file diff --git a/src/main/java/de/dennisguse/opentracks/io/file/exporter/KmlTrackWriter.java b/src/main/java/de/dennisguse/opentracks/io/file/exporter/KmlTrackWriter.java index 3311e32c8..4e34c54d3 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/exporter/KmlTrackWriter.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/exporter/KmlTrackWriter.java @@ -50,6 +50,7 @@ public class KmlTrackWriter implements TrackWriter { public static final String EXTENDED_DATA_TYPE_CADENCE = "cadence"; public static final String EXTENDED_DATA_TYPE_HEART_RATE = "heart_rate"; public static final String EXTENDED_DATA_TYPE_POWER = "power"; + public static final String EXTENDED_DATA_TYPE_ELEVATION_GAIN = "elevation_gain"; private static final String WAYPOINT_ICON = "http://maps.google.com/mapfiles/kml/pushpin/blue-pushpin.png"; private static final String START_ICON = "http://maps.google.com/mapfiles/kml/paddle/grn-circle.png"; @@ -68,6 +69,7 @@ public class KmlTrackWriter implements TrackWriter { private final List powerList = new ArrayList<>(); private final List cadenceList = new ArrayList<>(); private final List heartRateList = new ArrayList<>(); + private final List elevationGainList = new ArrayList<>(); private TrackPoint startTrackPoint; @@ -257,6 +259,9 @@ public class KmlTrackWriter implements TrackWriter { if (heartRateList.size() > 0) { writeSimpleArrayData(heartRateList, EXTENDED_DATA_TYPE_HEART_RATE); } + if (elevationGainList.size() > 0) { + writeSimpleArrayData(elevationGainList, EXTENDED_DATA_TYPE_ELEVATION_GAIN); + } } printWriter.println(""); printWriter.println(""); @@ -287,6 +292,9 @@ public class KmlTrackWriter implements TrackWriter { if (trackPoint.hasPower()) { powerList.add(trackPoint.getPower()); } + if (trackPoint.hasElevationGain()) { + elevationGainList.add(trackPoint.getElevationGain()); + } } } } diff --git a/src/main/java/de/dennisguse/opentracks/io/file/importer/KmlFileTrackImporter.java b/src/main/java/de/dennisguse/opentracks/io/file/importer/KmlFileTrackImporter.java index 83bb2fa41..dbea4f76c 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/importer/KmlFileTrackImporter.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/importer/KmlFileTrackImporter.java @@ -63,11 +63,12 @@ public class KmlFileTrackImporter extends AbstractFileTrackImporter { private boolean trackStarted = false; private String extendedDataType; - private ArrayList trackPoints; - private ArrayList speedList; - private ArrayList cadenceList; - private ArrayList heartRateList; - private ArrayList powerList; + private ArrayList trackPoints = new ArrayList<>(); + private ArrayList speedList = new ArrayList<>(); + private ArrayList cadenceList = new ArrayList<>(); + private ArrayList heartRateList = new ArrayList<>(); + private ArrayList powerList = new ArrayList<>(); + private ArrayList elevationGainList = new ArrayList<>(); public KmlFileTrackImporter(Context context) { this(context, new ContentProviderUtils(context)); @@ -223,11 +224,12 @@ public class KmlFileTrackImporter extends AbstractFileTrackImporter { @Override protected void onTrackSegmentStart() { super.onTrackSegmentStart(); - trackPoints = new ArrayList<>(); - speedList = new ArrayList<>(); - heartRateList = new ArrayList<>(); - cadenceList = new ArrayList<>(); - powerList = new ArrayList<>(); + trackPoints.clear(); + speedList.clear(); + heartRateList.clear(); + cadenceList.clear(); + powerList.clear(); + elevationGainList.clear(); } /** @@ -250,6 +252,9 @@ public class KmlFileTrackImporter extends AbstractFileTrackImporter { if (i < powerList.size()) { trackPoint.setPower(powerList.get(i)); } + if (i < elevationGainList.size()) { + trackPoint.setElevationGain(elevationGainList.get(i)); + } insertTrackPoint(trackPoint); } @@ -316,6 +321,9 @@ public class KmlFileTrackImporter extends AbstractFileTrackImporter { case KmlTrackWriter.EXTENDED_DATA_TYPE_CADENCE: cadenceList.add(value); break; + case KmlTrackWriter.EXTENDED_DATA_TYPE_ELEVATION_GAIN: + elevationGainList.add(value); + break; default: Log.w(TAG, "Data from extended data " + extendedDataType + " is not (yet) supported."); }