diff --git a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothConnectionManager.java b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothConnectionManager.java index de245d601..61ffd7fae 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothConnectionManager.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothConnectionManager.java @@ -30,14 +30,9 @@ import android.util.Log; import androidx.annotation.NonNull; -import de.dennisguse.opentracks.data.models.Cadence; import de.dennisguse.opentracks.data.models.HeartRate; -import de.dennisguse.opentracks.data.models.Power; import de.dennisguse.opentracks.sensors.sensorData.SensorData; -import de.dennisguse.opentracks.sensors.sensorData.SensorDataCycling; -import de.dennisguse.opentracks.sensors.sensorData.SensorDataCyclingPower; import de.dennisguse.opentracks.sensors.sensorData.SensorDataHeartRate; -import de.dennisguse.opentracks.sensors.sensorData.SensorDataRunning; /** * Manages connection to a Bluetooth LE sensor and subscribes for onChange-notifications. @@ -189,94 +184,6 @@ public abstract class BluetoothConnectionManager { } } - public static class CyclingCadence extends BluetoothConnectionManager { - - CyclingCadence(SensorDataObserver observer) { - super(BluetoothUtils.CYCLING_SPEED_CADENCE, observer); - } - - @Override - protected SensorDataCycling.CyclingCadence createEmptySensorData(String address) { - return new SensorDataCycling.CyclingCadence(address); - } - - @Override - protected SensorDataCycling.CyclingCadence parsePayload(String sensorName, String address, BluetoothGattCharacteristic characteristic) { - SensorDataCycling.CadenceAndSpeed cadenceAndSpeed = BluetoothUtils.parseCyclingCrankAndWheel(address, sensorName, characteristic); - if (cadenceAndSpeed == null) { - return null; - } - - if (cadenceAndSpeed.getCadence() != null) { - return cadenceAndSpeed.getCadence(); - } - - return null; - } - } - - public static class CyclingDistanceSpeed extends BluetoothConnectionManager { - - CyclingDistanceSpeed(SensorDataObserver observer) { - super(BluetoothUtils.CYCLING_SPEED_CADENCE, observer); - } - - @Override - protected SensorDataCycling.DistanceSpeed createEmptySensorData(String address) { - return new SensorDataCycling.DistanceSpeed(address); - } - - @Override - protected SensorDataCycling.DistanceSpeed parsePayload(String sensorName, String address, BluetoothGattCharacteristic characteristic) { - SensorDataCycling.CadenceAndSpeed cadenceAndSpeed = BluetoothUtils.parseCyclingCrankAndWheel(address, sensorName, characteristic); - if (cadenceAndSpeed == null) { - return null; - } - - if (cadenceAndSpeed.getDistanceSpeed() != null) { - return cadenceAndSpeed.getDistanceSpeed(); - } - - return null; - } - } - - public static class CyclingPower extends BluetoothConnectionManager { - - CyclingPower(@NonNull SensorDataObserver observer) { - super(BluetoothUtils.CYCLING_POWER, observer); - } - - @Override - protected SensorDataCyclingPower createEmptySensorData(String address) { - return new SensorDataCyclingPower(address); - } - - @Override - protected SensorDataCyclingPower parsePayload(String sensorName, String address, BluetoothGattCharacteristic characteristic) { - SensorDataCyclingPower.Data cyclingPower = BluetoothUtils.parseCyclingPower(characteristic); - - return cyclingPower != null ? new SensorDataCyclingPower(address, sensorName, cyclingPower.getPower()) : null; - } - } - - public static class RunningSpeedAndCadence extends BluetoothConnectionManager { - - RunningSpeedAndCadence(@NonNull SensorDataObserver observer) { - super(BluetoothUtils.RUNNING_SPEED_CADENCE, observer); - } - - @Override - protected SensorDataRunning createEmptySensorData(String address) { - return new SensorDataRunning(address); - } - - @Override - protected SensorDataRunning parsePayload(String sensorName, String address, BluetoothGattCharacteristic characteristic) { - return BluetoothUtils.parseRunningSpeedAndCadence(address, sensorName, characteristic); - } - } - interface SensorDataObserver { void onChanged(SensorData sensorData); diff --git a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManager.java b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManager.java index a5c5aa388..567d9d26b 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManager.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManager.java @@ -64,11 +64,11 @@ public class BluetoothRemoteSensorManager implements BluetoothConnectionManager. private Distance preferenceWheelCircumference; - private final BluetoothConnectionManager.HeartRateConnectionManager heartRate = new BluetoothConnectionManager.HeartRateConnectionManager(this); - private final BluetoothConnectionManager.CyclingCadence cyclingCadence = new BluetoothConnectionManager.CyclingCadence(this); - private final BluetoothConnectionManager.CyclingDistanceSpeed cyclingSpeed = new BluetoothConnectionManager.CyclingDistanceSpeed(this); - private final BluetoothConnectionManager.CyclingPower cyclingPower = new BluetoothConnectionManager.CyclingPower(this); - private final BluetoothConnectionManager.RunningSpeedAndCadence runningSpeedAndCadence = new BluetoothConnectionManager.RunningSpeedAndCadence(this); + 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 SensorDataSet sensorDataSet = new SensorDataSet(); diff --git a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManagerCyclingCadence.java b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManagerCyclingCadence.java new file mode 100644 index 000000000..d473cfca1 --- /dev/null +++ b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManagerCyclingCadence.java @@ -0,0 +1,32 @@ +package de.dennisguse.opentracks.sensors; + +import android.bluetooth.BluetoothGattCharacteristic; + +import de.dennisguse.opentracks.data.models.Cadence; +import de.dennisguse.opentracks.sensors.sensorData.SensorDataCycling; + +public class BluetoothRemoteSensorManagerCyclingCadence extends BluetoothConnectionManager { + + BluetoothRemoteSensorManagerCyclingCadence(SensorDataObserver observer) { + super(BluetoothUtils.CYCLING_SPEED_CADENCE, observer); + } + + @Override + protected SensorDataCycling.CyclingCadence createEmptySensorData(String address) { + return new SensorDataCycling.CyclingCadence(address); + } + + @Override + protected SensorDataCycling.CyclingCadence parsePayload(String sensorName, String address, BluetoothGattCharacteristic characteristic) { + SensorDataCycling.CadenceAndSpeed cadenceAndSpeed = BluetoothUtils.parseCyclingCrankAndWheel(address, sensorName, characteristic); + if (cadenceAndSpeed == null) { + return null; + } + + if (cadenceAndSpeed.getCadence() != null) { + return cadenceAndSpeed.getCadence(); + } + + return null; + } +} diff --git a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManagerCyclingDistanceSpeed.java b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManagerCyclingDistanceSpeed.java new file mode 100644 index 000000000..9c2c23601 --- /dev/null +++ b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManagerCyclingDistanceSpeed.java @@ -0,0 +1,31 @@ +package de.dennisguse.opentracks.sensors; + +import android.bluetooth.BluetoothGattCharacteristic; + +import de.dennisguse.opentracks.sensors.sensorData.SensorDataCycling; + +public class BluetoothRemoteSensorManagerCyclingDistanceSpeed extends BluetoothConnectionManager { + + BluetoothRemoteSensorManagerCyclingDistanceSpeed(SensorDataObserver observer) { + super(BluetoothUtils.CYCLING_SPEED_CADENCE, observer); + } + + @Override + protected SensorDataCycling.DistanceSpeed createEmptySensorData(String address) { + return new SensorDataCycling.DistanceSpeed(address); + } + + @Override + protected SensorDataCycling.DistanceSpeed parsePayload(String sensorName, String address, BluetoothGattCharacteristic characteristic) { + SensorDataCycling.CadenceAndSpeed cadenceAndSpeed = BluetoothUtils.parseCyclingCrankAndWheel(address, sensorName, characteristic); + if (cadenceAndSpeed == null) { + return null; + } + + if (cadenceAndSpeed.getDistanceSpeed() != null) { + return cadenceAndSpeed.getDistanceSpeed(); + } + + return null; + } +} diff --git a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManagerCyclingPower.java b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManagerCyclingPower.java new file mode 100644 index 000000000..6efda9ade --- /dev/null +++ b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManagerCyclingPower.java @@ -0,0 +1,27 @@ +package de.dennisguse.opentracks.sensors; + +import android.bluetooth.BluetoothGattCharacteristic; + +import androidx.annotation.NonNull; + +import de.dennisguse.opentracks.data.models.Power; +import de.dennisguse.opentracks.sensors.sensorData.SensorDataCyclingPower; + +public class BluetoothRemoteSensorManagerCyclingPower extends BluetoothConnectionManager { + + BluetoothRemoteSensorManagerCyclingPower(@NonNull SensorDataObserver observer) { + super(BluetoothUtils.CYCLING_POWER, observer); + } + + @Override + protected SensorDataCyclingPower createEmptySensorData(String address) { + return new SensorDataCyclingPower(address); + } + + @Override + protected SensorDataCyclingPower parsePayload(String sensorName, String address, BluetoothGattCharacteristic characteristic) { + SensorDataCyclingPower.Data cyclingPower = BluetoothUtils.parseCyclingPower(characteristic); + + return cyclingPower != null ? new SensorDataCyclingPower(address, sensorName, cyclingPower.getPower()) : null; + } +} diff --git a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManagerHeartRate.java b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManagerHeartRate.java new file mode 100644 index 000000000..2aef346d9 --- /dev/null +++ b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManagerHeartRate.java @@ -0,0 +1,27 @@ +package de.dennisguse.opentracks.sensors; + +import android.bluetooth.BluetoothGattCharacteristic; + +import androidx.annotation.NonNull; + +import de.dennisguse.opentracks.data.models.HeartRate; +import de.dennisguse.opentracks.sensors.sensorData.SensorDataHeartRate; + +public class BluetoothRemoteSensorManagerHeartRate extends BluetoothConnectionManager { + + BluetoothRemoteSensorManagerHeartRate(@NonNull SensorDataObserver observer) { + super(BluetoothUtils.HEARTRATE, observer); + } + + @Override + protected SensorDataHeartRate createEmptySensorData(String address) { + return new SensorDataHeartRate(address); + } + + @Override + protected SensorDataHeartRate parsePayload(String sensorName, String address, BluetoothGattCharacteristic characteristic) { + Integer heartRate = BluetoothUtils.parseHeartRate(characteristic); + + return heartRate != null ? new SensorDataHeartRate(address, sensorName, HeartRate.of(heartRate)) : null; + } +} diff --git a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManagerRunningSpeedAndCadence.java b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManagerRunningSpeedAndCadence.java new file mode 100644 index 000000000..20d5e063d --- /dev/null +++ b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothRemoteSensorManagerRunningSpeedAndCadence.java @@ -0,0 +1,24 @@ +package de.dennisguse.opentracks.sensors; + +import android.bluetooth.BluetoothGattCharacteristic; + +import androidx.annotation.NonNull; + +import de.dennisguse.opentracks.sensors.sensorData.SensorDataRunning; + +public class BluetoothRemoteSensorManagerRunningSpeedAndCadence extends BluetoothConnectionManager { + + BluetoothRemoteSensorManagerRunningSpeedAndCadence(@NonNull SensorDataObserver observer) { + super(BluetoothUtils.RUNNING_SPEED_CADENCE, observer); + } + + @Override + protected SensorDataRunning createEmptySensorData(String address) { + return new SensorDataRunning(address); + } + + @Override + protected SensorDataRunning parsePayload(String sensorName, String address, BluetoothGattCharacteristic characteristic) { + return BluetoothUtils.parseRunningSpeedAndCadence(address, sensorName, characteristic); + } +}