From f9d3108cb2e2b56ae719969b4e561683ac529bf0 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Sun, 11 Jul 2021 17:20:48 +0200 Subject: [PATCH] Extract EGM2008CorrectionManager. Part of #882. --- .../opentracks/content/TrackDataHub.java | 24 ++----------- .../services/TrackRecordingService.java | 31 ++++------------ .../handlers/EGM2008CorrectionManager.java | 35 +++++++++++++++++++ 3 files changed, 45 insertions(+), 45 deletions(-) create mode 100644 src/main/java/de/dennisguse/opentracks/services/handlers/EGM2008CorrectionManager.java diff --git a/src/main/java/de/dennisguse/opentracks/content/TrackDataHub.java b/src/main/java/de/dennisguse/opentracks/content/TrackDataHub.java index 08e27f437..b9c43c969 100644 --- a/src/main/java/de/dennisguse/opentracks/content/TrackDataHub.java +++ b/src/main/java/de/dennisguse/opentracks/content/TrackDataHub.java @@ -27,12 +27,10 @@ import android.util.Log; import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; -import java.io.IOException; import java.util.Collections; import java.util.HashSet; import java.util.Set; -import de.dennisguse.opentracks.content.data.Altitude; import de.dennisguse.opentracks.content.data.Distance; import de.dennisguse.opentracks.content.data.Marker; import de.dennisguse.opentracks.content.data.MarkerColumns; @@ -43,8 +41,8 @@ import de.dennisguse.opentracks.content.data.TracksColumns; import de.dennisguse.opentracks.content.provider.ContentProviderUtils; import de.dennisguse.opentracks.content.provider.TrackPointIterator; import de.dennisguse.opentracks.services.TrackRecordingService; +import de.dennisguse.opentracks.services.handlers.EGM2008CorrectionManager; import de.dennisguse.opentracks.stats.TrackStatisticsUpdater; -import de.dennisguse.opentracks.util.EGM2008Utils; /** * Track data hub. @@ -76,7 +74,7 @@ public class TrackDataHub { private final ContentProviderUtils contentProviderUtils; private final int targetNumPoints; - private EGM2008Utils.EGM2008Correction egm2008Correction; + private final EGM2008CorrectionManager egm2008Correction = new EGM2008CorrectionManager(); //TODO Check if this is needed. private HandlerThread handlerThread; @@ -353,7 +351,7 @@ public class TrackDataHub { break; } - correctAltitude(trackPoint); + egm2008Correction.correctAltitude(context, trackPoint); if (localFirstSeenTrackPointId == null) { localFirstSeenTrackPointId = trackPointId; @@ -394,23 +392,7 @@ public class TrackDataHub { listeners.stream().forEach(TrackDataListener::onNewTrackPointsDone); } - private void correctAltitude(TrackPoint trackPoint) { - if (!trackPoint.hasLocation() || !trackPoint.hasAltitude()) { - Log.d(TAG, "No altitude correction necessary."); - return; - } - if (egm2008Correction == null || !egm2008Correction.canCorrect(trackPoint.getLocation())) { - try { - egm2008Correction = EGM2008Utils.createCorrection(context, trackPoint.getLocation()); - } catch (IOException e) { - Log.e(TAG, "Could not load altitude correction for " + trackPoint, e); - return; - } - } - - trackPoint.setAltitude(Altitude.EGM2008.of(egm2008Correction.correctAltitude(trackPoint.getLocation()))); - } /** * Resets the track points sampling states. diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java index 6c5c42fb6..65c106c76 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java @@ -36,14 +36,12 @@ import androidx.core.app.TaskStackBuilder; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; -import java.io.IOException; import java.time.Duration; import java.time.Instant; import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.TrackListActivity; import de.dennisguse.opentracks.TrackRecordingActivity; -import de.dennisguse.opentracks.content.data.Altitude; import de.dennisguse.opentracks.content.data.Distance; import de.dennisguse.opentracks.content.data.Marker; import de.dennisguse.opentracks.content.data.Track; @@ -52,6 +50,7 @@ import de.dennisguse.opentracks.content.provider.ContentProviderUtils; import de.dennisguse.opentracks.content.provider.CustomContentProvider; import de.dennisguse.opentracks.content.sensor.SensorDataSet; import de.dennisguse.opentracks.io.file.exporter.ExportServiceResultReceiver; +import de.dennisguse.opentracks.services.handlers.EGM2008CorrectionManager; import de.dennisguse.opentracks.services.handlers.GpsStatusValue; import de.dennisguse.opentracks.services.handlers.HandlerServer; import de.dennisguse.opentracks.services.sensors.AltitudeSumManager; @@ -61,7 +60,6 @@ import de.dennisguse.opentracks.services.tasks.PeriodicTaskExecutor; import de.dennisguse.opentracks.settings.SettingsActivity; import de.dennisguse.opentracks.stats.TrackStatistics; import de.dennisguse.opentracks.stats.TrackStatisticsUpdater; -import de.dennisguse.opentracks.util.EGM2008Utils; import de.dennisguse.opentracks.util.ExportUtils; import de.dennisguse.opentracks.util.IntentUtils; import de.dennisguse.opentracks.util.PreferencesUtils; @@ -137,7 +135,7 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand private BluetoothRemoteSensorManager remoteSensorManager; private AltitudeSumManager altitudeSumManager; - private EGM2008Utils.EGM2008Correction egm2008Correction; + private EGM2008CorrectionManager egm2008CorrectionManager; private TrackStatisticsUpdater trackStatisticsUpdater; private TrackPoint lastTrackPoint; @@ -170,6 +168,8 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand notificationManager = new TrackRecordingServiceNotificationManager(this); + egm2008CorrectionManager = new EGM2008CorrectionManager(); + sharedPreferences = PreferencesUtils.getSharedPreferences(this); sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); sharedPreferenceChangeListener.onSharedPreferenceChanged(sharedPreferences, null); @@ -202,6 +202,8 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand altitudeSumManager = null; } + egm2008CorrectionManager = null; + // Reverse order from onCreate showNotification(false); //TODO Why? @@ -536,7 +538,7 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand remoteSensorManager.fill(trackPoint); - correctAltitude(trackPoint); + egm2008CorrectionManager.correctAltitude(this, trackPoint); notificationManager.updateTrackPoint(this, track.getTrackStatistics(), trackPoint, recordingGpsAccuracy); @@ -601,25 +603,6 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand lastTrackPoint = trackPoint; } - //TODO Identical to TrackDataHub - private void correctAltitude(TrackPoint trackPoint) { - if (!trackPoint.hasLocation() || !trackPoint.hasAltitude()) { - Log.d(TAG, "No altitude correction necessary."); - return; - } - - if (egm2008Correction == null || !egm2008Correction.canCorrect(trackPoint.getLocation())) { - try { - egm2008Correction = EGM2008Utils.createCorrection(this, trackPoint.getLocation()); - } catch (IOException e) { - Log.e(TAG, "Could not load altitude correction for " + trackPoint, e); - return; - } - } - - trackPoint.setAltitude(Altitude.EGM2008.of(egm2008Correction.correctAltitude(trackPoint.getLocation()))); - } - @Override public void newGpsStatus(GpsStatusValue gpsStatusValue) { notificationManager.updateContent(getString(gpsStatusValue.message)); diff --git a/src/main/java/de/dennisguse/opentracks/services/handlers/EGM2008CorrectionManager.java b/src/main/java/de/dennisguse/opentracks/services/handlers/EGM2008CorrectionManager.java new file mode 100644 index 000000000..943f03485 --- /dev/null +++ b/src/main/java/de/dennisguse/opentracks/services/handlers/EGM2008CorrectionManager.java @@ -0,0 +1,35 @@ +package de.dennisguse.opentracks.services.handlers; + +import android.content.Context; +import android.util.Log; + +import java.io.IOException; + +import de.dennisguse.opentracks.content.data.Altitude; +import de.dennisguse.opentracks.content.data.TrackPoint; +import de.dennisguse.opentracks.util.EGM2008Utils; + +public class EGM2008CorrectionManager { + + private static final String TAG = EGM2008CorrectionManager.class.getSimpleName(); + + private EGM2008Utils.EGM2008Correction egm2008Correction; + + public void correctAltitude(Context context, TrackPoint trackPoint) { + if (!trackPoint.hasLocation() || !trackPoint.hasAltitude()) { + Log.d(TAG, "No altitude correction necessary."); + return; + } + + if (egm2008Correction == null || !egm2008Correction.canCorrect(trackPoint.getLocation())) { + try { + egm2008Correction = EGM2008Utils.createCorrection(context, trackPoint.getLocation()); + } catch (IOException e) { + Log.e(TAG, "Could not load altitude correction for " + trackPoint, e); + return; + } + } + + trackPoint.setAltitude(Altitude.EGM2008.of(egm2008Correction.correctAltitude(trackPoint.getLocation()))); + } +} \ No newline at end of file