From 3408ea97f4a214095114e584f29375bbf6204584 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Fri, 24 Apr 2020 23:32:12 +0200 Subject: [PATCH] Refactoring: move TrackPointDataSet directly into TrackPoint. --- .../dennisguse/opentracks/TrackStubUtils.java | 3 +- .../CustomContentProviderUtilsTest.java | 84 ++++++++++------ .../fragments/ChartFragmentTest.java | 35 ++----- .../services/TrackRecordingServiceTest.java | 4 +- .../TrackRecordingServiceTestLocation.java | 5 +- .../opentracks/chart/ChartPoint.java | 18 ++-- .../opentracks/content/data/TrackPoint.java | 67 +++++++++---- .../content/data/TrackPointSensorDataSet.java | 99 ------------------- .../provider/ContentProviderUtils.java | 30 +++--- .../content/sensor/SensorDataSet.java | 21 +--- .../opentracks/fragments/ChartFragment.java | 2 +- .../opentracks/fragments/StatsFragment.java | 3 +- .../io/file/exporter/KmlTrackWriter.java | 22 ++--- .../file/importer/KmlFileTrackImporter.java | 16 +-- .../services/TrackRecordingService.java | 13 ++- 15 files changed, 166 insertions(+), 256 deletions(-) delete mode 100644 src/main/java/de/dennisguse/opentracks/content/data/TrackPointSensorDataSet.java diff --git a/src/androidTest/java/de/dennisguse/opentracks/TrackStubUtils.java b/src/androidTest/java/de/dennisguse/opentracks/TrackStubUtils.java index e258bce30..2894dbcbc 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/TrackStubUtils.java +++ b/src/androidTest/java/de/dennisguse/opentracks/TrackStubUtils.java @@ -19,7 +19,6 @@ package de.dennisguse.opentracks; import android.location.Location; import de.dennisguse.opentracks.content.data.TrackPoint; -import de.dennisguse.opentracks.content.data.TrackPointSensorDataSet; /** * Commons utilities for creating stubs of track, location. @@ -63,6 +62,6 @@ public class TrackStubUtils { location.setTime(INITIAL_TIME); location.setBearing(INITIAL_BEARING); - return new TrackPoint(location, new TrackPointSensorDataSet()); + return new TrackPoint(location); } } diff --git a/src/androidTest/java/de/dennisguse/opentracks/content/provider/CustomContentProviderUtilsTest.java b/src/androidTest/java/de/dennisguse/opentracks/content/provider/CustomContentProviderUtilsTest.java index f0aa1cdae..930af3470 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/content/provider/CustomContentProviderUtilsTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/content/provider/CustomContentProviderUtilsTest.java @@ -514,7 +514,7 @@ public class CustomContentProviderUtilsTest { } /** - * Tests the method {@link ContentProviderUtils#bulkInsertTrackPoint(TrackPoint[], int, long)}. + * Tests the method {@link ContentProviderUtils#bulkInsertTrackPoint(TrackPoint[], long)}. */ @Test public void testBulkInsertTrackPoint() { @@ -533,44 +533,44 @@ public class CustomContentProviderUtilsTest { /** * Tests the method {@link ContentProviderUtils#createTrackPoint(Cursor)}. */ + //TODO incomplete @Test public void testCreateTrackPoint() { - // Set index. - int index = 1; - when(cursorMock.getColumnIndex(TrackPointsColumns._ID)).thenReturn(index++); - when(cursorMock.getColumnIndexOrThrow(TrackPointsColumns.LONGITUDE)).thenReturn(index++); - when(cursorMock.getColumnIndexOrThrow(TrackPointsColumns.LATITUDE)).thenReturn(index++); - when(cursorMock.getColumnIndexOrThrow(TrackPointsColumns.TIME)).thenReturn(index++); - when(cursorMock.getColumnIndexOrThrow(TrackPointsColumns.SPEED)).thenReturn(index++); - when(cursorMock.getColumnIndexOrThrow(TrackPointsColumns.SENSOR_HEARTRATE)).thenReturn(index++); + // given + when(cursorMock.getColumnIndex(TrackPointsColumns._ID)).thenReturn(1); - // Set return value of isNull(). - index = 2; - when(cursorMock.isNull(index++)).thenReturn(false); - when(cursorMock.isNull(index++)).thenReturn(false); - when(cursorMock.isNull(index++)).thenReturn(false); - when(cursorMock.isNull(index++)).thenReturn(false); - when(cursorMock.isNull(index++)).thenReturn(false); - - // Set return value of getInt(). - index = 2; + when(cursorMock.getColumnIndexOrThrow(TrackPointsColumns.LONGITUDE)).thenReturn(2); + when(cursorMock.isNull(2)).thenReturn(false); int longitude = 11; - when(cursorMock.getInt(index++)).thenReturn(longitude * 1000000); + when(cursorMock.getInt(2)).thenReturn(longitude * 1000000); + + when(cursorMock.getColumnIndexOrThrow(TrackPointsColumns.LATITUDE)).thenReturn(3); + when(cursorMock.isNull(3)).thenReturn(false); int latitude = 22; - when(cursorMock.getInt(index++)).thenReturn(latitude * 1000000); + when(cursorMock.getInt(3)).thenReturn(latitude * 1000000); + + when(cursorMock.getColumnIndexOrThrow(TrackPointsColumns.TIME)).thenReturn(4); + when(cursorMock.isNull(4)).thenReturn(false); long time = System.currentTimeMillis(); - when(cursorMock.getLong(index++)).thenReturn(time); + when(cursorMock.getLong(4)).thenReturn(time); + + when(cursorMock.getColumnIndexOrThrow(TrackPointsColumns.SPEED)).thenReturn(5); + when(cursorMock.isNull(5)).thenReturn(false); float speed = 2.2f; - when(cursorMock.getFloat(index++)).thenReturn(speed); + when(cursorMock.getFloat(5)).thenReturn(speed); - byte[] sensor = "Sensor state".getBytes(); - when(cursorMock.getBlob(index++)).thenReturn(sensor); + when(cursorMock.getColumnIndexOrThrow(TrackPointsColumns.SENSOR_HEARTRATE)).thenReturn(6); + when(cursorMock.isNull(6)).thenReturn(false); - TrackPoint location = contentProviderUtils.createTrackPoint(cursorMock); - Assert.assertEquals(longitude, location.getLongitude(), 0.01); - Assert.assertEquals(latitude, location.getLatitude(), 0.01); - Assert.assertEquals(time, location.getTime(), 0.01); - Assert.assertEquals(speed, location.getSpeed(), 0.01); + // when + TrackPoint trackPoint = contentProviderUtils.createTrackPoint(cursorMock); + + // then + Assert.assertEquals(longitude, trackPoint.getLongitude(), 0.01); + Assert.assertEquals(latitude, trackPoint.getLatitude(), 0.01); + Assert.assertEquals(time, trackPoint.getTime(), 0.01); + Assert.assertEquals(speed, trackPoint.getSpeed(), 0.01); + Assert.assertFalse(trackPoint.hasHeartRate()); } /** @@ -584,7 +584,29 @@ public class CustomContentProviderUtilsTest { Track track = TestDataUtil.createTrackAndInsert(contentProviderUtils, trackId, 10); contentProviderUtils.insertTrackPoint(TestDataUtil.createTrackPoint(22), trackId); - Assert.assertEquals(11, contentProviderUtils.getTrackPointCursor(trackId, -1L, 1000, false).getCount()); + Assert.assertEquals(11, contentProviderUtils.getTrackPoints(trackId).size()); + } + + @Test + public void testInsertAndLoadTrackPoint() { + // given + long trackId = System.currentTimeMillis(); + Track track = TestDataUtil.createTrackAndInsert(contentProviderUtils, trackId, 10); + + TrackPoint trackPoint = TestDataUtil.createTrackPoint(5); + trackPoint.setHeartRate_bpm(1F); + trackPoint.setCyclingCadence_rpm(2F); + trackPoint.setPower(3F); + + // when + contentProviderUtils.insertTrackPoint(trackPoint, trackId); + + // then + List trackPoints = contentProviderUtils.getTrackPoints(trackId); + Assert.assertTrue(trackPoints.get(10).hasHeartRate()); + Assert.assertEquals(trackPoint.getHeartRate_bpm(), trackPoints.get(10).getHeartRate_bpm(), 0.01); + Assert.assertEquals(trackPoint.getCyclingCadence_rpm(), trackPoints.get(10).getCyclingCadence_rpm(), 0.01); + Assert.assertEquals(trackPoint.getPower(), trackPoints.get(10).getPower(), 0.01); } /** diff --git a/src/androidTest/java/de/dennisguse/opentracks/fragments/ChartFragmentTest.java b/src/androidTest/java/de/dennisguse/opentracks/fragments/ChartFragmentTest.java index acddf2688..00d579ff5 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/fragments/ChartFragmentTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/fragments/ChartFragmentTest.java @@ -33,7 +33,6 @@ import de.dennisguse.opentracks.TrackStubUtils; import de.dennisguse.opentracks.chart.ChartPoint; import de.dennisguse.opentracks.chart.ChartView; import de.dennisguse.opentracks.content.data.TrackPoint; -import de.dennisguse.opentracks.content.data.TrackPointSensorDataSet; import de.dennisguse.opentracks.util.UnitConversions; /** @@ -72,20 +71,13 @@ public class ChartFragmentTest { */ @Test public void testCreatePendingPoint_sensorIncorrect() { + // given TrackPoint trackPoint = TrackStubUtils.createDefaultTrackPoint(); - // No input. + // when ChartPoint point = chartFragment.createPendingPoint(trackPoint); - Assert.assertEquals(Float.NaN, point.getHeartRate(), 0.01); - Assert.assertEquals(Float.NaN, point.getCadence(), 0.01); - Assert.assertEquals(Float.NaN, point.getPower(), 0.01); - // Input incorrect state. - // Creates SensorData. - TrackPointSensorDataSet sensorDataSet = new TrackPointSensorDataSet(); - trackPoint.setSensorDataSet(sensorDataSet); - // Test. - point = chartFragment.createPendingPoint(trackPoint); + // then Assert.assertEquals(Float.NaN, point.getHeartRate(), 0.01); Assert.assertEquals(Float.NaN, point.getCadence(), 0.01); Assert.assertEquals(Float.NaN, point.getPower(), 0.01); @@ -96,23 +88,16 @@ public class ChartFragmentTest { */ @Test public void testCreatePendingPoint_sensorCorrect() { + // given TrackPoint trackPoint = TrackStubUtils.createDefaultTrackPoint(); - // No input. + trackPoint.setHeartRate_bpm(100f); + trackPoint.setCyclingCadence_rpm(101f); + trackPoint.setPower(102f); + + // when ChartPoint point = chartFragment.createPendingPoint(trackPoint); - Assert.assertEquals(Float.NaN, point.getHeartRate(), 0.01); - Assert.assertEquals(Float.NaN, point.getCadence(), 0.01); - Assert.assertEquals(Float.NaN, point.getPower(), 0.01); - // Creates SensorData. - TrackPointSensorDataSet sensorDataSet = new TrackPointSensorDataSet(); - sensorDataSet.setHeartRate_bpm(100f); - sensorDataSet.setCyclingCadence(101); - sensorDataSet.setPower(102f); - - // Creates SensorDataSet. - trackPoint.setSensorDataSet(sensorDataSet); - // Test. - point = chartFragment.createPendingPoint(trackPoint); + // then Assert.assertEquals(100.0, point.getHeartRate(), 0.01); Assert.assertEquals(101.0, point.getCadence(), 0.01); Assert.assertEquals(102.0, point.getPower(), 0.01); diff --git a/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTest.java b/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTest.java index 7ebc2bb5c..ffe0ecb2b 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTest.java @@ -331,7 +331,7 @@ public class TrackRecordingServiceTest { addTrack(dummyTrack, isRecording); } - static void insertLocation(TrackRecordingServiceInterface trackRecordingService) throws InterruptedException { + private static void insertLocation(TrackRecordingServiceInterface trackRecordingService) throws InterruptedException { insertLocation(trackRecordingService, 45.0f, 35f, 5, 10, System.currentTimeMillis()); } @@ -342,7 +342,7 @@ public class TrackRecordingServiceTest { /** * Inserts a location and waits for 200ms. */ - static void insertLocation(TrackRecordingServiceInterface trackRecordingService, double latitude, double longitude, float accuracy, long speed, long time) throws InterruptedException { + private static void insertLocation(TrackRecordingServiceInterface trackRecordingService, double latitude, double longitude, float accuracy, long speed, long time) throws InterruptedException { Location location = new Location("gps"); location.setLongitude(longitude); location.setLatitude(latitude); diff --git a/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestLocation.java b/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestLocation.java index 81a64c416..372e493ae 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestLocation.java +++ b/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestLocation.java @@ -27,6 +27,7 @@ import de.dennisguse.opentracks.content.data.TrackPoint; import de.dennisguse.opentracks.content.data.TrackPointsColumns; import de.dennisguse.opentracks.content.provider.ContentProviderUtils; import de.dennisguse.opentracks.content.provider.CustomContentProvider; +import de.dennisguse.opentracks.content.sensor.SensorDataHeartRate; import de.dennisguse.opentracks.content.sensor.SensorDataSet; import de.dennisguse.opentracks.services.sensors.BluetoothRemoteSensorManager; import de.dennisguse.opentracks.util.PreferencesUtils; @@ -245,7 +246,9 @@ public class TrackRecordingServiceTestLocation { @Override public SensorDataSet getSensorData() { - return new SensorDataSet(); + SensorDataSet sensorDataSet = new SensorDataSet(); + sensorDataSet.set(new SensorDataHeartRate("sensorName", "sensorAddress", 5f)); + return sensorDataSet; } }); diff --git a/src/main/java/de/dennisguse/opentracks/chart/ChartPoint.java b/src/main/java/de/dennisguse/opentracks/chart/ChartPoint.java index 262ad6231..34369efbb 100644 --- a/src/main/java/de/dennisguse/opentracks/chart/ChartPoint.java +++ b/src/main/java/de/dennisguse/opentracks/chart/ChartPoint.java @@ -3,7 +3,7 @@ package de.dennisguse.opentracks.chart; import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; -import de.dennisguse.opentracks.content.data.TrackPointSensorDataSet; +import de.dennisguse.opentracks.content.data.TrackPoint; import de.dennisguse.opentracks.stats.TrackStatistics; import de.dennisguse.opentracks.stats.TrackStatisticsUpdater; import de.dennisguse.opentracks.util.UnitConversions; @@ -25,7 +25,7 @@ public class ChartPoint { this.elevation = elevation; } - public ChartPoint(@NonNull TrackStatisticsUpdater trackStatisticsUpdater, TrackPointSensorDataSet sensorDataSet, boolean chartByDistance, boolean metricUnits) { + public ChartPoint(@NonNull TrackStatisticsUpdater trackStatisticsUpdater, TrackPoint trackPoint, boolean chartByDistance, boolean metricUnits) { TrackStatistics trackStatistics = trackStatisticsUpdater.getTrackStatistics(); if (chartByDistance) { @@ -48,15 +48,15 @@ public class ChartPoint { speed *= UnitConversions.KM_TO_MI; } pace = speed == 0 ? 0.0 : 60.0 / speed; - if (sensorDataSet != null) { - if (sensorDataSet.hasHeartRate()) { - heartRate = sensorDataSet.getHeartRate_bpm(); + if (trackPoint != null) { + if (trackPoint.hasHeartRate()) { + heartRate = trackPoint.getHeartRate_bpm(); } - if (sensorDataSet.hasCyclingCadence()) { - cadence = sensorDataSet.getCyclingCadence_rpm(); + if (trackPoint.hasCyclingCadence()) { + cadence = trackPoint.getCyclingCadence_rpm(); } - if (sensorDataSet.hasPower()) { - power = sensorDataSet.getPower(); + if (trackPoint.hasPower()) { + power = trackPoint.getPower(); } } } diff --git a/src/main/java/de/dennisguse/opentracks/content/data/TrackPoint.java b/src/main/java/de/dennisguse/opentracks/content/data/TrackPoint.java index 992260471..959011eef 100644 --- a/src/main/java/de/dennisguse/opentracks/content/data/TrackPoint.java +++ b/src/main/java/de/dennisguse/opentracks/content/data/TrackPoint.java @@ -29,6 +29,10 @@ public class TrackPoint { private final Location location; + private Float heartRate_bpm = null; + private Float cyclingCadence_rpm = null; + private Float power = null; + public TrackPoint() { this.location = new Location(""); } @@ -37,17 +41,13 @@ public class TrackPoint { this.location = location; } - public TrackPoint(@NonNull Location location, TrackPointSensorDataSet sensorDataSet) { - this.location = location; - this.sensorDataSet = sensorDataSet; - } - - public TrackPoint(@NonNull TrackPoint trackPoint, TrackPointSensorDataSet sensorDataSet) { + public TrackPoint(@NonNull TrackPoint trackPoint) { this.location = trackPoint.getLocation(); - this.sensorDataSet = sensorDataSet; - } - private TrackPointSensorDataSet sensorDataSet = null; + this.heartRate_bpm = trackPoint.getHeartRate_bpm(); + this.cyclingCadence_rpm = trackPoint.getCyclingCadence_rpm(); + this.power = trackPoint.getPower(); + } public TrackPoint(double latitude, double longitude, Double altitude, long time) { location = new Location(LocationManager.GPS_PROVIDER); @@ -88,14 +88,6 @@ public class TrackPoint { return location; } - public TrackPointSensorDataSet getSensorDataSet() { - return sensorDataSet; - } - - public void setSensorDataSet(TrackPointSensorDataSet sensorDataSet) { - this.sensorDataSet = sensorDataSet; - } - public double getLatitude() { return location.getLatitude(); } @@ -180,6 +172,47 @@ public class TrackPoint { return location.bearingTo(dest); } + // Sensor data + public boolean hasSensorData() { + return hasHeartRate() || hasCyclingCadence() || hasPower(); + } + + public boolean hasHeartRate() { + return heartRate_bpm != null && heartRate_bpm > 0; + } + + public float getHeartRate_bpm() { + return heartRate_bpm; + } + + public void setHeartRate_bpm(Float heartRate_bpm) { + this.heartRate_bpm = heartRate_bpm; + } + + public boolean hasCyclingCadence() { + return cyclingCadence_rpm != null; + } + + public Float getCyclingCadence_rpm() { + return cyclingCadence_rpm; + } + + public void setCyclingCadence_rpm(Float cyclingCadence_rpm) { + this.cyclingCadence_rpm = cyclingCadence_rpm; + } + + public boolean hasPower() { + return power != null; + } + + public Float getPower() { + return power; + } + + public void setPower(Float power) { + this.power = power; + } + @NonNull @Override public String toString() { diff --git a/src/main/java/de/dennisguse/opentracks/content/data/TrackPointSensorDataSet.java b/src/main/java/de/dennisguse/opentracks/content/data/TrackPointSensorDataSet.java deleted file mode 100644 index e16118b9d..000000000 --- a/src/main/java/de/dennisguse/opentracks/content/data/TrackPointSensorDataSet.java +++ /dev/null @@ -1,99 +0,0 @@ -package de.dennisguse.opentracks.content.data; - -import androidx.annotation.NonNull; - -//TODO Rename. -public final class TrackPointSensorDataSet { - private long time_ms; - - private Float heartRate_bpm = null; - private Float cyclingCadence = null; - private Float cyclingSpeed = null; - private Float power = null; - - public TrackPointSensorDataSet() { - this(System.currentTimeMillis()); - } - - public TrackPointSensorDataSet(long time_ms) { - this.time_ms = time_ms; - } - - public boolean hasHeartRate() { - return heartRate_bpm != null && heartRate_bpm > 0; - } - - public float getHeartRate_bpm() { - return heartRate_bpm; - } - - public void setHeartRate_bpm(Float heartRate_bpm) { - this.heartRate_bpm = heartRate_bpm; - } - - public boolean hasCyclingCadence() { - return cyclingCadence != null; - } - - public Float getCyclingCadence_rpm() { - return cyclingCadence; - } - - public void setCyclingCadence(Float cyclingCadence) { - this.cyclingCadence = cyclingCadence; - } - - public void setCyclingCadence(Integer cyclingCadence) { - this.cyclingCadence = cyclingCadence != null ? cyclingCadence.floatValue() : null; - } - - public boolean hasCyclingSpeed() { - return cyclingSpeed != null; - } - - public Float getCyclingSpeed() { - return cyclingSpeed; - } - - public void setCyclingSpeed(Float cyclingSpeed) { - this.cyclingSpeed = cyclingSpeed; - } - - public boolean hasPower() { - return power != null; - } - - public Float getPower() { - return power; - } - - public void setPower(Float power) { - this.power = power; - } - - public long getTime() { - return time_ms; - } - - public void setTime(long time_ms) { - this.time_ms = time_ms; - } - - /** - * Is the data recent considering the current time. - * - * @param maxAge the maximal age in milliseconds. - */ - public boolean isRecent(long maxAge) { - return time_ms + maxAge > System.currentTimeMillis(); - } - - @NonNull - @Override - public String toString() { - return "time=" + getTime() - + (hasHeartRate() ? " heart=" + getHeartRate_bpm() : "") - + (hasCyclingCadence() ? " cyclingCad=" + getCyclingCadence_rpm() : "") - + (hasCyclingSpeed() ? " cyclingSpeed=" + getCyclingSpeed() : ""); - } -} diff --git a/src/main/java/de/dennisguse/opentracks/content/provider/ContentProviderUtils.java b/src/main/java/de/dennisguse/opentracks/content/provider/ContentProviderUtils.java index b429be852..53a054881 100644 --- a/src/main/java/de/dennisguse/opentracks/content/provider/ContentProviderUtils.java +++ b/src/main/java/de/dennisguse/opentracks/content/provider/ContentProviderUtils.java @@ -36,7 +36,6 @@ import de.dennisguse.opentracks.android.ContentResolverWrapper; import de.dennisguse.opentracks.android.IContentResolver; import de.dennisguse.opentracks.content.data.Track; import de.dennisguse.opentracks.content.data.TrackPoint; -import de.dennisguse.opentracks.content.data.TrackPointSensorDataSet; import de.dennisguse.opentracks.content.data.TrackPointsColumns; import de.dennisguse.opentracks.content.data.TracksColumns; import de.dennisguse.opentracks.content.data.Waypoint; @@ -621,19 +620,16 @@ public class ContentProviderUtils { trackPoint.setBearing(cursor.getFloat(indexes.bearingIndex)); } - TrackPointSensorDataSet sensorDataSet = new TrackPointSensorDataSet(); - - if (cursor.isNull(indexes.sensorHeartRateIndex)) { - sensorDataSet.setHeartRate_bpm(cursor.getFloat(indexes.sensorHeartRateIndex)); + if (!cursor.isNull(indexes.sensorHeartRateIndex)) { + trackPoint.setHeartRate_bpm(cursor.getFloat(indexes.sensorHeartRateIndex)); } - if (cursor.isNull(indexes.sensorCadenceIndex)) { - sensorDataSet.setCyclingCadence(cursor.getFloat(indexes.sensorCadenceIndex)); + if (!cursor.isNull(indexes.sensorCadenceIndex)) { + trackPoint.setCyclingCadence_rpm(cursor.getFloat(indexes.sensorCadenceIndex)); } - if (cursor.isNull(indexes.sensorPowerIndex)) { - sensorDataSet.setCyclingSpeed(cursor.getFloat(indexes.sensorPowerIndex)); + if (!cursor.isNull(indexes.sensorPowerIndex)) { + trackPoint.setPower(cursor.getFloat(indexes.sensorPowerIndex)); } - trackPoint.setSensorDataSet(sensorDataSet); return trackPoint; } @@ -812,16 +808,14 @@ public class ContentProviderUtils { values.put(TrackPointsColumns.BEARING, trackPoint.getBearing()); } - //SensorData - TrackPointSensorDataSet sensorDataSet = trackPoint.getSensorDataSet(); - if (sensorDataSet != null && sensorDataSet.hasHeartRate()) { - values.put(TrackPointsColumns.SENSOR_HEARTRATE, sensorDataSet.getHeartRate_bpm()); + if (trackPoint.hasHeartRate()) { + values.put(TrackPointsColumns.SENSOR_HEARTRATE, trackPoint.getHeartRate_bpm()); } - if (sensorDataSet != null && sensorDataSet.hasCyclingCadence()) { - values.put(TrackPointsColumns.SENSOR_CADENCE, sensorDataSet.getCyclingCadence_rpm()); + if (trackPoint.hasCyclingCadence()) { + values.put(TrackPointsColumns.SENSOR_CADENCE, trackPoint.getCyclingCadence_rpm()); } - if (sensorDataSet != null && sensorDataSet.hasPower()) { - values.put(TrackPointsColumns.SENSOR_POWER, sensorDataSet.getPower()); + if (trackPoint.hasPower()) { + values.put(TrackPointsColumns.SENSOR_POWER, trackPoint.getPower()); } return values; } diff --git a/src/main/java/de/dennisguse/opentracks/content/sensor/SensorDataSet.java b/src/main/java/de/dennisguse/opentracks/content/sensor/SensorDataSet.java index 2ff83b011..ac0d11afa 100644 --- a/src/main/java/de/dennisguse/opentracks/content/sensor/SensorDataSet.java +++ b/src/main/java/de/dennisguse/opentracks/content/sensor/SensorDataSet.java @@ -1,9 +1,8 @@ package de.dennisguse.opentracks.content.sensor; import androidx.annotation.NonNull; -import androidx.annotation.VisibleForTesting; -import de.dennisguse.opentracks.content.data.TrackPointSensorDataSet; +import de.dennisguse.opentracks.content.data.TrackPoint; /** * @@ -19,13 +18,6 @@ public final class SensorDataSet { public SensorDataSet() { } - @VisibleForTesting - public SensorDataSet(SensorDataHeartRate heartRate, SensorDataCycling.Cadence cyclingCadence, SensorDataCycling.Speed cyclingSpeed) { - this.heartRate = heartRate; - this.cyclingCadence = cyclingCadence; - this.cyclingSpeed = cyclingSpeed; - } - public SensorDataHeartRate getHeartRate() { return heartRate; } @@ -70,21 +62,18 @@ public final class SensorDataSet { this.cyclingSpeed = null; } - public TrackPointSensorDataSet createTrackPointSensorDataSet() { - TrackPointSensorDataSet sensorDataSet = new TrackPointSensorDataSet(); + public void fillTrackPoint(TrackPoint trackPoint) { if (heartRate != null) { - sensorDataSet.setHeartRate_bpm(heartRate.getHeartRate_bpm()); + trackPoint.setHeartRate_bpm(heartRate.getHeartRate_bpm()); } if (cyclingCadence != null && cyclingCadence.hasCadence_rpm()) { - sensorDataSet.setCyclingCadence(cyclingCadence.getCadence_rpm()); + trackPoint.setCyclingCadence_rpm(cyclingCadence.getCadence_rpm()); } if (cyclingSpeed != null && cyclingSpeed.hasSpeed()) { - sensorDataSet.setCyclingCadence(cyclingSpeed.getSpeed_ms()); + trackPoint.setSpeed(cyclingSpeed.getSpeed_ms()); } - - return sensorDataSet; } @NonNull diff --git a/src/main/java/de/dennisguse/opentracks/fragments/ChartFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/ChartFragment.java index c5a13f0fe..4194f2b7e 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/ChartFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/ChartFragment.java @@ -313,7 +313,7 @@ public class ChartFragment extends Fragment implements TrackDataListener { @VisibleForTesting ChartPoint createPendingPoint(@NonNull TrackPoint trackPoint) { trackStatisticsUpdater.addTrackPoint(trackPoint, recordingDistanceInterval); - return new ChartPoint(trackStatisticsUpdater, trackPoint.getSensorDataSet(), chartByDistance, chartView.getMetricUnits()); + return new ChartPoint(trackStatisticsUpdater, trackPoint, chartByDistance, chartView.getMetricUnits()); } @VisibleForTesting diff --git a/src/main/java/de/dennisguse/opentracks/fragments/StatsFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/StatsFragment.java index 6696bd4c5..9b1d49db3 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/StatsFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/StatsFragment.java @@ -39,7 +39,6 @@ import de.dennisguse.opentracks.content.TrackDataHub; import de.dennisguse.opentracks.content.TrackDataListener; import de.dennisguse.opentracks.content.data.Track; import de.dennisguse.opentracks.content.data.TrackPoint; -import de.dennisguse.opentracks.content.data.TrackPointSensorDataSet; import de.dennisguse.opentracks.content.data.Waypoint; import de.dennisguse.opentracks.content.sensor.SensorDataSet; import de.dennisguse.opentracks.services.TrackRecordingServiceConnection; @@ -436,7 +435,7 @@ public class StatsFragment extends Fragment implements TrackDataListener { } /** - * Tries to fetch most recent {@link TrackPointSensorDataSet} from {@link de.dennisguse.opentracks.services.TrackRecordingService}. + * Tries to fetch most recent {@link SensorDataSet} from {@link de.dennisguse.opentracks.services.TrackRecordingService}. */ private void updateSensorDataUI() { TrackRecordingServiceInterface trackRecordingService = trackRecordingServiceConnection.getServiceIfBound(); 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 8b2e37bca..87d06c295 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 @@ -28,7 +28,6 @@ import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.content.DescriptionGenerator; import de.dennisguse.opentracks.content.data.Track; import de.dennisguse.opentracks.content.data.TrackPoint; -import de.dennisguse.opentracks.content.data.TrackPointSensorDataSet; import de.dennisguse.opentracks.content.data.Waypoint; import de.dennisguse.opentracks.content.provider.ContentProviderUtils; import de.dennisguse.opentracks.util.FileUtils; @@ -75,7 +74,7 @@ public class KmlTrackWriter implements TrackWriter { * @param context the context * @param hasMultipleTracks should encode multiple tracks into one file? * @param exportTrackDetail should detailed information about the track be exported (e.g., title, description, waypoints, timing)? - * @param exportSensorData should {@link TrackPointSensorDataSet} be exported? + * @param exportSensorData should {@link TrackPointSensorDataSet} be exported? * @param exportPhotos should pictures be exported (if true: exports to KMZ)? */ public KmlTrackWriter(Context context, boolean hasMultipleTracks, boolean exportTrackDetail, boolean exportSensorData, boolean exportPhotos) { @@ -268,17 +267,14 @@ public class KmlTrackWriter implements TrackWriter { printWriter.println("" + getCoordinates(trackPoint.getLocation(), " ") + ""); if (exportSensorData) { - TrackPointSensorDataSet sensorDataSet = trackPoint.getSensorDataSet(); - if (sensorDataSet != null) { - if (sensorDataSet.hasHeartRate()) { - heartRateList.add(sensorDataSet.getHeartRate_bpm()); - } - if (sensorDataSet.hasCyclingCadence()) { - cadenceList.add(sensorDataSet.getCyclingCadence_rpm()); - } - if (sensorDataSet.hasPower()) { - powerList.add(sensorDataSet.getPower()); - } + if (trackPoint.hasHeartRate()) { + heartRateList.add(trackPoint.getHeartRate_bpm()); + } + if (trackPoint.hasCyclingCadence()) { + cadenceList.add(trackPoint.getCyclingCadence_rpm()); + } + if (trackPoint.hasPower()) { + powerList.add(trackPoint.getPower()); } } } 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 46d7aea6a..f783f2df1 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 @@ -27,7 +27,6 @@ import org.xml.sax.SAXException; import java.util.ArrayList; import de.dennisguse.opentracks.content.data.TrackPoint; -import de.dennisguse.opentracks.content.data.TrackPointSensorDataSet; import de.dennisguse.opentracks.content.provider.ContentProviderUtils; import de.dennisguse.opentracks.io.file.exporter.KmlTrackWriter; @@ -223,25 +222,16 @@ public class KmlFileTrackImporter extends AbstractFileTrackImporter { for (int i = 0; i < trackPoints.size(); i++) { TrackPoint trackPoint = trackPoints.get(i); - boolean hasSensorData = false; - TrackPointSensorDataSet sensorDataSet = new TrackPointSensorDataSet(trackPoint.getTime()); - if (i < heartRateList.size()) { - sensorDataSet.setHeartRate_bpm(heartRateList.get(i)); - hasSensorData = true; + trackPoint.setHeartRate_bpm(heartRateList.get(i)); } if (i < cadenceList.size()) { - sensorDataSet.setCyclingCadence(cadenceList.get(i)); - hasSensorData = true; + trackPoint.setCyclingCadence_rpm(cadenceList.get(i)); } if (i < powerList.size()) { - sensorDataSet.setPower(cadenceList.get(i)); - hasSensorData = true; + trackPoint.setPower(cadenceList.get(i)); } - if (!hasSensorData) { - trackPoint.setSensorDataSet(sensorDataSet); - } insertTrackPoint(trackPoint); } } diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java index f603cf1d8..82b5265b6 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java @@ -45,7 +45,6 @@ import de.dennisguse.opentracks.TrackDetailActivity; import de.dennisguse.opentracks.TrackListActivity; import de.dennisguse.opentracks.content.data.Track; import de.dennisguse.opentracks.content.data.TrackPoint; -import de.dennisguse.opentracks.content.data.TrackPointSensorDataSet; import de.dennisguse.opentracks.content.data.Waypoint; import de.dennisguse.opentracks.content.provider.ContentProviderUtils; import de.dennisguse.opentracks.content.provider.CustomContentProvider; @@ -576,7 +575,9 @@ public class TrackRecordingService extends Service { return; } - TrackPoint trackPoint = new TrackPoint(location, getTrackPointSensorDataSet()); + TrackPoint trackPoint = new TrackPoint(location); + fillWithSensorDataSet(trackPoint); + notificationManager.updateTrackPoint(this, trackPoint, recordingGpsAccuracy); if (!TrackPointUtils.fulfillsAccuracy(trackPoint, recordingGpsAccuracy)) { @@ -627,7 +628,7 @@ public class TrackRecordingService extends Service { return; } - if (trackPoint.getSensorDataSet() != null || distanceToLastTrackLocation >= recordingDistanceInterval) { + if (trackPoint.hasSensorData() || distanceToLastTrackLocation >= recordingDistanceInterval) { insertTrackPointIfNewer(track, lastTrackPoint); insertTrackPoint(track, trackPoint); isIdle = false; @@ -716,13 +717,11 @@ public class TrackRecordingService extends Service { return remoteSensorManager.getSensorData(); } - TrackPointSensorDataSet getTrackPointSensorDataSet() { + void fillWithSensorDataSet(TrackPoint trackPoint) { SensorDataSet sensorData = getSensorDataSet(); if (sensorData != null) { - return sensorData.createTrackPointSensorDataSet(); + sensorData.fillTrackPoint(trackPoint); } - - return null; } private void registerLocationListener() {