forked from upstream-mirrors/OpenTracks
@@ -27,12 +27,10 @@ import android.util.Log;
|
|||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import de.dennisguse.opentracks.content.data.Altitude;
|
|
||||||
import de.dennisguse.opentracks.content.data.Distance;
|
import de.dennisguse.opentracks.content.data.Distance;
|
||||||
import de.dennisguse.opentracks.content.data.Marker;
|
import de.dennisguse.opentracks.content.data.Marker;
|
||||||
import de.dennisguse.opentracks.content.data.MarkerColumns;
|
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.ContentProviderUtils;
|
||||||
import de.dennisguse.opentracks.content.provider.TrackPointIterator;
|
import de.dennisguse.opentracks.content.provider.TrackPointIterator;
|
||||||
import de.dennisguse.opentracks.services.TrackRecordingService;
|
import de.dennisguse.opentracks.services.TrackRecordingService;
|
||||||
|
import de.dennisguse.opentracks.services.handlers.EGM2008CorrectionManager;
|
||||||
import de.dennisguse.opentracks.stats.TrackStatisticsUpdater;
|
import de.dennisguse.opentracks.stats.TrackStatisticsUpdater;
|
||||||
import de.dennisguse.opentracks.util.EGM2008Utils;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Track data hub.
|
* Track data hub.
|
||||||
@@ -76,7 +74,7 @@ public class TrackDataHub {
|
|||||||
private final ContentProviderUtils contentProviderUtils;
|
private final ContentProviderUtils contentProviderUtils;
|
||||||
private final int targetNumPoints;
|
private final int targetNumPoints;
|
||||||
|
|
||||||
private EGM2008Utils.EGM2008Correction egm2008Correction;
|
private final EGM2008CorrectionManager egm2008Correction = new EGM2008CorrectionManager();
|
||||||
|
|
||||||
//TODO Check if this is needed.
|
//TODO Check if this is needed.
|
||||||
private HandlerThread handlerThread;
|
private HandlerThread handlerThread;
|
||||||
@@ -353,7 +351,7 @@ public class TrackDataHub {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
correctAltitude(trackPoint);
|
egm2008Correction.correctAltitude(context, trackPoint);
|
||||||
|
|
||||||
if (localFirstSeenTrackPointId == null) {
|
if (localFirstSeenTrackPointId == null) {
|
||||||
localFirstSeenTrackPointId = trackPointId;
|
localFirstSeenTrackPointId = trackPointId;
|
||||||
@@ -394,23 +392,7 @@ public class TrackDataHub {
|
|||||||
listeners.stream().forEach(TrackDataListener::onNewTrackPointsDone);
|
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.
|
* Resets the track points sampling states.
|
||||||
|
|||||||
@@ -36,14 +36,12 @@ import androidx.core.app.TaskStackBuilder;
|
|||||||
import androidx.lifecycle.LiveData;
|
import androidx.lifecycle.LiveData;
|
||||||
import androidx.lifecycle.MutableLiveData;
|
import androidx.lifecycle.MutableLiveData;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
|
|
||||||
import de.dennisguse.opentracks.R;
|
import de.dennisguse.opentracks.R;
|
||||||
import de.dennisguse.opentracks.TrackListActivity;
|
import de.dennisguse.opentracks.TrackListActivity;
|
||||||
import de.dennisguse.opentracks.TrackRecordingActivity;
|
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.Distance;
|
||||||
import de.dennisguse.opentracks.content.data.Marker;
|
import de.dennisguse.opentracks.content.data.Marker;
|
||||||
import de.dennisguse.opentracks.content.data.Track;
|
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.provider.CustomContentProvider;
|
||||||
import de.dennisguse.opentracks.content.sensor.SensorDataSet;
|
import de.dennisguse.opentracks.content.sensor.SensorDataSet;
|
||||||
import de.dennisguse.opentracks.io.file.exporter.ExportServiceResultReceiver;
|
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.GpsStatusValue;
|
||||||
import de.dennisguse.opentracks.services.handlers.HandlerServer;
|
import de.dennisguse.opentracks.services.handlers.HandlerServer;
|
||||||
import de.dennisguse.opentracks.services.sensors.AltitudeSumManager;
|
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.settings.SettingsActivity;
|
||||||
import de.dennisguse.opentracks.stats.TrackStatistics;
|
import de.dennisguse.opentracks.stats.TrackStatistics;
|
||||||
import de.dennisguse.opentracks.stats.TrackStatisticsUpdater;
|
import de.dennisguse.opentracks.stats.TrackStatisticsUpdater;
|
||||||
import de.dennisguse.opentracks.util.EGM2008Utils;
|
|
||||||
import de.dennisguse.opentracks.util.ExportUtils;
|
import de.dennisguse.opentracks.util.ExportUtils;
|
||||||
import de.dennisguse.opentracks.util.IntentUtils;
|
import de.dennisguse.opentracks.util.IntentUtils;
|
||||||
import de.dennisguse.opentracks.util.PreferencesUtils;
|
import de.dennisguse.opentracks.util.PreferencesUtils;
|
||||||
@@ -137,7 +135,7 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand
|
|||||||
private BluetoothRemoteSensorManager remoteSensorManager;
|
private BluetoothRemoteSensorManager remoteSensorManager;
|
||||||
private AltitudeSumManager altitudeSumManager;
|
private AltitudeSumManager altitudeSumManager;
|
||||||
|
|
||||||
private EGM2008Utils.EGM2008Correction egm2008Correction;
|
private EGM2008CorrectionManager egm2008CorrectionManager;
|
||||||
|
|
||||||
private TrackStatisticsUpdater trackStatisticsUpdater;
|
private TrackStatisticsUpdater trackStatisticsUpdater;
|
||||||
private TrackPoint lastTrackPoint;
|
private TrackPoint lastTrackPoint;
|
||||||
@@ -170,6 +168,8 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand
|
|||||||
|
|
||||||
notificationManager = new TrackRecordingServiceNotificationManager(this);
|
notificationManager = new TrackRecordingServiceNotificationManager(this);
|
||||||
|
|
||||||
|
egm2008CorrectionManager = new EGM2008CorrectionManager();
|
||||||
|
|
||||||
sharedPreferences = PreferencesUtils.getSharedPreferences(this);
|
sharedPreferences = PreferencesUtils.getSharedPreferences(this);
|
||||||
sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
|
sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
|
||||||
sharedPreferenceChangeListener.onSharedPreferenceChanged(sharedPreferences, null);
|
sharedPreferenceChangeListener.onSharedPreferenceChanged(sharedPreferences, null);
|
||||||
@@ -202,6 +202,8 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand
|
|||||||
altitudeSumManager = null;
|
altitudeSumManager = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
egm2008CorrectionManager = null;
|
||||||
|
|
||||||
// Reverse order from onCreate
|
// Reverse order from onCreate
|
||||||
showNotification(false); //TODO Why?
|
showNotification(false); //TODO Why?
|
||||||
|
|
||||||
@@ -536,7 +538,7 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand
|
|||||||
|
|
||||||
remoteSensorManager.fill(trackPoint);
|
remoteSensorManager.fill(trackPoint);
|
||||||
|
|
||||||
correctAltitude(trackPoint);
|
egm2008CorrectionManager.correctAltitude(this, trackPoint);
|
||||||
|
|
||||||
notificationManager.updateTrackPoint(this, track.getTrackStatistics(), trackPoint, recordingGpsAccuracy);
|
notificationManager.updateTrackPoint(this, track.getTrackStatistics(), trackPoint, recordingGpsAccuracy);
|
||||||
|
|
||||||
@@ -601,25 +603,6 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand
|
|||||||
lastTrackPoint = trackPoint;
|
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
|
@Override
|
||||||
public void newGpsStatus(GpsStatusValue gpsStatusValue) {
|
public void newGpsStatus(GpsStatusValue gpsStatusValue) {
|
||||||
notificationManager.updateContent(getString(gpsStatusValue.message));
|
notificationManager.updateContent(getString(gpsStatusValue.message));
|
||||||
|
|||||||
+35
@@ -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())));
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user