forked from upstream-mirrors/OpenTracks
Move GPSManager into SensorManager.
Includes Bugfix: SensorManager might not have been stopped. Part of #1424.
This commit is contained in:
+1
-1
@@ -30,6 +30,6 @@ public class TrackRecordingServiceTestUtils {
|
|||||||
location.setSpeed(speed);
|
location.setSpeed(speed);
|
||||||
|
|
||||||
trackPointCreator.setClock(time);
|
trackPointCreator.setClock(time);
|
||||||
trackPointCreator.getGpsHandler().onLocationChanged(location);
|
trackPointCreator.getSensorManager().getGpsManager().onLocationChanged(location);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
-57
@@ -1,57 +0,0 @@
|
|||||||
package de.dennisguse.opentracks.services.handlers;
|
|
||||||
|
|
||||||
import static org.mockito.Mockito.verify;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
|
|
||||||
import org.junit.After;
|
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.Ignore;
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.junit.runner.RunWith;
|
|
||||||
import org.mockito.Mock;
|
|
||||||
import org.mockito.junit.MockitoJUnitRunner;
|
|
||||||
|
|
||||||
import de.dennisguse.opentracks.data.models.Distance;
|
|
||||||
import de.dennisguse.opentracks.data.models.TrackPoint;
|
|
||||||
|
|
||||||
@RunWith(MockitoJUnitRunner.class)
|
|
||||||
public class TrackPointCreatorTest {
|
|
||||||
|
|
||||||
@Mock
|
|
||||||
private Context context;
|
|
||||||
|
|
||||||
@Mock
|
|
||||||
private TrackPointCreator.Callback server;
|
|
||||||
|
|
||||||
@Mock
|
|
||||||
private GPSManager locationHandler;
|
|
||||||
|
|
||||||
private TrackPointCreator subject;
|
|
||||||
|
|
||||||
@Before
|
|
||||||
public void setUp() {
|
|
||||||
subject = new TrackPointCreator(locationHandler, server);
|
|
||||||
subject.start(context, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
@After
|
|
||||||
public void tearDown() {
|
|
||||||
subject.stop();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Ignore("ServiceExecutor disabled for #822")
|
|
||||||
@Test
|
|
||||||
public void sendTrackPoint() throws InterruptedException {
|
|
||||||
// given
|
|
||||||
TrackPoint trackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT, null);
|
|
||||||
Distance horizontalAccuracyThreshold = Distance.of(50);
|
|
||||||
|
|
||||||
// when
|
|
||||||
subject.onNewTrackPoint(trackPoint);
|
|
||||||
|
|
||||||
// then
|
|
||||||
Thread.sleep(10); // Wait for executor service
|
|
||||||
verify(server).newTrackPoint(trackPoint, horizontalAccuracyThreshold);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -9,6 +9,7 @@ import androidx.annotation.VisibleForTesting;
|
|||||||
import de.dennisguse.opentracks.data.models.TrackPoint;
|
import de.dennisguse.opentracks.data.models.TrackPoint;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.SensorData;
|
import de.dennisguse.opentracks.sensors.sensorData.SensorData;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.SensorDataSet;
|
import de.dennisguse.opentracks.sensors.sensorData.SensorDataSet;
|
||||||
|
import de.dennisguse.opentracks.services.handlers.GPSManager;
|
||||||
import de.dennisguse.opentracks.services.handlers.TrackPointCreator;
|
import de.dennisguse.opentracks.services.handlers.TrackPointCreator;
|
||||||
|
|
||||||
public class SensorManager {
|
public class SensorManager {
|
||||||
@@ -40,14 +41,20 @@ public class SensorManager {
|
|||||||
|
|
||||||
private AltitudeSumManager altitudeSumManager;
|
private AltitudeSumManager altitudeSumManager;
|
||||||
|
|
||||||
public SensorManager(Context context, Handler handler, TrackPointCreator observer) {
|
private GPSManager gpsManager;
|
||||||
|
|
||||||
|
public SensorManager(TrackPointCreator observer) {
|
||||||
this.observer = observer;
|
this.observer = observer;
|
||||||
bluetoothSensorManager = new BluetoothRemoteSensorManager(context, handler, listener);
|
|
||||||
altitudeSumManager = new AltitudeSumManager();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void start(Context context, Handler handler) {
|
public void start(Context context, Handler handler) {
|
||||||
|
gpsManager = new GPSManager(observer); //TODO Pass listener
|
||||||
|
gpsManager.start(context, handler);
|
||||||
|
|
||||||
|
bluetoothSensorManager = new BluetoothRemoteSensorManager(context, handler, listener);
|
||||||
bluetoothSensorManager.start(context, handler);
|
bluetoothSensorManager.start(context, handler);
|
||||||
|
|
||||||
|
altitudeSumManager = new AltitudeSumManager();
|
||||||
altitudeSumManager.start(context, handler);
|
altitudeSumManager.start(context, handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -62,6 +69,11 @@ public class SensorManager {
|
|||||||
altitudeSumManager = null;
|
altitudeSumManager = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (gpsManager != null) {
|
||||||
|
gpsManager.stop(context);
|
||||||
|
gpsManager = null;
|
||||||
|
}
|
||||||
|
|
||||||
sensorDataSet.clear();
|
sensorDataSet.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -86,6 +98,10 @@ public class SensorManager {
|
|||||||
return bluetoothSensorManager;
|
return bluetoothSensorManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public GPSManager getGpsManager() {
|
||||||
|
return gpsManager;
|
||||||
|
}
|
||||||
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
public AltitudeSumManager getAltitudeSumManager() {
|
public AltitudeSumManager getAltitudeSumManager() {
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ public class GPSManager implements SensorConnector, LocationListenerCompat, GpsS
|
|||||||
|
|
||||||
private final String TAG = GPSManager.class.getSimpleName();
|
private final String TAG = GPSManager.class.getSimpleName();
|
||||||
|
|
||||||
public static final String LOCATION_PROVIDER = LocationManager.GPS_PROVIDER;
|
private static final String LOCATION_PROVIDER = LocationManager.GPS_PROVIDER;
|
||||||
|
|
||||||
private final TrackPointCreator trackPointCreator;
|
private final TrackPointCreator trackPointCreator;
|
||||||
private Context context;
|
private Context context;
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import de.dennisguse.opentracks.data.models.Distance;
|
|||||||
import de.dennisguse.opentracks.data.models.TrackPoint;
|
import de.dennisguse.opentracks.data.models.TrackPoint;
|
||||||
import de.dennisguse.opentracks.sensors.SensorManager;
|
import de.dennisguse.opentracks.sensors.SensorManager;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.SensorDataSet;
|
import de.dennisguse.opentracks.sensors.sensorData.SensorDataSet;
|
||||||
|
import de.dennisguse.opentracks.settings.PreferencesUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates TrackPoints while recording by fusing data from different sensors (e.g., GNSS, barometer, BLE sensors).
|
* Creates TrackPoints while recording by fusing data from different sensors (e.g., GNSS, barometer, BLE sensors).
|
||||||
@@ -32,26 +33,21 @@ public class TrackPointCreator {
|
|||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
private Clock clock = new MonotonicClock();
|
private Clock clock = new MonotonicClock();
|
||||||
|
|
||||||
private final GPSManager gpsManager;
|
|
||||||
private SensorManager sensorManager;
|
private SensorManager sensorManager;
|
||||||
|
|
||||||
public TrackPointCreator(Callback service, Context context, Handler handler) {
|
public TrackPointCreator(Callback service, Context context, Handler handler) {
|
||||||
this.service = service;
|
this.service = service;
|
||||||
this.gpsManager = new GPSManager(this);
|
this.sensorManager = new SensorManager(this);
|
||||||
this.sensorManager = new SensorManager(context, handler, this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
TrackPointCreator(GPSManager gpsManager, Callback service) {
|
TrackPointCreator(Callback service) {
|
||||||
this.service = service;
|
this.service = service;
|
||||||
this.gpsManager = gpsManager;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void start(@NonNull Context context, @NonNull Handler handler) {
|
public synchronized void start(@NonNull Context context, @NonNull Handler handler) {
|
||||||
this.context = context;
|
this.context = context;
|
||||||
|
|
||||||
gpsManager.start(context, handler);
|
|
||||||
sensorManager.start(context, handler);
|
sensorManager.start(context, handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -73,8 +69,7 @@ public class TrackPointCreator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void stop() {
|
public synchronized void stop() {
|
||||||
gpsManager.stop(context);
|
sensorManager.stop(context);
|
||||||
|
|
||||||
this.context = null;
|
this.context = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -93,7 +88,7 @@ public class TrackPointCreator {
|
|||||||
public void onNewTrackPoint(@NonNull TrackPoint trackPoint) {
|
public void onNewTrackPoint(@NonNull TrackPoint trackPoint) {
|
||||||
addSensorData(trackPoint);
|
addSensorData(trackPoint);
|
||||||
|
|
||||||
boolean stored = service.newTrackPoint(trackPoint, gpsManager.getThresholdHorizontalAccuracy());
|
boolean stored = service.newTrackPoint(trackPoint, PreferencesUtils.getThresholdHorizontalAccuracy()); //TODO Cache preference for performance
|
||||||
if (stored) {
|
if (stored) {
|
||||||
reset();
|
reset();
|
||||||
}
|
}
|
||||||
@@ -151,16 +146,6 @@ public class TrackPointCreator {
|
|||||||
this.clock = Clock.fixed(Instant.parse(time), ZoneId.of("CET"));
|
this.clock = Clock.fixed(Instant.parse(time), ZoneId.of("CET"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
|
||||||
public void setClock(@NonNull Clock clock) {
|
|
||||||
this.clock = clock;
|
|
||||||
}
|
|
||||||
|
|
||||||
@VisibleForTesting
|
|
||||||
public GPSManager getGpsHandler() {
|
|
||||||
return gpsManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
void sendGpsStatus(GpsStatusValue gpsStatusValue) {
|
void sendGpsStatus(GpsStatusValue gpsStatusValue) {
|
||||||
service.newGpsStatus(gpsStatusValue);
|
service.newGpsStatus(gpsStatusValue);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user