diff --git a/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/ExportImportTest.java b/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/ExportImportTest.java index df0810d0d..81a865605 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/ExportImportTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/ExportImportTest.java @@ -166,7 +166,7 @@ public class ExportImportTest { trackPointCreator.setClock("2020-02-02T02:02:18Z"); BluetoothRemoteSensorManager mockRemoteSensorManager = Mockito.mock(BluetoothRemoteSensorManager.class); - trackPointCreator.setRemoteSensorManager(mockRemoteSensorManager); + trackPointCreator.getSensorManager().setBluetoothSensorManager(mockRemoteSensorManager); service.endCurrentTrack(); trackPointCreator.setClock("2020-02-02T02:03:20Z"); @@ -179,7 +179,7 @@ public class ExportImportTest { sendLocation(trackPointCreator, "2020-02-02T02:03:23Z", 3, 16.001, 10, 27, 15, 10, 0); trackPointCreator.setClock("2020-02-02T02:03:24Z"); - trackPointCreator.setRemoteSensorManager(mockRemoteSensorManager); + trackPointCreator.getSensorManager().setBluetoothSensorManager(mockRemoteSensorManager); service.endCurrentTrack(); Track track = contentProviderUtils.getTrack(trackId); @@ -521,12 +521,12 @@ public class ExportImportTest { sensorDataSet.fillTrackPoint(trackPoint); return sensorDataSet; }); - trackPointCreator.setRemoteSensorManager(remoteSensorManager); + trackPointCreator.getSensorManager().setBluetoothSensorManager(remoteSensorManager); trackPointCreator.onChange(new SensorDataSet()); } private void mockAltitudeChange(TrackPointCreator trackPointCreator, float altitudeGain) { - AltitudeSumManager altitudeSumManager = trackPointCreator.getAltitudeSumManager(); + AltitudeSumManager altitudeSumManager = trackPointCreator.getSensorManager().getAltitudeSumManager(); altitudeSumManager.setAltitudeGain_m(altitudeGain); altitudeSumManager.setAltitudeLoss_m(altitudeGain); } diff --git a/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestRecording.java b/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestRecording.java index 3901a9342..4bd0c580d 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestRecording.java +++ b/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestRecording.java @@ -45,6 +45,8 @@ import de.dennisguse.opentracks.stats.TrackStatistics; /** * Tests insert location. + * Note: on API23, the TrackRecordingService may not be stopped properly before the next test. + * So, if something fails, subsequent tests may be affected. */ @RunWith(AndroidJUnit4.class) public class TrackRecordingServiceTestRecording { @@ -112,7 +114,7 @@ public class TrackRecordingServiceTestRecording { String startTime = "2020-02-02T02:02:02Z"; trackPointCreator.setClock(startTime); Track.Id trackId = service.startNewTrack(); - trackPointCreator.setAltitudeSumManager(altitudeSumManager); + trackPointCreator.getSensorManager().setAltitudeSumManager(altitudeSumManager); // then assertEquals(new TrackStatistics(startTime, startTime, 0, 0, 0, 0, null, null) @@ -149,7 +151,7 @@ public class TrackRecordingServiceTestRecording { trackPointCreator.setClock(startTime); Track.Id trackId = service.startNewTrack(); - trackPointCreator.setAltitudeSumManager(altitudeSumManager); + trackPointCreator.getSensorManager().setAltitudeSumManager(altitudeSumManager); // when String pauseTime = "2020-02-02T02:02:03Z"; @@ -195,7 +197,7 @@ public class TrackRecordingServiceTestRecording { String starTime = "2020-02-02T02:02:02Z"; trackPointCreator.setClock(starTime); Track.Id trackId = service.startNewTrack(); - trackPointCreator.setAltitudeSumManager(altitudeSumManager); + trackPointCreator.getSensorManager().setAltitudeSumManager(altitudeSumManager); String pauseTime = "2020-02-02T02:02:03Z"; trackPointCreator.setClock(pauseTime); @@ -227,7 +229,7 @@ public class TrackRecordingServiceTestRecording { trackPointCreator.setClock(startTime); Track.Id trackId = service.startNewTrack(); - trackPointCreator.setAltitudeSumManager(altitudeSumManager); + trackPointCreator.getSensorManager().setAltitudeSumManager(altitudeSumManager); String stopTime = "2020-02-02T02:02:03Z"; trackPointCreator.setClock(stopTime); @@ -237,7 +239,7 @@ public class TrackRecordingServiceTestRecording { String resumeTime = "2020-02-02T02:02:04Z"; trackPointCreator.setClock(resumeTime); service.resumeTrack(trackId); - trackPointCreator.setAltitudeSumManager(altitudeSumManager); + trackPointCreator.getSensorManager().setAltitudeSumManager(altitudeSumManager); // then new TrackPointAssert().assertEquals(List.of( @@ -258,12 +260,13 @@ public class TrackRecordingServiceTestRecording { trackPointCreator.setClock(startTime); Track.Id trackId = service.startNewTrack(); - trackPointCreator.setAltitudeSumManager(altitudeSumManager); - BluetoothRemoteSensorManager remoteSensorManager = trackPointCreator.getRemoteSensorManager(); + trackPointCreator.getSensorManager().setAltitudeSumManager(altitudeSumManager); + BluetoothRemoteSensorManager remoteSensorManager = trackPointCreator.getSensorManager().getBluetoothSensorManager(); // when String sensor1 = "2020-02-02T02:02:03Z"; trackPointCreator.setClock(sensor1); + remoteSensorManager.onChanged(new SensorDataHeartRate("", "", HeartRate.of(5))); //Should be ignored String sensor3 = "2020-02-02T02:02:13Z"; @@ -297,7 +300,7 @@ public class TrackRecordingServiceTestRecording { TrackPointCreator trackPointCreator = service.getTrackPointCreator(); trackPointCreator.setClock(startTime); Track.Id trackId = service.startNewTrack(); - trackPointCreator.setAltitudeSumManager(altitudeSumManager); + trackPointCreator.getSensorManager().setAltitudeSumManager(altitudeSumManager); // when @@ -371,7 +374,7 @@ public class TrackRecordingServiceTestRecording { TrackPointCreator trackPointCreator = service.getTrackPointCreator(); trackPointCreator.setClock(startTime); Track.Id trackId = service.startNewTrack(); - trackPointCreator.setAltitudeSumManager(altitudeSumManager); + trackPointCreator.getSensorManager().setAltitudeSumManager(altitudeSumManager); // when String gps1 = "2020-02-02T02:02:03Z"; @@ -436,7 +439,7 @@ public class TrackRecordingServiceTestRecording { TrackPointCreator trackPointCreator = service.getTrackPointCreator(); trackPointCreator.setClock(startTime); Track.Id trackId = service.startNewTrack(); - trackPointCreator.setAltitudeSumManager(altitudeSumManager); + trackPointCreator.getSensorManager().setAltitudeSumManager(altitudeSumManager); // when String gps1 = "2020-02-02T02:02:03Z"; @@ -500,7 +503,7 @@ public class TrackRecordingServiceTestRecording { TrackPointCreator trackPointCreator = service.getTrackPointCreator(); trackPointCreator.setClock(startTime); Track.Id trackId = service.startNewTrack(); - trackPointCreator.setAltitudeSumManager(altitudeSumManager); + trackPointCreator.getSensorManager().setAltitudeSumManager(altitudeSumManager); // when String gps1 = "2020-02-02T02:02:03Z"; @@ -564,7 +567,7 @@ public class TrackRecordingServiceTestRecording { TrackPointCreator trackPointCreator = service.getTrackPointCreator(); trackPointCreator.setClock(startTime); Track.Id trackId = service.startNewTrack(); - trackPointCreator.setAltitudeSumManager(altitudeSumManager); + trackPointCreator.getSensorManager().setAltitudeSumManager(altitudeSumManager); // when String gps1 = "2020-02-02T02:02:03Z"; @@ -652,7 +655,7 @@ public class TrackRecordingServiceTestRecording { TrackPointCreator trackPointCreator = service.getTrackPointCreator(); trackPointCreator.setClock(startTime); Track.Id trackId = service.startNewTrack(); - trackPointCreator.setAltitudeSumManager(altitudeSumManager); + trackPointCreator.getSensorManager().setAltitudeSumManager(altitudeSumManager); // when String gps1 = "2020-02-02T02:02:03Z"; @@ -702,7 +705,7 @@ public class TrackRecordingServiceTestRecording { TrackPointCreator trackPointCreator = service.getTrackPointCreator(); trackPointCreator.setClock(startTime); Track.Id trackId = service.startNewTrack(); - trackPointCreator.setAltitudeSumManager(altitudeSumManager); + trackPointCreator.getSensorManager().setAltitudeSumManager(altitudeSumManager); // when String gps1 = "2020-02-02T02:02:03Z"; @@ -748,7 +751,7 @@ public class TrackRecordingServiceTestRecording { TrackPointCreator trackPointCreator = service.getTrackPointCreator(); trackPointCreator.setClock(startTime); Track.Id trackId = service.startNewTrack(); - trackPointCreator.setAltitudeSumManager(altitudeSumManager); + trackPointCreator.getSensorManager().setAltitudeSumManager(altitudeSumManager); // when String gps1 = "2020-02-02T02:02:03Z"; @@ -812,8 +815,8 @@ public class TrackRecordingServiceTestRecording { TrackPointCreator trackPointCreator = service.getTrackPointCreator(); trackPointCreator.setClock(startTime); Track.Id trackId = service.startNewTrack(); - trackPointCreator.setAltitudeSumManager(altitudeSumManager); - BluetoothRemoteSensorManager remoteSensorManager = trackPointCreator.getRemoteSensorManager(); + trackPointCreator.getSensorManager().setAltitudeSumManager(altitudeSumManager); + BluetoothRemoteSensorManager remoteSensorManager = trackPointCreator.getSensorManager().getBluetoothSensorManager(); // when String sensor1 = "2020-02-02T02:02:03Z"; diff --git a/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestUtils.java b/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestUtils.java index e03053f37..214f152db 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestUtils.java +++ b/src/androidTest/java/de/dennisguse/opentracks/services/TrackRecordingServiceTestUtils.java @@ -1,17 +1,12 @@ package de.dennisguse.opentracks.services; import android.content.Context; -import android.content.Intent; import android.location.Location; import androidx.test.rule.ServiceTestRule; -import org.mockito.Mockito; - -import java.time.Clock; import java.util.concurrent.TimeoutException; -import de.dennisguse.opentracks.sensors.BluetoothRemoteSensorManager; import de.dennisguse.opentracks.services.handlers.TrackPointCreator; import de.dennisguse.opentracks.settings.PreferencesUtils; @@ -24,15 +19,6 @@ public class TrackRecordingServiceTestUtils { public static void resetService(ServiceTestRule mServiceRule, Context context) throws TimeoutException { // Let's use default values. PreferencesUtils.clear(); - - // Reset service (if some previous test failed) - TrackRecordingService service = ((TrackRecordingService.Binder) mServiceRule.bindService(new Intent(context, TrackRecordingService.class))) - .getService(); - - BluetoothRemoteSensorManager remoteSensorManager = Mockito.mock(BluetoothRemoteSensorManager.class); - service.getTrackPointCreator().setRemoteSensorManager(remoteSensorManager); - service.getTrackPointCreator().setClock(Clock.systemUTC()); - service.endCurrentTrack(); } static void sendGPSLocation(TrackPointCreator trackPointCreator, String time, double latitude, double longitude, float accuracy, long speed) { diff --git a/src/androidTest/java/de/dennisguse/opentracks/services/handlers/GPSHandlerTest.java b/src/androidTest/java/de/dennisguse/opentracks/services/handlers/GPSManagerTest.java similarity index 96% rename from src/androidTest/java/de/dennisguse/opentracks/services/handlers/GPSHandlerTest.java rename to src/androidTest/java/de/dennisguse/opentracks/services/handlers/GPSManagerTest.java index fe4ea49b0..2021c424d 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/services/handlers/GPSHandlerTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/services/handlers/GPSManagerTest.java @@ -26,7 +26,7 @@ import de.dennisguse.opentracks.data.models.Distance; import de.dennisguse.opentracks.settings.PreferencesUtils; @RunWith(MockitoJUnitRunner.class) -public class GPSHandlerTest { +public class GPSManagerTest { private final Context context = ApplicationProvider.getApplicationContext(); @@ -34,7 +34,7 @@ public class GPSHandlerTest { private TrackPointCreator trackPointCreator; @InjectMocks - private GPSHandler locationHandler; + private GPSManager locationHandler; @BeforeClass public static void preSetUp() { @@ -50,7 +50,7 @@ public class GPSHandlerTest { Mockito.when(trackPointCreator.createNow()) .thenReturn(Instant.now()); - locationHandler.onStart(context, new Handler()); + locationHandler.start(context, new Handler()); } /** 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 e10fb963e..0b6519fe5 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/services/handlers/TrackPointCreatorTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/services/handlers/TrackPointCreatorTest.java @@ -25,7 +25,7 @@ public class TrackPointCreatorTest { private TrackPointCreator.Callback server; @Mock - private GPSHandler locationHandler; + private GPSManager locationHandler; private TrackPointCreator subject; diff --git a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothConnectionManager.java b/src/main/java/de/dennisguse/opentracks/sensors/AbstractBluetoothConnectionManager.java similarity index 95% rename from src/main/java/de/dennisguse/opentracks/sensors/BluetoothConnectionManager.java rename to src/main/java/de/dennisguse/opentracks/sensors/AbstractBluetoothConnectionManager.java index 4fd4fa595..366469931 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothConnectionManager.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/AbstractBluetoothConnectionManager.java @@ -40,9 +40,9 @@ import de.dennisguse.opentracks.sensors.sensorData.SensorData; * Manages connection to a Bluetooth LE sensor and subscribes for onChange-notifications. * Also parses the transferred data into {@link SensorDataObserver}. */ -public abstract class BluetoothConnectionManager { +public abstract class AbstractBluetoothConnectionManager { - private static final String TAG = BluetoothConnectionManager.class.getSimpleName(); + private static final String TAG = AbstractBluetoothConnectionManager.class.getSimpleName(); private final SensorDataObserver observer; @@ -136,12 +136,12 @@ public abstract class BluetoothConnectionManager { } }; - BluetoothConnectionManager(ServiceMeasurementUUID serviceUUUID, SensorDataObserver observer) { + AbstractBluetoothConnectionManager(ServiceMeasurementUUID serviceUUUID, SensorDataObserver observer) { this.serviceMeasurementUUIDs = List.of(serviceUUUID); this.observer = observer; } - BluetoothConnectionManager(List serviceUUUID, SensorDataObserver observer) { + AbstractBluetoothConnectionManager(List serviceUUUID, SensorDataObserver observer) { this.serviceMeasurementUUIDs = serviceUUUID; this.observer = observer; } diff --git a/src/main/java/de/dennisguse/opentracks/sensors/AltitudeSumManager.java b/src/main/java/de/dennisguse/opentracks/sensors/AltitudeSumManager.java index 437945399..fbd7837aa 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/AltitudeSumManager.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/AltitudeSumManager.java @@ -19,7 +19,7 @@ import de.dennisguse.opentracks.data.models.TrackPoint; /** * Estimates the altitude gain and altitude loss using the device's pressure sensor (i.e., barometer). */ -public class AltitudeSumManager implements SensorEventListener { +public class AltitudeSumManager implements SensorConnector, SensorEventListener { private static final String TAG = AltitudeSumManager.class.getSimpleName(); diff --git a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManagerCyclingCadence.java b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothConnectionManagerCyclingCadence.java similarity index 85% rename from src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManagerCyclingCadence.java rename to src/main/java/de/dennisguse/opentracks/sensors/BluetoothConnectionManagerCyclingCadence.java index b6a2cb9af..98dd68ba7 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManagerCyclingCadence.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothConnectionManagerCyclingCadence.java @@ -8,11 +8,11 @@ import de.dennisguse.opentracks.sensors.sensorData.SensorDataCyclingCadence; import de.dennisguse.opentracks.sensors.sensorData.SensorDataCyclingCadenceAndDistanceSpeed; import de.dennisguse.opentracks.sensors.sensorData.SensorDataCyclingPower; -public class BluetoothRemoteSensorManagerCyclingCadence extends BluetoothConnectionManager { +public class BluetoothConnectionManagerCyclingCadence extends AbstractBluetoothConnectionManager { - private static final String TAG = BluetoothRemoteSensorManagerCyclingCadence.class.getSimpleName(); + private static final String TAG = BluetoothConnectionManagerCyclingCadence.class.getSimpleName(); - BluetoothRemoteSensorManagerCyclingCadence(SensorDataObserver observer) { + BluetoothConnectionManagerCyclingCadence(SensorDataObserver observer) { super(BluetoothUtils.CYCLING_CADENCE, observer); } diff --git a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManagerCyclingDistanceSpeed.java b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothConnectionManagerCyclingDistanceSpeed.java similarity index 82% rename from src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManagerCyclingDistanceSpeed.java rename to src/main/java/de/dennisguse/opentracks/sensors/BluetoothConnectionManagerCyclingDistanceSpeed.java index e6bfba003..538183ea6 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManagerCyclingDistanceSpeed.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothConnectionManagerCyclingDistanceSpeed.java @@ -5,9 +5,9 @@ import android.bluetooth.BluetoothGattCharacteristic; import de.dennisguse.opentracks.sensors.sensorData.SensorDataCyclingCadenceAndDistanceSpeed; import de.dennisguse.opentracks.sensors.sensorData.SensorDataCyclingDistanceSpeed; -public class BluetoothRemoteSensorManagerCyclingDistanceSpeed extends BluetoothConnectionManager { +public class BluetoothConnectionManagerCyclingDistanceSpeed extends AbstractBluetoothConnectionManager { - BluetoothRemoteSensorManagerCyclingDistanceSpeed(SensorDataObserver observer) { + BluetoothConnectionManagerCyclingDistanceSpeed(SensorDataObserver observer) { super(BluetoothUtils.CYCLING_SPEED_CADENCE, observer); } diff --git a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManagerCyclingPower.java b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothConnectionManagerCyclingPower.java similarity index 82% rename from src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManagerCyclingPower.java rename to src/main/java/de/dennisguse/opentracks/sensors/BluetoothConnectionManagerCyclingPower.java index f94b8bf76..7803ed416 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManagerCyclingPower.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothConnectionManagerCyclingPower.java @@ -7,9 +7,9 @@ import androidx.annotation.NonNull; import de.dennisguse.opentracks.data.models.Power; import de.dennisguse.opentracks.sensors.sensorData.SensorDataCyclingPower; -public class BluetoothRemoteSensorManagerCyclingPower extends BluetoothConnectionManager { +public class BluetoothConnectionManagerCyclingPower extends AbstractBluetoothConnectionManager { - BluetoothRemoteSensorManagerCyclingPower(@NonNull SensorDataObserver observer) { + BluetoothConnectionManagerCyclingPower(@NonNull SensorDataObserver observer) { super(BluetoothUtils.CYCLING_POWER, observer); } diff --git a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManagerHeartRate.java b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothConnectionManagerHeartRate.java similarity index 82% rename from src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManagerHeartRate.java rename to src/main/java/de/dennisguse/opentracks/sensors/BluetoothConnectionManagerHeartRate.java index fa831edcf..b8271920b 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManagerHeartRate.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothConnectionManagerHeartRate.java @@ -7,9 +7,9 @@ import androidx.annotation.NonNull; import de.dennisguse.opentracks.data.models.HeartRate; import de.dennisguse.opentracks.sensors.sensorData.SensorDataHeartRate; -public class BluetoothRemoteSensorManagerHeartRate extends BluetoothConnectionManager { +public class BluetoothConnectionManagerHeartRate extends AbstractBluetoothConnectionManager { - BluetoothRemoteSensorManagerHeartRate(@NonNull SensorDataObserver observer) { + BluetoothConnectionManagerHeartRate(@NonNull SensorDataObserver observer) { super(BluetoothUtils.HEARTRATE, observer); } diff --git a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManagerRunningSpeedAndCadence.java b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothConnectionRunningSpeedAndCadence.java similarity index 76% rename from src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManagerRunningSpeedAndCadence.java rename to src/main/java/de/dennisguse/opentracks/sensors/BluetoothConnectionRunningSpeedAndCadence.java index 73b11b38c..42c952628 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManagerRunningSpeedAndCadence.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothConnectionRunningSpeedAndCadence.java @@ -6,9 +6,9 @@ import androidx.annotation.NonNull; import de.dennisguse.opentracks.sensors.sensorData.SensorDataRunning; -public class BluetoothRemoteSensorManagerRunningSpeedAndCadence extends BluetoothConnectionManager { +public class BluetoothConnectionRunningSpeedAndCadence extends AbstractBluetoothConnectionManager { - BluetoothRemoteSensorManagerRunningSpeedAndCadence(@NonNull SensorDataObserver observer) { + BluetoothConnectionRunningSpeedAndCadence(@NonNull SensorDataObserver observer) { super(BluetoothUtils.RUNNING_SPEED_CADENCE, observer); } diff --git a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManager.java b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManager.java index 74192d028..2711aa1bf 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManager.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManager.java @@ -52,7 +52,7 @@ import de.dennisguse.opentracks.util.PermissionRequester; * * @author Sandor Dornbush */ -public class BluetoothRemoteSensorManager implements BluetoothConnectionManager.SensorDataObserver { +public class BluetoothRemoteSensorManager implements SensorConnector, AbstractBluetoothConnectionManager.SensorDataObserver { private static final String TAG = BluetoothRemoteSensorManager.class.getSimpleName(); @@ -65,15 +65,15 @@ public class BluetoothRemoteSensorManager implements BluetoothConnectionManager. private Distance preferenceWheelCircumference; - private final BluetoothRemoteSensorManagerHeartRate heartRate = new BluetoothRemoteSensorManagerHeartRate(this); - private final BluetoothRemoteSensorManagerCyclingCadence cyclingCadence = new BluetoothRemoteSensorManagerCyclingCadence(this); - private final BluetoothRemoteSensorManagerCyclingDistanceSpeed cyclingSpeed = new BluetoothRemoteSensorManagerCyclingDistanceSpeed(this); - private final BluetoothRemoteSensorManagerCyclingPower cyclingPower = new BluetoothRemoteSensorManagerCyclingPower(this); - private final BluetoothRemoteSensorManagerRunningSpeedAndCadence runningSpeedAndCadence = new BluetoothRemoteSensorManagerRunningSpeedAndCadence(this); + private final BluetoothConnectionManagerHeartRate heartRate = new BluetoothConnectionManagerHeartRate(this); + private final BluetoothConnectionManagerCyclingCadence cyclingCadence = new BluetoothConnectionManagerCyclingCadence(this); + private final BluetoothConnectionManagerCyclingDistanceSpeed cyclingSpeed = new BluetoothConnectionManagerCyclingDistanceSpeed(this); + private final BluetoothConnectionManagerCyclingPower cyclingPower = new BluetoothConnectionManagerCyclingPower(this); + private final BluetoothConnectionRunningSpeedAndCadence runningSpeedAndCadence = new BluetoothConnectionRunningSpeedAndCadence(this); private final SensorDataSet sensorDataSet = new SensorDataSet(); - private final SensorDataSetChangeObserver observer; + private final SensorManager.SensorDataSetChangeObserver observer; private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() { @Override @@ -114,21 +114,23 @@ public class BluetoothRemoteSensorManager implements BluetoothConnectionManager. } }; - public BluetoothRemoteSensorManager(@NonNull Context context, @NonNull Handler handler, @NonNull SensorDataSetChangeObserver observer) { + public BluetoothRemoteSensorManager(@NonNull Context context, @NonNull Handler handler, @NonNull SensorManager.SensorDataSetChangeObserver observer) { this.context = context; this.handler = handler; this.observer = observer; bluetoothAdapter = BluetoothUtils.getAdapter(context); } - public void start() { + @Override + public void start(Context context, Handler handler) { started = true; //Registering triggers connection startup PreferencesUtils.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener); } - public synchronized void stop() { + @Override + public synchronized void stop(Context context) { heartRate.disconnect(); cyclingCadence.disconnect(); cyclingSpeed.disconnect(); @@ -145,7 +147,7 @@ public class BluetoothRemoteSensorManager implements BluetoothConnectionManager. return bluetoothAdapter != null && bluetoothAdapter.isEnabled(); } - private synchronized void connect(BluetoothConnectionManager connectionManager, String address) { + private synchronized void connect(AbstractBluetoothConnectionManager connectionManager, String address) { if (!isEnabled()) { Log.w(TAG, "Bluetooth not enabled."); return; @@ -230,8 +232,4 @@ public class BluetoothRemoteSensorManager implements BluetoothConnectionManager. public Handler getHandler() { return handler; } - - public interface SensorDataSetChangeObserver { - void onChange(SensorDataSet sensorDataSet); - } } diff --git a/src/main/java/de/dennisguse/opentracks/sensors/SensorConnector.java b/src/main/java/de/dennisguse/opentracks/sensors/SensorConnector.java new file mode 100644 index 000000000..cea9f44ee --- /dev/null +++ b/src/main/java/de/dennisguse/opentracks/sensors/SensorConnector.java @@ -0,0 +1,11 @@ +package de.dennisguse.opentracks.sensors; + +import android.content.Context; +import android.os.Handler; + +public interface SensorConnector { + + void start(Context context, Handler handler); + + void stop(Context context); +} diff --git a/src/main/java/de/dennisguse/opentracks/sensors/SensorManager.java b/src/main/java/de/dennisguse/opentracks/sensors/SensorManager.java new file mode 100644 index 000000000..bf8e82d08 --- /dev/null +++ b/src/main/java/de/dennisguse/opentracks/sensors/SensorManager.java @@ -0,0 +1,85 @@ +package de.dennisguse.opentracks.sensors; + +import android.content.Context; +import android.os.Handler; +import android.util.Log; + +import androidx.annotation.VisibleForTesting; + +import de.dennisguse.opentracks.data.models.TrackPoint; +import de.dennisguse.opentracks.sensors.sensorData.SensorData; +import de.dennisguse.opentracks.sensors.sensorData.SensorDataSet; + +public class SensorManager { + + private static final String TAG = SensorManager.class.getSimpleName(); + + private BluetoothRemoteSensorManager bluetoothSensorManager; + + private AltitudeSumManager altitudeSumManager; + + public SensorManager(Context context, Handler handler, SensorDataSetChangeObserver observer) { + bluetoothSensorManager = new BluetoothRemoteSensorManager(context, handler, observer); + altitudeSumManager = new AltitudeSumManager(); + } + + public void start(Context context, Handler handler) { + bluetoothSensorManager.start(context, handler); + altitudeSumManager.start(context, handler); + } + + public void stop(Context context) { + if (bluetoothSensorManager != null) { + bluetoothSensorManager.stop(context); + bluetoothSensorManager = null; + } + + if (altitudeSumManager != null) { + altitudeSumManager.stop(context); + altitudeSumManager = null; + } + } + + public SensorDataSet fill(TrackPoint trackPoint) { + altitudeSumManager.fill(trackPoint); + return bluetoothSensorManager.fill(trackPoint); + } + + public void reset() { + if (bluetoothSensorManager == null || altitudeSumManager == null) { + Log.d(TAG, "No recording running and no reset necessary."); + return; + } + bluetoothSensorManager.reset(); + altitudeSumManager.reset(); + } + + @Deprecated + @VisibleForTesting + public BluetoothRemoteSensorManager getBluetoothSensorManager() { + return bluetoothSensorManager; + } + + @Deprecated + @VisibleForTesting + public void setBluetoothSensorManager(BluetoothRemoteSensorManager remoteSensorManager) { + this.bluetoothSensorManager = remoteSensorManager; + } + + @Deprecated + @VisibleForTesting + public AltitudeSumManager getAltitudeSumManager() { + return altitudeSumManager; + } + + @Deprecated + @VisibleForTesting + public void setAltitudeSumManager(AltitudeSumManager altitudeSumManager) { + this.altitudeSumManager = altitudeSumManager; + } + + @Deprecated + public interface SensorDataSetChangeObserver { + void onChange(SensorDataSet sensorDataSet); + } +} diff --git a/src/main/java/de/dennisguse/opentracks/sensors/sensorData/SensorData.java b/src/main/java/de/dennisguse/opentracks/sensors/sensorData/SensorData.java index ba39afcb6..365d6bc48 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/sensorData/SensorData.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/sensorData/SensorData.java @@ -1,7 +1,6 @@ package de.dennisguse.opentracks.sensors.sensorData; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import java.time.Instant; @@ -32,16 +31,6 @@ public abstract class SensorData { this.time = time; } - @NonNull - public String getSensorAddress() { - return sensorAddress; - } - - @Nullable - public String getSensorName() { - return sensorName; - } - public String getSensorNameOrAddress() { return sensorName != null ? sensorName : sensorAddress; } diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java index f0ee43184..1cef8f6ab 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java @@ -111,7 +111,7 @@ public class TrackRecordingService extends Service implements TrackPointCreator. egm2008CorrectionManager = new EGM2008CorrectionManager(); trackRecordingManager = new TrackRecordingManager(this); trackRecordingManager.start(); - trackPointCreator = new TrackPointCreator(this); + trackPointCreator = new TrackPointCreator(this, this, handler); voiceAnnouncementManager = new VoiceAnnouncementManager(this); notificationManager = new TrackRecordingServiceNotificationManager(this); @@ -177,7 +177,6 @@ public class TrackRecordingService extends Service implements TrackPointCreator. } public void resumeTrack(Track.Id trackId) { - trackPointCreator.reset(); if (!trackRecordingManager.resumeExistingTrack(trackId, trackPointCreator)) { Log.w(TAG, "Cannot resume a non-existing track."); return; diff --git a/src/main/java/de/dennisguse/opentracks/services/handlers/GPSHandler.java b/src/main/java/de/dennisguse/opentracks/services/handlers/GPSManager.java similarity index 93% rename from src/main/java/de/dennisguse/opentracks/services/handlers/GPSHandler.java rename to src/main/java/de/dennisguse/opentracks/services/handlers/GPSManager.java index 4bfc9111a..2174b0a54 100644 --- a/src/main/java/de/dennisguse/opentracks/services/handlers/GPSHandler.java +++ b/src/main/java/de/dennisguse/opentracks/services/handlers/GPSManager.java @@ -20,14 +20,15 @@ import java.time.Instant; import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.data.models.Distance; import de.dennisguse.opentracks.data.models.TrackPoint; +import de.dennisguse.opentracks.sensors.SensorConnector; import de.dennisguse.opentracks.settings.PreferencesUtils; import de.dennisguse.opentracks.util.LocationUtils; import de.dennisguse.opentracks.util.PermissionRequester; @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE) -public class GPSHandler implements LocationListenerCompat, GpsStatus.GpsStatusListener, SharedPreferences.OnSharedPreferenceChangeListener { +public class GPSManager implements SensorConnector, LocationListenerCompat, GpsStatus.GpsStatusListener, SharedPreferences.OnSharedPreferenceChangeListener { - private final String TAG = GPSHandler.class.getSimpleName(); + private final String TAG = GPSManager.class.getSimpleName(); public static final String LOCATION_PROVIDER = LocationManager.GPS_PROVIDER; @@ -40,11 +41,11 @@ public class GPSHandler implements LocationListenerCompat, GpsStatus.GpsStatusLi private Duration gpsInterval; private Distance thresholdHorizontalAccuracy; - public GPSHandler(TrackPointCreator trackPointCreator) { + public GPSManager(TrackPointCreator trackPointCreator) { this.trackPointCreator = trackPointCreator; } - public void onStart(@NonNull Context context, @NonNull Handler handler) { + public void start(@NonNull Context context, @NonNull Handler handler) { this.context = context; this.handler = handler; @@ -61,7 +62,7 @@ public class GPSHandler implements LocationListenerCompat, GpsStatus.GpsStatusLi @SuppressWarnings({"MissingPermission"}) //TODO upgrade to AGP7.0.0/API31 started complaining about removeUpdates. - public void onStop() { + public void stop(Context context) { if (locationManager != null && context != null) { if (PermissionRequester.GPS.hasPermission(context)) { LocationManagerCompat.removeUpdates(locationManager, this); 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 0c9dc765b..744760401 100644 --- a/src/main/java/de/dennisguse/opentracks/services/handlers/TrackPointCreator.java +++ b/src/main/java/de/dennisguse/opentracks/services/handlers/TrackPointCreator.java @@ -16,14 +16,13 @@ import java.time.ZoneId; import de.dennisguse.opentracks.data.models.Distance; import de.dennisguse.opentracks.data.models.TrackPoint; -import de.dennisguse.opentracks.sensors.AltitudeSumManager; -import de.dennisguse.opentracks.sensors.BluetoothRemoteSensorManager; +import de.dennisguse.opentracks.sensors.SensorManager; import de.dennisguse.opentracks.sensors.sensorData.SensorDataSet; /** * Creates TrackPoints while recording by fusing data from different sensors (e.g., GNSS, barometer, BLE sensors). */ -public class TrackPointCreator implements BluetoothRemoteSensorManager.SensorDataSetChangeObserver { +public class TrackPointCreator implements SensorManager.SensorDataSetChangeObserver { private static final String TAG = TrackPointCreator.class.getSimpleName(); @@ -34,45 +33,34 @@ public class TrackPointCreator implements BluetoothRemoteSensorManager.SensorDat @NonNull private Clock clock = new MonotonicClock(); - private final GPSHandler gpsHandler; - private BluetoothRemoteSensorManager remoteSensorManager; - private AltitudeSumManager altitudeSumManager; + private final GPSManager gpsManager; + private SensorManager sensorManager; - public TrackPointCreator(Callback service) { + public TrackPointCreator(Callback service, Context context, Handler handler) { this.service = service; - this.gpsHandler = new GPSHandler(this); + this.gpsManager = new GPSManager(this); + this.sensorManager = new SensorManager(context, handler, this); } @VisibleForTesting - TrackPointCreator(GPSHandler gpsHandler, Callback service) { + TrackPointCreator(GPSManager gpsManager, Callback service) { this.service = service; - this.gpsHandler = gpsHandler; + this.gpsManager = gpsManager; } public synchronized void start(@NonNull Context context, @NonNull Handler handler) { this.context = context; - gpsHandler.onStart(context, handler); - - remoteSensorManager = new BluetoothRemoteSensorManager(context, handler, this); - altitudeSumManager = new AltitudeSumManager(); - - remoteSensorManager.start(); - altitudeSumManager.start(context, handler); - + gpsManager.start(context, handler); + sensorManager.start(context, handler); } private boolean isStarted() { return context != null; } - public synchronized void reset() { - if (remoteSensorManager == null || altitudeSumManager == null) { - Log.d(TAG, "No recording running and no reset necessary."); - return; - } - remoteSensorManager.reset(); - altitudeSumManager.reset(); + private synchronized void reset() { + sensorManager.reset(); } private SensorDataSet addSensorData(TrackPoint trackPoint) { @@ -80,31 +68,12 @@ public class TrackPointCreator implements BluetoothRemoteSensorManager.SensorDat Log.w(TAG, "Not started, should not be called."); return null; } - SensorDataSet sensorDataSet = null; - BluetoothRemoteSensorManager localRemoteSensorManager = remoteSensorManager; - if (localRemoteSensorManager != null) { - sensorDataSet = localRemoteSensorManager.fill(trackPoint); - } - AltitudeSumManager localAltitudeSumManager = altitudeSumManager; - if (localAltitudeSumManager != null) { - localAltitudeSumManager.fill(trackPoint); - } - return sensorDataSet; + return sensorManager.fill(trackPoint); } public synchronized void stop() { - gpsHandler.onStop(); - - if (remoteSensorManager != null) { - remoteSensorManager.stop(); - remoteSensorManager = null; - } - - if (altitudeSumManager != null) { - altitudeSumManager.stop(context); - altitudeSumManager = null; - } + gpsManager.stop(context); this.context = null; } @@ -125,7 +94,7 @@ public class TrackPointCreator implements BluetoothRemoteSensorManager.SensorDat public void onNewTrackPoint(@NonNull TrackPoint trackPoint) { addSensorData(trackPoint); - boolean stored = service.newTrackPoint(trackPoint, gpsHandler.getThresholdHorizontalAccuracy()); + boolean stored = service.newTrackPoint(trackPoint, gpsManager.getThresholdHorizontalAccuracy()); if (stored) { reset(); } @@ -169,26 +138,8 @@ public class TrackPointCreator implements BluetoothRemoteSensorManager.SensorDat } @VisibleForTesting - public AltitudeSumManager getAltitudeSumManager() { - return altitudeSumManager; - } - - @Deprecated - @VisibleForTesting - public void setAltitudeSumManager(AltitudeSumManager altitudeSumManager) { - this.altitudeSumManager = altitudeSumManager; - } - - @Deprecated - @VisibleForTesting - public BluetoothRemoteSensorManager getRemoteSensorManager() { - return remoteSensorManager; - } - - @Deprecated - @VisibleForTesting - public void setRemoteSensorManager(BluetoothRemoteSensorManager remoteSensorManager) { - this.remoteSensorManager = remoteSensorManager; + public SensorManager getSensorManager() { + return sensorManager; } @VisibleForTesting @@ -202,8 +153,8 @@ public class TrackPointCreator implements BluetoothRemoteSensorManager.SensorDat } @VisibleForTesting - public GPSHandler getGpsHandler() { - return gpsHandler; + public GPSManager getGpsHandler() { + return gpsManager; } void sendGpsStatus(GpsStatusValue gpsStatusValue) {