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 04685d957..4920899a2 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/content/data/TestDataUtil.java +++ b/src/androidTest/java/de/dennisguse/opentracks/content/data/TestDataUtil.java @@ -119,8 +119,7 @@ public class TestDataUtil { trackPoint.setHeartRate(100f + i % 80); trackPoint.setCadence(300f + i); trackPoint.setPower(400f + i); - trackPoint.setAltitudeGain(ALTITUDE_GAIN); - trackPoint.setAltitudeLoss(ALTITUDE_LOSS); + trackPoint.setAltitudeGainLoss(ALTITUDE_GAIN, ALTITUDE_LOSS); return trackPoint; } diff --git a/src/androidTest/java/de/dennisguse/opentracks/content/data/TestSensorDataUtil.java b/src/androidTest/java/de/dennisguse/opentracks/content/data/TestSensorDataUtil.java index 563ae4f36..a20380b01 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/content/data/TestSensorDataUtil.java +++ b/src/androidTest/java/de/dennisguse/opentracks/content/data/TestSensorDataUtil.java @@ -41,8 +41,7 @@ public class TestSensorDataUtil { if (power != null) { tp.setPower(power); } - tp.setAltitudeGain(3f); - tp.setAltitudeLoss(3f); + tp.setAltitudeGainLoss(3, 3); trackPointList.add(tp); } 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 6c4ce1010..fa00a7577 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 @@ -237,17 +237,14 @@ public class ExportImportTest { Altitude.WGS84.of(1020.25), null, null, Speed.of(15))) - .setAltitudeLoss(1f) - .setAltitudeGain(1f), + .setAltitudeGainLoss(1, 1), new TrackPoint(TrackPoint.Type.TRACKPOINT, Instant.parse("2020-02-02T02:02:04Z")) .setSensorDistance(Distance.of(10)) .setSpeed(Speed.of(15)) .setHeartRate(HeartRate.of(66)) .setCadence(3) - .setPower(50) - .setAltitudeLoss(1f) - .setAltitudeGain(1f), + .setPower(50).setAltitudeGainLoss(1, 1), new TrackPoint(TrackPoint.Type.TRACKPOINT, Instant.parse("2020-02-02T02:02:15Z")) .setHeartRate(HeartRate.of(68)) .setCadence(3) @@ -260,8 +257,7 @@ public class ExportImportTest { null, Speed.of(5))) .setSensorDistance(Distance.of(2)) - .setAltitudeLoss(0f) - .setAltitudeGain(0f) + .setAltitudeGainLoss(0, 0) .setHeartRate(HeartRate.of(69)) .setCadence(3) .setPower(50), @@ -274,27 +270,23 @@ public class ExportImportTest { Altitude.WGS84.of(999.1229858398438), null, null, Speed.of(15))) - .setAltitudeLoss(0f) - .setAltitudeGain(0f), + .setAltitudeGainLoss(0, 0), new TrackPoint(TrackPoint.Type.SEGMENT_START_AUTOMATIC, new Position(Instant.parse("2020-02-02T02:03:22Z"), 3.123456, 16d, Distance.of(10), Altitude.WGS84.of(999.1229858398438), null, null, Speed.of(15))) - .setAltitudeLoss(0f) - .setAltitudeGain(0f), + .setAltitudeGainLoss(0, 0), new TrackPoint(TrackPoint.Type.IDLE, Instant.parse("2020-02-02T02:03:30Z")) - .setAltitudeLoss(0f) - .setAltitudeGain(0f), + .setAltitudeGainLoss(0, 0), new TrackPoint(TrackPoint.Type.TRACKPOINT, new Position( Instant.parse("2020-02-02T02:03:50Z"), 3.123456, 16.001, Distance.of(10), Altitude.WGS84.of(999.1229858398438), null, null, Speed.of(15))) - .setAltitudeLoss(0f) - .setAltitudeGain(0f), + .setAltitudeGainLoss(0, 0), new TrackPoint(TrackPoint.Type.SEGMENT_END_MANUAL, Instant.parse("2020-02-02T02:04:00Z")) ), actual); } @@ -433,8 +425,7 @@ public class ExportImportTest { Altitude.WGS84.of(1020.2), null, null, Speed.of(15))) - .setAltitudeLoss(1f) - .setAltitudeGain(1f), + .setAltitudeGainLoss(1, 1), new TrackPoint(TrackPoint.Type.TRACKPOINT, new Position( Instant.parse("2020-02-02T02:02:17Z"), @@ -442,8 +433,7 @@ public class ExportImportTest { Altitude.WGS84.of(1020.2), null, null, Speed.of(5))) - .setAltitudeLoss(1f) - .setAltitudeGain(1f) + .setAltitudeGainLoss(1, 1) .setSensorDistance(Distance.of(12)) .setHeartRate(69) .setPower(50f) @@ -455,8 +445,7 @@ public class ExportImportTest { Altitude.WGS84.of(999.0999755859375), null, null, Speed.of(15))) - .setAltitudeLoss(0f) - .setAltitudeGain(0f), + .setAltitudeGainLoss(0, 0), new TrackPoint(TrackPoint.Type.SEGMENT_START_AUTOMATIC, new Position( Instant.parse("2020-02-02T02:03:22Z"), @@ -464,8 +453,7 @@ public class ExportImportTest { Altitude.WGS84.of(999.0999755859375), null, null, Speed.of(15))) - .setAltitudeLoss(0f) - .setAltitudeGain(0f), + .setAltitudeGainLoss(0, 0), new TrackPoint(TrackPoint.Type.TRACKPOINT, new Position( Instant.parse("2020-02-02T02:03:50Z"), @@ -473,8 +461,7 @@ public class ExportImportTest { Altitude.WGS84.of(999.0999755859375), null, null, Speed.of(10))) - .setAltitudeLoss(0f) - .setAltitudeGain(0f) + .setAltitudeGainLoss(0, 0) .setSpeed(Speed.of(15)) ), actual); diff --git a/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/GPXTrackImporterTest.java b/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/GPXTrackImporterTest.java index 8cbb7025c..e3c80be8b 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/GPXTrackImporterTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/GPXTrackImporterTest.java @@ -267,8 +267,7 @@ public class GPXTrackImporterTest { Altitude.WGS84.of(10), null, null, Speed.of(15))) - .setAltitudeLoss(1f) - .setAltitudeGain(1f), + .setAltitudeGainLoss(1, 1), new TrackPoint(TrackPoint.Type.TRACKPOINT, new Position( Instant.parse("2020-02-02T02:02:17Z"), @@ -276,8 +275,7 @@ public class GPXTrackImporterTest { Altitude.WGS84.of(10), null, null, Speed.of(5))) - .setAltitudeLoss(1f) - .setAltitudeGain(1f) + .setAltitudeGainLoss(1, 1) .setSensorDistance(Distance.of(12)) .setHeartRate(69) .setPower(50f) @@ -289,8 +287,7 @@ public class GPXTrackImporterTest { Altitude.WGS84.of(10), null, null, Speed.of(15))) - .setAltitudeLoss(0f) - .setAltitudeGain(0f), + .setAltitudeGainLoss(0, 0), new TrackPoint(TrackPoint.Type.SEGMENT_START_AUTOMATIC, new Position( Instant.parse("2020-02-02T02:03:22Z"), @@ -298,8 +295,7 @@ public class GPXTrackImporterTest { Altitude.WGS84.of(10), null, null, Speed.of(15))) - .setAltitudeLoss(0f) - .setAltitudeGain(0f), + .setAltitudeGainLoss(0, 0), new TrackPoint(TrackPoint.Type.TRACKPOINT, new Position( Instant.parse("2020-02-02T02:03:50Z"), @@ -307,8 +303,7 @@ public class GPXTrackImporterTest { Altitude.WGS84.of(10), null, null, Speed.of(10))) - .setAltitudeLoss(0f) - .setAltitudeGain(0f) + .setAltitudeGainLoss(0, 0) .setSpeed(Speed.of(15)) ), actual); } diff --git a/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/KMLTrackImporterTest.java b/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/KMLTrackImporterTest.java index afff5a01b..da05889ed 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/KMLTrackImporterTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/KMLTrackImporterTest.java @@ -189,24 +189,21 @@ public class KMLTrackImporterTest { 12.340097, 1.234156, null, Altitude.WGS84.of(469.286376953125), null, null, - Speed.of(0.539))) - .setAltitudeGain(0f), + Speed.of(0.539))), new TrackPoint(TrackPoint.Type.TRACKPOINT, new Position( Instant.parse("2020-11-28T17:06:25.448Z"), 12.340036, 1.23415, null, Altitude.WGS84.of(439.1626281738281), null, null, - Speed.of(0.1577))) - .setAltitudeGain(0f), + Speed.of(0.1577))), new TrackPoint(TrackPoint.Type.TRACKPOINT, new Position( Instant.parse("2020-11-28T17:06:47.888Z"), 12.340057, 1.23405, null, Altitude.WGS84.of(421.8070983886719), null, null, - Speed.of(0))) - .setAltitudeGain(0f), + Speed.of(0))), // created resume trackpoint with time of next valid trackpoint new TrackPoint(TrackPoint.Type.SEGMENT_START_AUTOMATIC, new Position( @@ -214,16 +211,14 @@ public class KMLTrackImporterTest { 12.340057, 1.23405, null, Altitude.WGS84.of(419.93902587890625), null, null, - Speed.of(0))) - .setAltitudeGain(0f), + Speed.of(0))), new TrackPoint(TrackPoint.Type.TRACKPOINT, new Position( Instant.parse("2020-11-28T17:06:56.905Z"), 12.340057, 1.23405, null, Altitude.WGS84.of(419.9036560058594), null, null, - Speed.of(0))) - .setAltitudeGain(0f), + Speed.of(0))), new TrackPoint(TrackPoint.Type.TRACKPOINT, new Position( Instant.parse("2020-11-28T17:07:20.870Z"), @@ -231,7 +226,6 @@ public class KMLTrackImporterTest { Altitude.WGS84.of(417.99432373046875), null, null, Speed.of(0))) - .setAltitudeGain(0f) ), importedTrackPoints); } diff --git a/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/TrackPointAssert.java b/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/TrackPointAssert.java index 1c1895fce..b1c8fe7d1 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/TrackPointAssert.java +++ b/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/TrackPointAssert.java @@ -29,13 +29,9 @@ public class TrackPointAssert { Assert.assertEquals("altitude", expected.getAltitude().toM(), actual.getAltitude().toM(), delta); } - Assert.assertEquals("has altitudeGain", expected.hasAltitudeGain(), actual.hasAltitudeGain()); - if (expected.hasAltitudeGain()) { - Assert.assertEquals("altitudeGain", expected.getAltitudeGain(), actual.getAltitudeGain(), delta); - } - Assert.assertEquals("has altitudeLoss", expected.hasAltitudeLoss(), actual.hasAltitudeLoss()); - if (expected.hasAltitudeLoss()) { - Assert.assertEquals("altitudeLoss", expected.getAltitudeLoss(), actual.getAltitudeLoss(), delta); + Assert.assertEquals("has altitudeGainLoss", expected.hasAltitudeGainLoss(), actual.hasAltitudeGainLoss()); + if (expected.hasAltitudeGainLoss()) { + Assert.assertEquals("altitudeGainLoss", expected.getAltitudeGainLoss(), actual.getAltitudeGainLoss()); } Assert.assertEquals("has speed", expected.hasSpeed(), actual.hasSpeed()); diff --git a/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceRecordingTest.java b/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceRecordingTest.java index c78317116..cb416225b 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceRecordingTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceRecordingTest.java @@ -127,8 +127,7 @@ public class TrackRecordingServiceRecordingTest { new TrackPointAssert().assertEquals(List.of( new TrackPoint(TrackPoint.Type.SEGMENT_START_MANUAL, Instant.parse(startTime)), new TrackPoint(TrackPoint.Type.SEGMENT_END_MANUAL, Instant.parse(stopTime)) - .setAltitudeGain(0f) - .setAltitudeLoss(0f) + .setAltitudeGainLoss(0, 0) ), TestDataUtil.getTrackPoints(contentProviderUtils, trackId)); } @@ -199,8 +198,7 @@ public class TrackRecordingServiceRecordingTest { new TrackPointAssert().assertEquals(List.of( new TrackPoint(TrackPoint.Type.SEGMENT_START_MANUAL, Instant.parse(startTime)), new TrackPoint(TrackPoint.Type.SEGMENT_END_MANUAL, Instant.parse(pauseTime)) - .setAltitudeGain(0f) - .setAltitudeLoss(0f) + .setAltitudeGainLoss(0, 0) ), TestDataUtil.getTrackPoints(contentProviderUtils, trackId)); //when @@ -215,8 +213,7 @@ public class TrackRecordingServiceRecordingTest { new TrackPointAssert().assertEquals(List.of( new TrackPoint(TrackPoint.Type.SEGMENT_START_MANUAL, Instant.parse(startTime)), new TrackPoint(TrackPoint.Type.SEGMENT_END_MANUAL, Instant.parse(pauseTime)) - .setAltitudeGain(0f) - .setAltitudeLoss(0f), + .setAltitudeGainLoss(0, 0), new TrackPoint(TrackPoint.Type.SEGMENT_START_MANUAL, Instant.parse(resumeTime)) ), TestDataUtil.getTrackPoints(contentProviderUtils, trackId)); } @@ -249,8 +246,7 @@ public class TrackRecordingServiceRecordingTest { new TrackPointAssert().assertEquals(List.of( new TrackPoint(TrackPoint.Type.SEGMENT_START_MANUAL, Instant.parse(starTime)), new TrackPoint(TrackPoint.Type.SEGMENT_END_MANUAL, Instant.parse(pauseTime)) - .setAltitudeGain(0f) - .setAltitudeLoss(0f) + .setAltitudeGainLoss(0, 0) ), trackPoints); } @@ -279,8 +275,7 @@ public class TrackRecordingServiceRecordingTest { new TrackPointAssert().assertEquals(List.of( new TrackPoint(TrackPoint.Type.SEGMENT_START_MANUAL, Instant.parse(startTime)), new TrackPoint(TrackPoint.Type.SEGMENT_END_MANUAL, Instant.parse(stopTime)) - .setAltitudeGain(0f) - .setAltitudeLoss(0f), + .setAltitudeGainLoss(0, 0), new TrackPoint(TrackPoint.Type.SEGMENT_START_MANUAL, Instant.parse(resumeTime)) ), TestDataUtil.getTrackPoints(contentProviderUtils, trackId)); } @@ -316,12 +311,10 @@ public class TrackRecordingServiceRecordingTest { new TrackPointAssert().assertEquals(List.of( new TrackPoint(TrackPoint.Type.SEGMENT_START_MANUAL, Instant.parse(startTime)), new TrackPoint(TrackPoint.Type.TRACKPOINT, Instant.parse(sensor3)) - .setAltitudeGain(0f) - .setAltitudeLoss(0f) + .setAltitudeGainLoss(0, 0) .setHeartRate(HeartRate.of(7)), new TrackPoint(TrackPoint.Type.SEGMENT_END_MANUAL, Instant.parse(stopTime)) - .setAltitudeGain(0f) - .setAltitudeLoss(0f) + .setAltitudeGainLoss(0, 0) .setHeartRate(HeartRate.of(7)) ), TestDataUtil.getTrackPoints(contentProviderUtils, trackId)); } @@ -379,8 +372,7 @@ public class TrackRecordingServiceRecordingTest { null, null, null, Speed.of(15))) - .setAltitudeGain(0f) - .setAltitudeLoss(0f), + .setAltitudeGainLoss(0, 0), new TrackPoint(TrackPoint.Type.TRACKPOINT, new Position( Instant.parse(gps2), @@ -388,8 +380,7 @@ public class TrackRecordingServiceRecordingTest { null, null, null, Speed.of(15))) - .setAltitudeGain(0f) - .setAltitudeLoss(0f), + .setAltitudeGainLoss(0, 0), new TrackPoint(TrackPoint.Type.TRACKPOINT, new Position( Instant.parse(gps3), @@ -397,11 +388,9 @@ public class TrackRecordingServiceRecordingTest { null, null, null, Speed.of(15))) - .setAltitudeGain(0f) - .setAltitudeLoss(0f), + .setAltitudeGainLoss(0, 0), new TrackPoint(TrackPoint.Type.SEGMENT_END_MANUAL, Instant.parse(stopTime)) - .setAltitudeGain(0f) - .setAltitudeLoss(0f) + .setAltitudeGainLoss(0, 0) ), TestDataUtil.getTrackPoints(contentProviderUtils, trackId)); } @@ -455,8 +444,7 @@ public class TrackRecordingServiceRecordingTest { null, null, null, Speed.of(15))) - .setAltitudeGain(0f) - .setAltitudeLoss(0f), + .setAltitudeGainLoss(0, 0), new TrackPoint(TrackPoint.Type.TRACKPOINT, new Position( Instant.parse(gps3), @@ -464,8 +452,7 @@ public class TrackRecordingServiceRecordingTest { null, null, null, Speed.of(15))) - .setAltitudeGain(0f) - .setAltitudeLoss(0f), + .setAltitudeGainLoss(0, 0), new TrackPoint(TrackPoint.Type.SEGMENT_END_MANUAL, new Position( Instant.parse(stopTime), @@ -473,8 +460,7 @@ public class TrackRecordingServiceRecordingTest { null, null, null, Speed.of(15))) - .setAltitudeGain(0f) - .setAltitudeLoss(0f) + .setAltitudeGainLoss(0, 0) ), TestDataUtil.getTrackPoints(contentProviderUtils, trackId)); } @@ -516,8 +502,7 @@ public class TrackRecordingServiceRecordingTest { null, null, null, Speed.of(15))) - .setAltitudeGain(0f) - .setAltitudeLoss(0f), + .setAltitudeGainLoss(0, 0), new TrackPoint(TrackPoint.Type.TRACKPOINT, new Position( Instant.parse(gps3), @@ -525,11 +510,9 @@ public class TrackRecordingServiceRecordingTest { null, null, null, Speed.of(15))) - .setAltitudeGain(0f) - .setAltitudeLoss(0f), + .setAltitudeGainLoss(0, 0), new TrackPoint(TrackPoint.Type.SEGMENT_END_MANUAL, Instant.parse(stopTime)) - .setAltitudeGain(0f) - .setAltitudeLoss(0f) + .setAltitudeGainLoss(0, 0) ), TestDataUtil.getTrackPoints(contentProviderUtils, trackId)); } @@ -573,8 +556,7 @@ public class TrackRecordingServiceRecordingTest { new TrackPointAssert().assertEquals(List.of( new TrackPoint(TrackPoint.Type.SEGMENT_START_MANUAL, Instant.parse(startTime)), new TrackPoint(TrackPoint.Type.SEGMENT_END_MANUAL, Instant.parse(stopTime)) - .setAltitudeGain(0f) - .setAltitudeLoss(0f) + .setAltitudeGainLoss(0, 0) ), TestDataUtil.getTrackPoints(contentProviderUtils, trackId)); } @@ -624,8 +606,7 @@ public class TrackRecordingServiceRecordingTest { null, null, null, Speed.of(15))) - .setAltitudeGain(0f) - .setAltitudeLoss(0f), + .setAltitudeGainLoss(0, 0), new TrackPoint(TrackPoint.Type.SEGMENT_START_AUTOMATIC, new Position( Instant.parse(gps2), @@ -633,11 +614,9 @@ public class TrackRecordingServiceRecordingTest { null, null, null, Speed.of(15))) - .setAltitudeGain(0f) - .setAltitudeLoss(0f), + .setAltitudeGainLoss(0, 0), new TrackPoint(TrackPoint.Type.SEGMENT_END_MANUAL, Instant.parse(stopTime)) - .setAltitudeGain(0f) - .setAltitudeLoss(0f) + .setAltitudeGainLoss(0, 0) ), TestDataUtil.getTrackPoints(contentProviderUtils, trackId)); } diff --git a/src/androidTest/java/de/dennisguse/opentracks/ui/intervals/IntervalStatisticsUpdaterTest.java b/src/androidTest/java/de/dennisguse/opentracks/ui/intervals/IntervalStatisticsUpdaterTest.java index fc89ea127..67e23752f 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/ui/intervals/IntervalStatisticsUpdaterTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/ui/intervals/IntervalStatisticsUpdaterTest.java @@ -105,7 +105,7 @@ public class IntervalStatisticsUpdaterTest { ArrayList trackPoints = new ArrayList<>(); for (int i = 0; i < numberOfPoints; i++) { - trackPoints.add(TestDataUtil.createTrackPoint(i).setAltitudeLoss(null)); + trackPoints.add(TestDataUtil.createTrackPoint(i).setAltitudeGainLoss(null)); } trackStatisticsUpdater.addTrackPoints(trackPoints); diff --git a/src/androidTest/res/raw/legacy_kml22_statistics_marker.kml b/src/androidTest/res/raw/legacy_kml22_statistics_marker.kml index bd95dbd7e..aa7f272dc 100644 --- a/src/androidTest/res/raw/legacy_kml22_statistics_marker.kml +++ b/src/androidTest/res/raw/legacy_kml22_statistics_marker.kml @@ -74,7 +74,6 @@ Average moving pace: 0:00 min/km (0:00 min/mi) Fastest pace: 0:00 min/km (0:00 min/mi) Max elevation: -9223372036854775808 m (-9223372036854775808 ft) Min elevation: 9223372036854775807 m (9223372036854775807 ft) -Elevation gain: 0 m (0 ft) Max grade: 0 % Min grade: 0 % Recorded: 6/23 11:29]]> @@ -126,11 +125,6 @@ Recorded: 6/23 11:29]]> 0.15777911 0.0 - - 0.0 - 0.0 - 0.0 - @@ -148,14 +142,6 @@ Recorded: 6/23 11:29]]> 0.0 0.0 - - 0.0 - 0.0 - 0.0 - 0.0 - 0.0 - 0.0 - @@ -179,7 +165,6 @@ Average moving pace: 0:00 min/km (0:00 min/mi) Fastest pace: 0:00 min/km (0:00 min/mi) Max elevation: 469 m (1540 ft) Min elevation: 419 m (1376 ft) -Elevation gain: 0 m (0 ft) Recorded: 11/28 18:06]]> 2020-11-28T17:07:20.870Z diff --git a/src/main/java/de/dennisguse/opentracks/data/ContentProviderUtils.java b/src/main/java/de/dennisguse/opentracks/data/ContentProviderUtils.java index 568c6b2ce..7084bdb24 100644 --- a/src/main/java/de/dennisguse/opentracks/data/ContentProviderUtils.java +++ b/src/main/java/de/dennisguse/opentracks/data/ContentProviderUtils.java @@ -652,11 +652,8 @@ public class ContentProviderUtils { trackPoint.setPower(cursor.getFloat(indexes.sensorPowerIndex)); } - if (!cursor.isNull(indexes.altitudeGainIndex)) { - trackPoint.setAltitudeGain(cursor.getFloat(indexes.altitudeGainIndex)); - } - if (!cursor.isNull(indexes.altitudeLossIndex)) { - trackPoint.setAltitudeLoss(cursor.getFloat(indexes.altitudeLossIndex)); + if (!cursor.isNull(indexes.altitudeGainIndex) && !cursor.isNull(indexes.altitudeLossIndex)) { + trackPoint.setAltitudeGainLoss(cursor.getFloat(indexes.altitudeGainIndex), cursor.getFloat(indexes.altitudeLossIndex)); } return trackPoint; @@ -810,13 +807,10 @@ public class ContentProviderUtils { values.put(TrackPointsColumns.SENSOR_POWER, trackPoint.getPower().getW()); } - if (trackPoint.hasAltitudeGain()) { - values.put(TrackPointsColumns.ALTITUDE_GAIN, trackPoint.getAltitudeGain()); + if (trackPoint.hasAltitudeGainLoss()) { + values.put(TrackPointsColumns.ALTITUDE_GAIN, trackPoint.getAltitudeGainLoss().gain_m()); + values.put(TrackPointsColumns.ALTITUDE_LOSS, trackPoint.getAltitudeGainLoss().loss_m()); } - if (trackPoint.hasAltitudeLoss()) { - values.put(TrackPointsColumns.ALTITUDE_LOSS, trackPoint.getAltitudeLoss()); - } - return values; } diff --git a/src/main/java/de/dennisguse/opentracks/data/models/TrackPoint.java b/src/main/java/de/dennisguse/opentracks/data/models/TrackPoint.java index 0536701cd..58151bb68 100644 --- a/src/main/java/de/dennisguse/opentracks/data/models/TrackPoint.java +++ b/src/main/java/de/dennisguse/opentracks/data/models/TrackPoint.java @@ -83,9 +83,7 @@ public class TrackPoint { private HeartRate heartRate = null; private Cadence cadence = null; private Power power = null; - //TODO Use AltitudeGainLoss - private Float altitudeGain_m = null; - private Float altitudeLoss_m = null; + private AltitudeGainLoss altitudeGainLoss = null; public TrackPoint(@Nullable TrackPoint.Id id, @NonNull Type type, @NonNull Position position) { this.id = id; @@ -164,31 +162,21 @@ public class TrackPoint { return getPosition().toLocation(); } - public boolean hasAltitudeGain() { - return altitudeGain_m != null; + public boolean hasAltitudeGainLoss() { + return altitudeGainLoss != null; } - public float getAltitudeGain() { - return altitudeGain_m; + public AltitudeGainLoss getAltitudeGainLoss() { + return altitudeGainLoss; } - @Deprecated - public TrackPoint setAltitudeGain(Float altitudeGain_m) { - this.altitudeGain_m = altitudeGain_m; + public TrackPoint setAltitudeGainLoss(AltitudeGainLoss altitudeGainLoss) { + this.altitudeGainLoss = altitudeGainLoss; return this; } - public boolean hasAltitudeLoss() { - return altitudeLoss_m != null; - } - - public float getAltitudeLoss() { - return altitudeLoss_m; - } - - @Deprecated - public TrackPoint setAltitudeLoss(Float altitudeLoss_m) { - this.altitudeLoss_m = altitudeLoss_m; + public TrackPoint setAltitudeGainLoss(float altitudeGain_m, float altitudeLoss_m) { + setAltitudeGainLoss(new AltitudeGainLoss(altitudeGain_m, altitudeLoss_m)); return this; } @@ -327,11 +315,10 @@ public class TrackPoint { if (hasSensorDistance() && lastTrackPoint.hasSensorDistance()) { sensorDistance = sensorDistance.minus(lastTrackPoint.getSensorDistance()); } - if (hasAltitudeGain() && lastTrackPoint.hasAltitudeGain()) { - altitudeGain_m -= lastTrackPoint.altitudeGain_m; - } - if (hasAltitudeLoss() && lastTrackPoint.hasAltitudeLoss()) { - altitudeLoss_m -= lastTrackPoint.altitudeLoss_m; + if (hasAltitudeGainLoss() && lastTrackPoint.hasAltitudeGainLoss()) { + altitudeGainLoss = new AltitudeGainLoss( + altitudeGainLoss.gain_m() - lastTrackPoint.altitudeGainLoss.gain_m(), + altitudeGainLoss.loss_m() - lastTrackPoint.altitudeGainLoss.loss_m()); } return this; } @@ -398,8 +385,7 @@ public class TrackPoint { ", heartRate=" + heartRate + ", cadence=" + cadence + ", power=" + power + - ", altitudeGain_m=" + altitudeGain_m + - ", altitudeLoss_m=" + altitudeLoss_m + + ", altitudeGainLoss=" + altitudeGainLoss + '}'; } diff --git a/src/main/java/de/dennisguse/opentracks/io/file/exporter/CSVTrackExporter.java b/src/main/java/de/dennisguse/opentracks/io/file/exporter/CSVTrackExporter.java index ab5da9ac9..40a7dddb1 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/exporter/CSVTrackExporter.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/exporter/CSVTrackExporter.java @@ -98,8 +98,8 @@ public class CSVTrackExporter implements TrackExporter { new Column("accuracy_vertical", t -> t.hasVerticalAccuracy() ? DISTANCE_FORMAT.format(t.getVerticalAccuracy().toM()) : ""), new Column("speed", t -> t.hasSpeed() ? SPEED_FORMAT.format(t.getSpeed().toKMH()) : ""), - new Column("altitude_gain", t -> t.hasAltitudeGain() ? ALTITUDE_FORMAT.format(t.getAltitudeGain()) : ""), - new Column("altitude_loss", t -> t.hasAltitudeLoss() ? ALTITUDE_FORMAT.format(t.getAltitudeLoss()) : ""), + new Column("altitude_gain", t -> t.hasAltitudeGainLoss() ? ALTITUDE_FORMAT.format(t.getAltitudeGainLoss().gain_m()) : ""), + new Column("altitude_loss", t -> t.hasAltitudeGainLoss() ? ALTITUDE_FORMAT.format(t.getAltitudeGainLoss().loss_m()) : ""), new Column("sensor_distance", t -> t.hasSensorDistance() ? DISTANCE_FORMAT.format(t.getSensorDistance().toM()) : ""), new Column("heartrate", t -> t.hasHeartRate() ? HEARTRATE_FORMAT.format(t.getHeartRate().getBPM()) : ""), new Column("cadence", t -> t.hasCadence() ? CADENCE_FORMAT.format(t.getCadence().getRPM()) : ""), diff --git a/src/main/java/de/dennisguse/opentracks/io/file/exporter/GPXTrackExporter.java b/src/main/java/de/dennisguse/opentracks/io/file/exporter/GPXTrackExporter.java index 71e2c0eac..3359ebff0 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/exporter/GPXTrackExporter.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/exporter/GPXTrackExporter.java @@ -338,12 +338,12 @@ public class GPXTrackExporter implements TrackExporter { extensionContent += "" + POWER_FORMAT.format(trackPoint.getPower().getW()) + "\n"; } - Double cumulativeGain = cumulateSensorData(trackPoint, sensorPoints, (tp) -> tp.hasAltitudeGain() ? (double) tp.getAltitudeGain() : null); + Double cumulativeGain = cumulateSensorData(trackPoint, sensorPoints, (tp) -> tp.hasAltitudeGainLoss() ? (double) tp.getAltitudeGainLoss().gain_m() : null); if (cumulativeGain != null) { extensionContent += ("" + ALTITUDE_FORMAT.format(cumulativeGain) + "\n"); } - Double cumulativeLoss = cumulateSensorData(trackPoint, sensorPoints, (tp) -> tp.hasAltitudeLoss() ? (double) tp.getAltitudeLoss() : null); + Double cumulativeLoss = cumulateSensorData(trackPoint, sensorPoints, (tp) -> tp.hasAltitudeGainLoss() ? (double) tp.getAltitudeGainLoss().loss_m() : null); if (cumulativeLoss != null) { extensionContent += ("" + ALTITUDE_FORMAT.format(cumulativeLoss) + "\n"); } diff --git a/src/main/java/de/dennisguse/opentracks/io/file/exporter/KMLTrackExporter.java b/src/main/java/de/dennisguse/opentracks/io/file/exporter/KMLTrackExporter.java index cb71f304c..8c8d783df 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/exporter/KMLTrackExporter.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/exporter/KMLTrackExporter.java @@ -384,9 +384,13 @@ public class KMLTrackExporter implements TrackExporter { heartRateList.add(trackPoint.hasHeartRate() ? trackPoint.getHeartRate().getBPM() : null); cadenceList.add(trackPoint.hasCadence() ? trackPoint.getCadence().getRPM() : null); powerList.add(trackPoint.hasPower() ? trackPoint.getPower().getW() : null); - - altitudeGainList.add(trackPoint.hasAltitudeGain() ? trackPoint.getAltitudeGain() : null); - altitudeLossList.add(trackPoint.hasAltitudeLoss() ? trackPoint.getAltitudeLoss() : null); + if (trackPoint.hasAltitudeGainLoss()) { + altitudeGainList.add(trackPoint.getAltitudeGainLoss().loss_m()); + altitudeLossList.add(trackPoint.getAltitudeGainLoss().loss_m()); + } else { + altitudeGainList.add(null); + altitudeLossList.add(null); + } accuracyHorizontal.add(trackPoint.hasHorizontalAccuracy() ? (float) trackPoint.getHorizontalAccuracy().toM() : null); accuracyVertical.add(trackPoint.hasVerticalAccuracy() ? (float) trackPoint.getVerticalAccuracy().toM() : null); } diff --git a/src/main/java/de/dennisguse/opentracks/io/file/importer/GPXTrackImporter.java b/src/main/java/de/dennisguse/opentracks/io/file/importer/GPXTrackImporter.java index e7e258667..9abac901d 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/importer/GPXTrackImporter.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/importer/GPXTrackImporter.java @@ -369,18 +369,11 @@ public class GPXTrackImporter extends DefaultHandler implements XMLImporter.Trac } } - if (gain != null) { + if (gain != null && loss != null) { try { - trackPoint.setAltitudeGain(Float.parseFloat(gain)); + trackPoint.setAltitudeGainLoss(Float.parseFloat(gain), Float.parseFloat(loss)); } catch (NumberFormatException e) { - throw new ParsingException(createErrorMessage(String.format(Locale.US, "Unable to parse altitude gain: %s", gain)), e); - } - } - if (loss != null) { - try { - trackPoint.setAltitudeLoss(Float.parseFloat(loss)); - } catch (NumberFormatException e) { - throw new ParsingException(createErrorMessage(String.format(Locale.US, "Unable to parse altitude loss: %s", loss)), e); + throw new ParsingException(createErrorMessage(String.format(Locale.US, "Unable to parse altitude gain: %s or los: %s", gain, loss)), e); } } if (sensorDistance != null) { diff --git a/src/main/java/de/dennisguse/opentracks/io/file/importer/KMLTrackImporter.java b/src/main/java/de/dennisguse/opentracks/io/file/importer/KMLTrackImporter.java index 370f9ea50..3e77dac96 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/importer/KMLTrackImporter.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/importer/KMLTrackImporter.java @@ -342,11 +342,10 @@ public class KMLTrackImporter extends DefaultHandler implements XMLImporter.Trac if (i < sensorPowerList.size() && sensorPowerList.get(i) != null) { trackPoint.setPower(sensorPowerList.get(i)); } - if (i < altitudeGainList.size()) { - trackPoint.setAltitudeGain(altitudeGainList.get(i)); - } - if (i < altitudeLossList.size()) { - trackPoint.setAltitudeLoss(altitudeLossList.get(i)); + if (i < altitudeGainList.size() && i < altitudeLossList.size()) { + if (altitudeGainList.get(i) != null && altitudeLossList.get(i) != null) { + trackPoint.setAltitudeGainLoss(altitudeGainList.get(i), altitudeLossList.get(i)); + } } if (i < accuracyHorizontal.size() && accuracyHorizontal.get(i) != null) { trackPoint.setHorizontalAccuracy(Distance.of(accuracyHorizontal.get(i))); diff --git a/src/main/java/de/dennisguse/opentracks/sensors/sensorData/SensorDataSet.java b/src/main/java/de/dennisguse/opentracks/sensors/sensorData/SensorDataSet.java index 2d1e6aeb5..eacfc9e49 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/sensorData/SensorDataSet.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/sensorData/SensorDataSet.java @@ -185,8 +185,7 @@ public class SensorDataSet { } if (barometer != null && barometer.hasReceivedData()) { - trackPoint.setAltitudeGain(barometer.getAggregatedValue(trackPointCreator.createNow()).gain_m()); - trackPoint.setAltitudeLoss(barometer.getAggregatedValue(trackPointCreator.createNow()).loss_m()); + trackPoint.setAltitudeGainLoss(barometer.getAggregatedValue(trackPointCreator.createNow()).gain_m(), barometer.getAggregatedValue(trackPointCreator.createNow()).loss_m()); } } diff --git a/src/main/java/de/dennisguse/opentracks/stats/SegmentStatisticUpdater.java b/src/main/java/de/dennisguse/opentracks/stats/SegmentStatisticUpdater.java index 59becef9f..1044810b2 100644 --- a/src/main/java/de/dennisguse/opentracks/stats/SegmentStatisticUpdater.java +++ b/src/main/java/de/dennisguse/opentracks/stats/SegmentStatisticUpdater.java @@ -360,42 +360,37 @@ public class SegmentStatisticUpdater { } } + @VisibleForTesting + @Deprecated @Nullable public Float getTotalAltitudeGain() { return totalAltitudeGain_m; } + @VisibleForTesting + @Deprecated public void setTotalAltitudeGain(Float totalAltitudeGain_m) { this.totalAltitudeGain_m = totalAltitudeGain_m; } - @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE) - public void addTotalAltitudeGain(float gain_m) { - if (totalAltitudeGain_m == null) { - totalAltitudeGain_m = 0f; - } - totalAltitudeGain_m += gain_m; - } - - public boolean hasTotalAltitudeLoss() { - return totalAltitudeLoss_m != null; - } - + @VisibleForTesting + @Deprecated @Nullable public Float getTotalAltitudeLoss() { return totalAltitudeLoss_m; } - public void setTotalAltitudeLoss(Float totalAltitudeLoss_m) { - this.totalAltitudeLoss_m = totalAltitudeLoss_m; - } - @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE) - public void addTotalAltitudeLoss(float loss_m) { + public void addTotalAltitudeGainLoss(AltitudeGainLoss altitudeGainLoss) { + if (totalAltitudeGain_m == null) { + totalAltitudeGain_m = 0f; + } + totalAltitudeGain_m += altitudeGainLoss.gain_m(); + if (totalAltitudeLoss_m == null) { totalAltitudeLoss_m = 0f; } - totalAltitudeLoss_m += loss_m; + totalAltitudeLoss_m += altitudeGainLoss.loss_m(); } @NonNull diff --git a/src/main/java/de/dennisguse/opentracks/stats/TrackStatisticsUpdater.java b/src/main/java/de/dennisguse/opentracks/stats/TrackStatisticsUpdater.java index 03945cb27..b0d1bed61 100644 --- a/src/main/java/de/dennisguse/opentracks/stats/TrackStatisticsUpdater.java +++ b/src/main/java/de/dennisguse/opentracks/stats/TrackStatisticsUpdater.java @@ -114,12 +114,8 @@ public class TrackStatisticsUpdater { currentSegment.setTotalTime(Duration.between(currentSegment.getStartTime(), trackPoint.getTime())); // Process sensor data: barometer - if (trackPoint.hasAltitudeGain()) { - currentSegment.addTotalAltitudeGain(trackPoint.getAltitudeGain()); - } - - if (trackPoint.hasAltitudeLoss()) { - currentSegment.addTotalAltitudeLoss(trackPoint.getAltitudeLoss()); + if (trackPoint.hasAltitudeGainLoss()) { + currentSegment.addTotalAltitudeGainLoss(trackPoint.getAltitudeGainLoss()); } //Update absolute (GPS-based) altitude diff --git a/src/main/java/de/dennisguse/opentracks/ui/intervals/IntervalStatisticsUpdater.java b/src/main/java/de/dennisguse/opentracks/ui/intervals/IntervalStatisticsUpdater.java index 884841849..72314ee52 100644 --- a/src/main/java/de/dennisguse/opentracks/ui/intervals/IntervalStatisticsUpdater.java +++ b/src/main/java/de/dennisguse/opentracks/ui/intervals/IntervalStatisticsUpdater.java @@ -185,11 +185,9 @@ public class IntervalStatisticsUpdater { if (lastTrackPoint == null) { return; } - if (hasGain() && lastTrackPoint.hasAltitudeGain()) { - gain_m = gain_m - lastTrackPoint.getAltitudeGain(); - } - if (hasLoss() && lastTrackPoint.hasAltitudeLoss()) { - loss_m = loss_m - lastTrackPoint.getAltitudeLoss(); + if (hasGain() && lastTrackPoint.hasAltitudeGainLoss()) { + gain_m = gain_m - lastTrackPoint.getAltitudeGainLoss().gain_m(); + loss_m = loss_m - lastTrackPoint.getAltitudeGainLoss().loss_m(); } }