From ba66c4500595fa456b92ff3ee72a4272a0a3eba7 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Sun, 21 Nov 2021 15:10:13 +0100 Subject: [PATCH] Recording data from BLE sensors alone (need to provide distance). GPS is optional in this case, but no coordinates will be available. Naive implementation tries to store data every second using the UI timer. Part of #500. --- .../opentracks/services/handlers/TrackPointCreatorTest.java | 4 ---- .../opentracks/services/TrackRecordingManager.java | 2 +- .../opentracks/services/TrackRecordingService.java | 2 ++ .../dennisguse/opentracks/services/handlers/GPSHandler.java | 4 ++++ .../opentracks/services/handlers/TrackPointCreator.java | 6 +++++- 5 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/androidTest/java/de/dennisguse/opentracks/services/handlers/TrackPointCreatorTest.java b/src/androidTest/java/de/dennisguse/opentracks/services/handlers/TrackPointCreatorTest.java index 911a282a9..c5bd6f527 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/services/handlers/TrackPointCreatorTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/services/handlers/TrackPointCreatorTest.java @@ -3,7 +3,6 @@ package de.dennisguse.opentracks.services.handlers; import static org.mockito.Mockito.verify; import android.content.Context; -import android.content.SharedPreferences; import org.junit.After; import org.junit.Before; @@ -28,9 +27,6 @@ public class TrackPointCreatorTest { @Mock private GPSHandler locationHandler; - @Mock - private SharedPreferences sharedPreferences; - private TrackPointCreator subject; @Before diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java index c18326cd1..46d18f5d8 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java @@ -142,7 +142,7 @@ class TrackRecordingManager { photoUrl = photoUrl != null ? photoUrl : ""; // Insert marker - Marker marker = new Marker(name, description, category, icon, trackId, getTrackStatistics(), lastStoredTrackPoint, photoUrl); + Marker marker = new Marker(name, description, category, icon, trackId, getTrackStatistics(), lastStoredTrackPointWithLocation, photoUrl); Uri uri = contentProviderUtils.insertMarker(marker); return new Marker.Id(ContentUris.parseId(uri)); } diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java index ace7d127d..96cafce0d 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java @@ -87,6 +87,8 @@ public class TrackRecordingService extends Service implements TrackPointCreator. @Override public void run() { updateRecordingDataWhileRecording(); + trackPointCreator.onNewTrackPointWithoutGPS(); //TODO Should not be called every second, right? + with do some duplicate computation with updateRecordingDataWhileRecording(). + Handler localHandler = TrackRecordingService.this.handler; if (localHandler == null) { // when this happens, no recording is running and we should not send any notifications. diff --git a/src/main/java/de/dennisguse/opentracks/services/handlers/GPSHandler.java b/src/main/java/de/dennisguse/opentracks/services/handlers/GPSHandler.java index 2ce546cfe..341618724 100644 --- a/src/main/java/de/dennisguse/opentracks/services/handlers/GPSHandler.java +++ b/src/main/java/de/dennisguse/opentracks/services/handlers/GPSHandler.java @@ -158,6 +158,10 @@ public class GPSHandler implements LocationListener, GpsStatus.GpsStatusListener return lastTrackPoint; } + Distance getThresholdHorizontalAccuracy() { + return thresholdHorizontalAccuracy; + } + /** * Called from {@link GpsStatus} to inform that GPS status has changed from prevStatus to currentStatus. * diff --git a/src/main/java/de/dennisguse/opentracks/services/handlers/TrackPointCreator.java b/src/main/java/de/dennisguse/opentracks/services/handlers/TrackPointCreator.java index 3572fd974..aabceb84d 100644 --- a/src/main/java/de/dennisguse/opentracks/services/handlers/TrackPointCreator.java +++ b/src/main/java/de/dennisguse/opentracks/services/handlers/TrackPointCreator.java @@ -101,7 +101,7 @@ public class TrackPointCreator { gpsHandler.onSharedPreferenceChanged(key); } - public void onNewTrackPoint(TrackPoint trackPoint, Distance thresholdHorizontalAccuracy) { + public synchronized void onNewTrackPoint(@NonNull TrackPoint trackPoint, @NonNull Distance thresholdHorizontalAccuracy) { fill(trackPoint); boolean stored = service.newTrackPoint(trackPoint, thresholdHorizontalAccuracy); @@ -110,6 +110,10 @@ public class TrackPointCreator { } } + public void onNewTrackPointWithoutGPS() { + onNewTrackPoint(new TrackPoint(TrackPoint.Type.SENSORPOINT, createNow()), gpsHandler.getThresholdHorizontalAccuracy()); + } + public TrackPoint createSegmentStartManual() { return TrackPoint.createSegmentStartManualWithTime(createNow()); }