Merge pull request #1660 from OpenTracksApp/cleanup

Cleanup
This commit is contained in:
Dennis Guse
2023-08-08 18:51:44 +02:00
committed by GitHub
5 changed files with 253 additions and 328 deletions
@@ -153,25 +153,19 @@ public class CSVTrackExporter implements TrackExporter {
} }
public void close() { public void close() {
if (printWriter != null) {
printWriter.flush(); printWriter.flush();
printWriter = null; printWriter = null;
} }
}
public void writeHeader(List<Column> columns) { public void writeHeader(List<Column> columns) {
if (printWriter != null) {
String columnNames = columns.stream().map(c -> c.columnName).reduce((s, s2) -> s + "," + s2).orElseThrow(() -> new RuntimeException("No columns defined")); String columnNames = columns.stream().map(c -> c.columnName).reduce((s, s2) -> s + "," + s2).orElseThrow(() -> new RuntimeException("No columns defined"));
printWriter.println("#" + columnNames); printWriter.println("#" + columnNames);
} }
}
public void writeTrackPoint(List<Column> columns, TrackPoint trackPoint) { public void writeTrackPoint(List<Column> columns, TrackPoint trackPoint) {
if (printWriter != null) {
String columnNames = columns.stream().map(c -> c.extractor.apply(trackPoint)).reduce((s, s2) -> s + "," + s2).orElseThrow(() -> new RuntimeException("No columns defined")); String columnNames = columns.stream().map(c -> c.extractor.apply(trackPoint)).reduce((s, s2) -> s + "," + s2).orElseThrow(() -> new RuntimeException("No columns defined"));
printWriter.println(columnNames); printWriter.println(columnNames);
} }
}
private static class Column { private static class Column {
final String columnName; final String columnName;
@@ -199,15 +199,12 @@ public class GPXTrackExporter implements TrackExporter {
} }
public void close() { public void close() {
if (printWriter != null) {
printWriter.flush(); printWriter.flush();
printWriter = null; printWriter = null;
} }
}
public void writeHeader() { public void writeHeader() {
if (printWriter != null) {
printWriter.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); printWriter.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
printWriter.println("<gpx"); printWriter.println("<gpx");
printWriter.println("version=\"1.1\""); printWriter.println("version=\"1.1\"");
@@ -229,13 +226,10 @@ public class GPXTrackExporter implements TrackExporter {
+ " http://www.cluetrust.com/Schemas http://www.cluetrust.com/Schemas/gpxdata10.xsd" + " http://www.cluetrust.com/Schemas http://www.cluetrust.com/Schemas/gpxdata10.xsd"
+ " http://opentracksapp.com/xmlschemas/v1 http://opentracksapp.com/xmlschemas/OpenTracks_v1.xsd\">"); + " http://opentracksapp.com/xmlschemas/v1 http://opentracksapp.com/xmlschemas/OpenTracks_v1.xsd\">");
} }
}
public void writeFooter() { public void writeFooter() {
if (printWriter != null) {
printWriter.println("</gpx>"); printWriter.println("</gpx>");
} }
}
private void writeMarkers(Track track) throws InterruptedException { private void writeMarkers(Track track) throws InterruptedException {
try (Cursor cursor = contentProviderUtils.getMarkerCursor(track.getId(), null, -1)) { try (Cursor cursor = contentProviderUtils.getMarkerCursor(track.getId(), null, -1)) {
@@ -254,7 +248,6 @@ public class GPXTrackExporter implements TrackExporter {
} }
public void writeMarker(ZoneOffset zoneOffset, Marker marker) { public void writeMarker(ZoneOffset zoneOffset, Marker marker) {
if (printWriter != null) {
printWriter.println("<wpt " + formatLocation(marker.getLatitude(), marker.getLongitude()) + ">"); printWriter.println("<wpt " + formatLocation(marker.getLatitude(), marker.getLongitude()) + ">");
if (marker.hasAltitude()) { if (marker.hasAltitude()) {
printWriter.println("<ele>" + ALTITUDE_FORMAT.format(marker.getAltitude().toM()) + "</ele>"); printWriter.println("<ele>" + ALTITUDE_FORMAT.format(marker.getAltitude().toM()) + "</ele>");
@@ -265,10 +258,8 @@ public class GPXTrackExporter implements TrackExporter {
printWriter.println("<type>" + StringUtils.formatCData(marker.getCategory()) + "</type>"); printWriter.println("<type>" + StringUtils.formatCData(marker.getCategory()) + "</type>");
printWriter.println("</wpt>"); printWriter.println("</wpt>");
} }
}
public void writeBeginTrack(Track track) { public void writeBeginTrack(Track track) {
if (printWriter != null) {
printWriter.println("<trk>"); printWriter.println("<trk>");
printWriter.println("<name>" + StringUtils.formatCData(track.getName()) + "</name>"); printWriter.println("<name>" + StringUtils.formatCData(track.getName()) + "</name>");
printWriter.println("<desc>" + StringUtils.formatCData(track.getDescription()) + "</desc>"); printWriter.println("<desc>" + StringUtils.formatCData(track.getDescription()) + "</desc>");
@@ -291,13 +282,10 @@ public class GPXTrackExporter implements TrackExporter {
printWriter.println("</extensions>"); printWriter.println("</extensions>");
} }
}
public void writeEndTrack() { public void writeEndTrack() {
if (printWriter != null) {
printWriter.println("</trk>"); printWriter.println("</trk>");
} }
}
public void writeOpenSegment() { public void writeOpenSegment() {
printWriter.println("<trkseg>"); printWriter.println("<trkseg>");
@@ -310,8 +298,6 @@ public class GPXTrackExporter implements TrackExporter {
public Distance writeTrackPoint(ZoneOffset zoneOffset, TrackPoint trackPoint, List<TrackPoint> sensorPoints, Distance trackDistance) { public Distance writeTrackPoint(ZoneOffset zoneOffset, TrackPoint trackPoint, List<TrackPoint> sensorPoints, Distance trackDistance) {
Distance cumulativeDistance = null; Distance cumulativeDistance = null;
if (printWriter != null) {
printWriter.println("<trkpt " + formatLocation(trackPoint.getLatitude(), trackPoint.getLongitude()) + ">"); printWriter.println("<trkpt " + formatLocation(trackPoint.getLatitude(), trackPoint.getLongitude()) + ">");
if (trackPoint.hasAltitude()) { if (trackPoint.hasAltitude()) {
@@ -370,7 +356,7 @@ public class GPXTrackExporter implements TrackExporter {
} }
printWriter.println("</trkpt>"); printWriter.println("</trkpt>");
}
if (cumulativeDistance != null) { if (cumulativeDistance != null) {
return cumulativeDistance; return cumulativeDistance;
} }
@@ -212,14 +212,11 @@ public class KMLTrackExporter implements TrackExporter {
@VisibleForTesting @VisibleForTesting
void close() { void close() {
if (printWriter != null) {
printWriter.flush(); printWriter.flush();
printWriter = null; printWriter = null;
} }
}
private void writeHeader(List<Track> tracks) { private void writeHeader(List<Track> tracks) {
if (printWriter != null) {
printWriter.println( printWriter.println(
""" """
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
@@ -252,25 +249,19 @@ public class KMLTrackExporter implements TrackExporter {
printWriter.println("</Schema>"); printWriter.println("</Schema>");
} }
}
private void writeFooter() { private void writeFooter() {
if (printWriter != null) {
printWriter.println("</Document>"); printWriter.println("</Document>");
printWriter.println("</kml>"); printWriter.println("</kml>");
} }
}
private void writeBeginMarkers(Track track) { private void writeBeginMarkers(Track track) {
if (printWriter != null) {
printWriter.println("<Folder>"); printWriter.println("<Folder>");
printWriter.println("<name>" + StringUtils.formatCData(context.getString(R.string.track_markers, track.getName())) + "</name>"); printWriter.println("<name>" + StringUtils.formatCData(context.getString(R.string.track_markers, track.getName())) + "</name>");
printWriter.println("<open>1</open>"); printWriter.println("<open>1</open>");
} }
}
private void writeMarker(Marker marker, ZoneOffset zoneOffset) { private void writeMarker(Marker marker, ZoneOffset zoneOffset) {
if (printWriter != null) {
boolean existsPhoto = MarkerUtils.buildInternalPhotoFile(context, marker.getTrackId(), marker.getPhotoURI()) != null; boolean existsPhoto = MarkerUtils.buildInternalPhotoFile(context, marker.getTrackId(), marker.getPhotoURI()) != null;
if (marker.hasPhoto() && exportPhotos && existsPhoto) { if (marker.hasPhoto() && exportPhotos && existsPhoto) {
float heading = getHeading(marker.getTrackId(), marker.getLocation()); float heading = getHeading(marker.getTrackId(), marker.getLocation());
@@ -279,30 +270,22 @@ public class KMLTrackExporter implements TrackExporter {
writePlacemark(marker.getName(), marker.getCategory(), marker.getDescription(), marker.getLocation(), zoneOffset); writePlacemark(marker.getName(), marker.getCategory(), marker.getDescription(), marker.getLocation(), zoneOffset);
} }
} }
}
private void writeEndMarkers() { private void writeEndMarkers() {
if (printWriter != null) {
printWriter.println("</Folder>"); printWriter.println("</Folder>");
} }
}
private void writeMultiTrackBegin() { private void writeMultiTrackBegin() {
if (printWriter != null) {
printWriter.println("<Folder id=\"tracks\">"); printWriter.println("<Folder id=\"tracks\">");
printWriter.println("<name>" + context.getString(R.string.generic_tracks) + "</name>"); printWriter.println("<name>" + context.getString(R.string.generic_tracks) + "</name>");
printWriter.println("<open>1</open>"); printWriter.println("<open>1</open>");
} }
}
private void writeMultiTrackEnd() { private void writeMultiTrackEnd() {
if (printWriter != null) {
printWriter.println("</Folder>"); printWriter.println("</Folder>");
} }
}
private void writeBeginTrack(Track track) { private void writeBeginTrack(Track track) {
if (printWriter != null) {
printWriter.println("<Placemark>"); printWriter.println("<Placemark>");
printWriter.println("<name>" + StringUtils.formatCData(track.getName()) + "</name>"); printWriter.println("<name>" + StringUtils.formatCData(track.getName()) + "</name>");
@@ -316,19 +299,15 @@ public class KMLTrackExporter implements TrackExporter {
printWriter.println("<altitudeMode>absolute</altitudeMode>"); printWriter.println("<altitudeMode>absolute</altitudeMode>");
printWriter.println("<interpolate>1</interpolate>"); printWriter.println("<interpolate>1</interpolate>");
} }
}
private void writeEndTrack() { private void writeEndTrack() {
if (printWriter != null) {
printWriter.println("</MultiTrack>"); printWriter.println("</MultiTrack>");
printWriter.println("</Placemark>"); printWriter.println("</Placemark>");
} }
}
@VisibleForTesting @VisibleForTesting
void writeOpenSegment() { void writeOpenSegment() {
if (printWriter != null) {
printWriter.println("<Track>"); printWriter.println("<Track>");
speedList.clear(); speedList.clear();
distanceList.clear(); distanceList.clear();
@@ -340,11 +319,9 @@ public class KMLTrackExporter implements TrackExporter {
accuracyHorizontal.clear(); accuracyHorizontal.clear();
accuracyVertical.clear(); accuracyVertical.clear();
} }
}
@VisibleForTesting @VisibleForTesting
void writeCloseSegment() { void writeCloseSegment() {
if (printWriter != null) {
printWriter.println("<ExtendedData>"); printWriter.println("<ExtendedData>");
printWriter.println("<SchemaData schemaUrl=\"#" + SCHEMA_ID + "\">"); printWriter.println("<SchemaData schemaUrl=\"#" + SCHEMA_ID + "\">");
if (speedList.stream().anyMatch(Objects::nonNull)) { if (speedList.stream().anyMatch(Objects::nonNull)) {
@@ -378,11 +355,9 @@ public class KMLTrackExporter implements TrackExporter {
printWriter.println("</ExtendedData>"); printWriter.println("</ExtendedData>");
printWriter.println("</Track>"); printWriter.println("</Track>");
} }
}
@VisibleForTesting @VisibleForTesting
void writeTrackPoint(ZoneOffset zoneOffset, TrackPoint trackPoint) { void writeTrackPoint(ZoneOffset zoneOffset, TrackPoint trackPoint) {
if (printWriter != null) {
printWriter.println("<when>" + getTime(zoneOffset, trackPoint.getLocation()) + "</when>"); printWriter.println("<when>" + getTime(zoneOffset, trackPoint.getLocation()) + "</when>");
if (trackPoint.hasLocation()) { if (trackPoint.hasLocation()) {
@@ -402,7 +377,6 @@ public class KMLTrackExporter implements TrackExporter {
accuracyHorizontal.add(trackPoint.hasHorizontalAccuracy() ? (float) trackPoint.getHorizontalAccuracy().toM() : null); accuracyHorizontal.add(trackPoint.hasHorizontalAccuracy() ? (float) trackPoint.getHorizontalAccuracy().toM() : null);
accuracyVertical.add(trackPoint.hasVerticalAccuracy() ? (float) trackPoint.getVerticalAccuracy().toM() : null); accuracyVertical.add(trackPoint.hasVerticalAccuracy() ? (float) trackPoint.getVerticalAccuracy().toM() : null);
} }
}
/** /**
* Writes the simple array data. * Writes the simple array data.
@@ -21,6 +21,7 @@ import de.dennisguse.opentracks.data.models.Marker;
import de.dennisguse.opentracks.data.models.Track; import de.dennisguse.opentracks.data.models.Track;
import de.dennisguse.opentracks.data.models.TrackPoint; import de.dennisguse.opentracks.data.models.TrackPoint;
import de.dennisguse.opentracks.sensors.sensorData.SensorDataSet; import de.dennisguse.opentracks.sensors.sensorData.SensorDataSet;
import de.dennisguse.opentracks.services.handlers.AltitudeCorrectionManager;
import de.dennisguse.opentracks.services.handlers.TrackPointCreator; import de.dennisguse.opentracks.services.handlers.TrackPointCreator;
import de.dennisguse.opentracks.settings.PreferencesUtils; import de.dennisguse.opentracks.settings.PreferencesUtils;
import de.dennisguse.opentracks.stats.TrackStatistics; import de.dennisguse.opentracks.stats.TrackStatistics;
@@ -31,9 +32,13 @@ class TrackRecordingManager implements SharedPreferences.OnSharedPreferenceChang
private static final String TAG = TrackRecordingManager.class.getSimpleName(); private static final String TAG = TrackRecordingManager.class.getSimpleName();
private static final AltitudeCorrectionManager ALTITUDE_CORRECTION_MANAGER = new AltitudeCorrectionManager();
private final ContentProviderUtils contentProviderUtils; private final ContentProviderUtils contentProviderUtils;
private final Context context; private final Context context;
private final TrackPointCreator trackPointCreator;
private Distance recordingDistanceInterval; private Distance recordingDistanceInterval;
private Distance maxRecordingDistance; private Distance maxRecordingDistance;
@@ -47,8 +52,9 @@ class TrackRecordingManager implements SharedPreferences.OnSharedPreferenceChang
private TrackPoint lastStoredTrackPoint; private TrackPoint lastStoredTrackPoint;
private TrackPoint lastStoredTrackPointWithLocation; private TrackPoint lastStoredTrackPointWithLocation;
TrackRecordingManager(Context context) { TrackRecordingManager(Context context, TrackPointCreator trackPointCreator) {
this.context = context; this.context = context;
this.trackPointCreator = trackPointCreator;
contentProviderUtils = new ContentProviderUtils(context); contentProviderUtils = new ContentProviderUtils(context);
} }
@@ -60,7 +66,7 @@ class TrackRecordingManager implements SharedPreferences.OnSharedPreferenceChang
PreferencesUtils.unregisterOnSharedPreferenceChangeListener(this); PreferencesUtils.unregisterOnSharedPreferenceChangeListener(this);
} }
Track.Id startNewTrack(TrackPointCreator trackPointCreator) { Track.Id startNewTrack() {
TrackPoint segmentStartTrackPoint = trackPointCreator.createSegmentStartManual(); TrackPoint segmentStartTrackPoint = trackPointCreator.createSegmentStartManual();
// Create new track // Create new track
ZoneOffset zoneOffset = ZoneOffset.systemDefault().getRules().getOffset(segmentStartTrackPoint.getTime()); ZoneOffset zoneOffset = ZoneOffset.systemDefault().getRules().getOffset(segmentStartTrackPoint.getTime());
@@ -86,7 +92,7 @@ class TrackRecordingManager implements SharedPreferences.OnSharedPreferenceChang
/** /**
* @return if the recording could be started. * @return if the recording could be started.
*/ */
boolean resumeExistingTrack(@NonNull Track.Id resumeTrackId, @NonNull TrackPointCreator trackPointCreator) { boolean resumeExistingTrack(@NonNull Track.Id resumeTrackId) {
trackId = resumeTrackId; trackId = resumeTrackId;
Track track = contentProviderUtils.getTrack(trackId); Track track = contentProviderUtils.getTrack(trackId);
if (track == null) { if (track == null) {
@@ -102,7 +108,7 @@ class TrackRecordingManager implements SharedPreferences.OnSharedPreferenceChang
return true; return true;
} }
void end(TrackPointCreator trackPointCreator) { void end() {
TrackPoint segmentEnd = trackPointCreator.createSegmentEnd(); TrackPoint segmentEnd = trackPointCreator.createSegmentEnd();
insertTrackPoint(segmentEnd, true); insertTrackPoint(segmentEnd, true);
@@ -112,15 +118,14 @@ class TrackRecordingManager implements SharedPreferences.OnSharedPreferenceChang
reset(); reset();
} }
Pair<Track, Pair<TrackPoint, SensorDataSet>> getDataForUI(TrackPointCreator trackPointCreator) { Pair<Track, Pair<TrackPoint, SensorDataSet>> getDataForUI() {
if (trackPointCreator == null) {
return null;
}
TrackStatisticsUpdater tmpTrackStatisticsUpdater = new TrackStatisticsUpdater(trackStatisticsUpdater); TrackStatisticsUpdater tmpTrackStatisticsUpdater = new TrackStatisticsUpdater(trackStatisticsUpdater);
Pair<TrackPoint, SensorDataSet> current = trackPointCreator.createCurrentTrackPoint(lastTrackPointUIWithSpeed, lastTrackPointUIWithAltitude, lastStoredTrackPointWithLocation); Pair<TrackPoint, SensorDataSet> current = trackPointCreator.createCurrentTrackPoint(lastTrackPointUIWithSpeed, lastTrackPointUIWithAltitude, lastStoredTrackPointWithLocation);
tmpTrackStatisticsUpdater.addTrackPoint(current.first); tmpTrackStatisticsUpdater.addTrackPoint(current.first);
ALTITUDE_CORRECTION_MANAGER.correctAltitude(context, current.first);
Track track = contentProviderUtils.getTrack(trackId); //Get copy Track track = contentProviderUtils.getTrack(trackId); //Get copy
if (track == null) { if (track == null) {
Log.w(TAG, "Requesting data if not recording is taking place, should not be done."); Log.w(TAG, "Requesting data if not recording is taking place, should not be done.");
@@ -38,7 +38,6 @@ import de.dennisguse.opentracks.data.models.Track;
import de.dennisguse.opentracks.data.models.TrackPoint; import de.dennisguse.opentracks.data.models.TrackPoint;
import de.dennisguse.opentracks.sensors.sensorData.SensorDataSet; import de.dennisguse.opentracks.sensors.sensorData.SensorDataSet;
import de.dennisguse.opentracks.services.announcement.VoiceAnnouncementManager; import de.dennisguse.opentracks.services.announcement.VoiceAnnouncementManager;
import de.dennisguse.opentracks.services.handlers.AltitudeCorrectionManager;
import de.dennisguse.opentracks.services.handlers.GpsStatusValue; import de.dennisguse.opentracks.services.handlers.GpsStatusValue;
import de.dennisguse.opentracks.services.handlers.TrackPointCreator; import de.dennisguse.opentracks.services.handlers.TrackPointCreator;
import de.dennisguse.opentracks.util.SystemUtils; import de.dennisguse.opentracks.util.SystemUtils;
@@ -71,13 +70,7 @@ public class TrackRecordingService extends Service implements TrackPointCreator.
public void run() { public void run() {
updateRecordingDataWhileRecording(); updateRecordingDataWhileRecording();
Handler localHandler = TrackRecordingService.this.handler; TrackRecordingService.this.handler.postDelayed(this, RECORDING_DATA_UPDATE_INTERVAL.toMillis());
if (localHandler == null) {
// when this happens, no recording is running and we should not send any notifications.
//TODO This implementation is not a good idea; rather solve the issue for this properly
return;
}
localHandler.postDelayed(this, RECORDING_DATA_UPDATE_INTERVAL.toMillis());
} }
}; };
@@ -97,8 +90,6 @@ public class TrackRecordingService extends Service implements TrackPointCreator.
private VoiceAnnouncementManager voiceAnnouncementManager; private VoiceAnnouncementManager voiceAnnouncementManager;
private TrackRecordingServiceNotificationManager notificationManager; private TrackRecordingServiceNotificationManager notificationManager;
private AltitudeCorrectionManager egm2008CorrectionManager;
@Override @Override
public void onCreate() { public void onCreate() {
super.onCreate(); super.onCreate();
@@ -110,10 +101,9 @@ public class TrackRecordingService extends Service implements TrackPointCreator.
gpsStatusObservable = new MutableLiveData<>(STATUS_GPS_DEFAULT); gpsStatusObservable = new MutableLiveData<>(STATUS_GPS_DEFAULT);
recordingDataObservable = new MutableLiveData<>(NOT_RECORDING); recordingDataObservable = new MutableLiveData<>(NOT_RECORDING);
egm2008CorrectionManager = new AltitudeCorrectionManager();
trackRecordingManager = new TrackRecordingManager(this);
trackRecordingManager.start();
trackPointCreator = new TrackPointCreator(this, this, handler); trackPointCreator = new TrackPointCreator(this, this, handler);
trackRecordingManager = new TrackRecordingManager(this, trackPointCreator);
trackRecordingManager.start();
voiceAnnouncementManager = new VoiceAnnouncementManager(this); voiceAnnouncementManager = new VoiceAnnouncementManager(this);
notificationManager = new TrackRecordingServiceNotificationManager(this); notificationManager = new TrackRecordingServiceNotificationManager(this);
@@ -136,12 +126,8 @@ public class TrackRecordingService extends Service implements TrackPointCreator.
notificationManager.stop(); notificationManager.stop();
notificationManager = null; notificationManager = null;
egm2008CorrectionManager = null;
try {
voiceAnnouncementManager.stop(); voiceAnnouncementManager.stop();
} finally {
voiceAnnouncementManager = null; voiceAnnouncementManager = null;
}
// This should be the next to last operation // This should be the next to last operation
wakeLock = SystemUtils.releaseWakeLock(wakeLock); wakeLock = SystemUtils.releaseWakeLock(wakeLock);
@@ -171,7 +157,7 @@ public class TrackRecordingService extends Service implements TrackPointCreator.
} }
// Set recording status // Set recording status
Track.Id trackId = trackRecordingManager.startNewTrack(trackPointCreator); Track.Id trackId = trackRecordingManager.startNewTrack();
updateRecordingStatus(RecordingStatus.record(trackId)); updateRecordingStatus(RecordingStatus.record(trackId));
startRecording(); startRecording();
@@ -179,7 +165,7 @@ public class TrackRecordingService extends Service implements TrackPointCreator.
} }
public void resumeTrack(Track.Id trackId) { public void resumeTrack(Track.Id trackId) {
if (!trackRecordingManager.resumeExistingTrack(trackId, trackPointCreator)) { if (!trackRecordingManager.resumeExistingTrack(trackId)) {
Log.w(TAG, "Cannot resume a non-existing track."); Log.w(TAG, "Cannot resume a non-existing track.");
return; return;
} }
@@ -223,7 +209,7 @@ public class TrackRecordingService extends Service implements TrackPointCreator.
// Set recording status // Set recording status
updateRecordingStatus(STATUS_DEFAULT); updateRecordingStatus(STATUS_DEFAULT);
trackRecordingManager.end(trackPointCreator); trackRecordingManager.end();
endRecording(); endRecording();
stopSelf(); stopSelf();
@@ -272,14 +258,9 @@ public class TrackRecordingService extends Service implements TrackPointCreator.
@Override @Override
public void newGpsStatus(GpsStatusValue gpsStatusValue) { public void newGpsStatus(GpsStatusValue gpsStatusValue) {
//TODO This check should not be necessary, but prevents a crash; somehow the shutdown is not working correctly as we should not receive a notification then.
// It is likely a race condition as the LocationManager provides location updates without using the Handler.
if (gpsStatusObservable != null) {
notificationManager.updateContent(getString(gpsStatusValue.message)); notificationManager.updateContent(getString(gpsStatusValue.message));
gpsStatusObservable.postValue(gpsStatusValue); gpsStatusObservable.postValue(gpsStatusValue);
} }
}
public Marker.Id insertMarker(String name, String category, String description, String photoUrl) { public Marker.Id insertMarker(String name, String category, String description, String photoUrl) {
if (!isRecording()) { if (!isRecording()) {
@@ -316,26 +297,11 @@ public class TrackRecordingService extends Service implements TrackPointCreator.
} }
// Compute temporary track statistics using sensorData and update time. // Compute temporary track statistics using sensorData and update time.
Pair<Track, Pair<TrackPoint, SensorDataSet>> data = trackRecordingManager.getDataForUI();
TrackPointCreator localTrackPointCreator = this.trackPointCreator; voiceAnnouncementManager.update(this, data.first);
VoiceAnnouncementManager localVoiceAnnouncementManager = this.voiceAnnouncementManager;
if (localTrackPointCreator == null || localVoiceAnnouncementManager == null) {
// when this happens, no recording is running and we should not send any notifications.
//TODO This implementation is not a good idea; rather solve the issue for this properly
return;
}
Pair<Track, Pair<TrackPoint, SensorDataSet>> data = trackRecordingManager.getDataForUI(trackPointCreator); recordingDataObservable.postValue(new RecordingData(data.first, data.second.first, data.second.second));
if (data == null) {
Log.w(TAG, "Requesting data if not recording is taking place, should not be done.");
return;
}
TrackPoint trackPoint = data.second.first;
egm2008CorrectionManager.correctAltitude(this, trackPoint);
localVoiceAnnouncementManager.update(this, data.first);
recordingDataObservable.postValue(new RecordingData(data.first, trackPoint, data.second.second));
} }
@VisibleForTesting @VisibleForTesting