forked from upstream-mirrors/OpenTracks
Cleanup: GainManager now processes AggregatorBarometer directly (instead of SensorManager).
This commit is contained in:
+2
-3
@@ -723,10 +723,9 @@ public class ExportImportTest {
|
|||||||
|
|
||||||
private void mockAltitudeChange(TrackPointCreator trackPointCreator, Float altitudeGain) {
|
private void mockAltitudeChange(TrackPointCreator trackPointCreator, Float altitudeGain) {
|
||||||
SensorManager sensorManager = trackPointCreator.getSensorManager();
|
SensorManager sensorManager = trackPointCreator.getSensorManager();
|
||||||
sensorManager.reset();
|
|
||||||
|
|
||||||
if (altitudeGain == null) {
|
if (altitudeGain == null) {
|
||||||
sensorManager.add(new AggregatorBarometer("test", null));
|
sensorManager.getAltitudeSumManager().setAggregatorBarometer(new AggregatorBarometer("test", null));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -742,7 +741,7 @@ public class ExportImportTest {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
sensorManager.add(aggregatorBarometer);
|
sensorManager.getAltitudeSumManager().setAggregatorBarometer(aggregatorBarometer);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendLocation(TrackPointCreator trackPointCreator, String time, double latitude, double longitude, float accuracy, float verticalAccuracy, float speed, double altitude, Float altitudeGain) {
|
private void sendLocation(TrackPointCreator trackPointCreator, String time, double latitude, double longitude, float accuracy, float verticalAccuracy, float speed, double altitude, Float altitudeGain) {
|
||||||
|
|||||||
+2
-3
@@ -810,7 +810,6 @@ public class TrackRecordingServiceRecordingTest {
|
|||||||
|
|
||||||
SensorManager sensorManager = trackPointCreator.getSensorManager();
|
SensorManager sensorManager = trackPointCreator.getSensorManager();
|
||||||
sensorManager.add(new AggregatorRunning("", ""));
|
sensorManager.add(new AggregatorRunning("", ""));
|
||||||
sensorManager.barometer = null;
|
|
||||||
|
|
||||||
// when
|
// when
|
||||||
String sensor1 = "2020-02-02T02:02:03Z";
|
String sensor1 = "2020-02-02T02:02:03Z";
|
||||||
@@ -965,7 +964,7 @@ public class TrackRecordingServiceRecordingTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void mockAltitudeChange(TrackPointCreator trackPointCreator, float altitudeGain) {
|
private void mockAltitudeChange(TrackPointCreator trackPointCreator, float altitudeGain) {
|
||||||
trackPointCreator.getSensorManager().barometer = new AggregatorBarometer("", "") {
|
trackPointCreator.getSensorManager().getAltitudeSumManager().setAggregatorBarometer(new AggregatorBarometer("", "") {
|
||||||
@Override
|
@Override
|
||||||
public boolean hasReceivedData() {
|
public boolean hasReceivedData() {
|
||||||
return true;
|
return true;
|
||||||
@@ -976,7 +975,7 @@ public class TrackRecordingServiceRecordingTest {
|
|||||||
public AltitudeGainLoss getAggregatedValue(Instant now) {
|
public AltitudeGainLoss getAggregatedValue(Instant now) {
|
||||||
return new AltitudeGainLoss(altitudeGain, altitudeGain);
|
return new AltitudeGainLoss(altitudeGain, altitudeGain);
|
||||||
}
|
}
|
||||||
};
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void sendGPSLocation(TrackPointCreator trackPointCreator, String time, double latitude, double longitude, float accuracy, long speed) {
|
private static void sendGPSLocation(TrackPointCreator trackPointCreator, String time, double latitude, double longitude, float accuracy, long speed) {
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ import java.util.Optional;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import de.dennisguse.opentracks.sensors.driver.Driver;
|
import de.dennisguse.opentracks.sensors.driver.Driver;
|
||||||
|
import de.dennisguse.opentracks.sensors.driver.DriverObserver0;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface;
|
import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -45,7 +46,7 @@ public class BluetoothConnectionManager implements Driver {
|
|||||||
|
|
||||||
private static final String TAG = BluetoothConnectionManager.class.getSimpleName();
|
private static final String TAG = BluetoothConnectionManager.class.getSimpleName();
|
||||||
|
|
||||||
private final SensorManager observer;
|
private final DriverObserver0 observer;
|
||||||
|
|
||||||
private final SensorHandlerInterface sensorHandler;
|
private final SensorHandlerInterface sensorHandler;
|
||||||
|
|
||||||
@@ -131,7 +132,7 @@ public class BluetoothConnectionManager implements Driver {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
BluetoothConnectionManager(BluetoothAdapter bluetoothAdapter, SensorManager observer, SensorHandlerInterface sensorHandler) {
|
BluetoothConnectionManager(BluetoothAdapter bluetoothAdapter, DriverObserver0 observer, SensorHandlerInterface sensorHandler) {
|
||||||
this.bluetoothAdapter = bluetoothAdapter;
|
this.bluetoothAdapter = bluetoothAdapter;
|
||||||
this.observer = observer;
|
this.observer = observer;
|
||||||
this.sensorHandler = sensorHandler;
|
this.sensorHandler = sensorHandler;
|
||||||
|
|||||||
+2
-1
@@ -6,6 +6,7 @@ import java.util.List;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import de.dennisguse.opentracks.data.models.AtmosphericPressure;
|
import de.dennisguse.opentracks.data.models.AtmosphericPressure;
|
||||||
|
import de.dennisguse.opentracks.sensors.driver.DriverObserver0;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.Aggregator;
|
import de.dennisguse.opentracks.sensors.sensorData.Aggregator;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.AggregatorBarometer;
|
import de.dennisguse.opentracks.sensors.sensorData.AggregatorBarometer;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface;
|
import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface;
|
||||||
@@ -28,7 +29,7 @@ public class BluetoothHandlerBarometricPressure implements SensorHandlerInterfac
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handlePayload(SensorManager observer, ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic) {
|
public void handlePayload(DriverObserver0 observer, ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic) {
|
||||||
AtmosphericPressure value = parseEnvironmentalSensing(characteristic);
|
AtmosphericPressure value = parseEnvironmentalSensing(characteristic);
|
||||||
if (value == null) return;
|
if (value == null) return;
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import android.util.Pair;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import de.dennisguse.opentracks.sensors.driver.DriverObserver0;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.AggregatorCyclingCadence;
|
import de.dennisguse.opentracks.sensors.sensorData.AggregatorCyclingCadence;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface;
|
import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface;
|
||||||
|
|
||||||
@@ -28,7 +29,7 @@ public class BluetoothHandlerCyclingCadence implements SensorHandlerInterface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handlePayload(SensorManager observer, ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic) {
|
public void handlePayload(DriverObserver0 observer, ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic) {
|
||||||
if (serviceMeasurementUUID.equals(BluetoothHandlerCyclingPower.CYCLING_POWER)) {
|
if (serviceMeasurementUUID.equals(BluetoothHandlerCyclingPower.CYCLING_POWER)) {
|
||||||
BluetoothHandlerCyclingPower.Data data = BluetoothHandlerCyclingPower.parseCyclingPower(characteristic);
|
BluetoothHandlerCyclingPower.Data data = BluetoothHandlerCyclingPower.parseCyclingPower(characteristic);
|
||||||
if (data != null && data.crank() != null) {
|
if (data != null && data.crank() != null) {
|
||||||
|
|||||||
+2
-1
@@ -9,6 +9,7 @@ import androidx.annotation.VisibleForTesting;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import de.dennisguse.opentracks.sensors.driver.DriverObserver0;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.AggregatorCyclingDistanceSpeed;
|
import de.dennisguse.opentracks.sensors.sensorData.AggregatorCyclingDistanceSpeed;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface;
|
import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface;
|
||||||
|
|
||||||
@@ -30,7 +31,7 @@ public class BluetoothHandlerCyclingDistanceSpeed implements SensorHandlerInterf
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handlePayload(SensorManager observer, ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic) {
|
public void handlePayload(DriverObserver0 observer, ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic) {
|
||||||
Pair<WheelData, BluetoothHandlerCyclingCadence.CrankData> data = parseCyclingCrankAndWheel(address, sensorName, characteristic);
|
Pair<WheelData, BluetoothHandlerCyclingCadence.CrankData> data = parseCyclingCrankAndWheel(address, sensorName, characteristic);
|
||||||
if (data == null) return;
|
if (data == null) return;
|
||||||
if (data.first == null) return;
|
if (data.first == null) return;
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import java.util.List;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import de.dennisguse.opentracks.data.models.Power;
|
import de.dennisguse.opentracks.data.models.Power;
|
||||||
|
import de.dennisguse.opentracks.sensors.driver.DriverObserver0;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.AggregatorCyclingPower;
|
import de.dennisguse.opentracks.sensors.sensorData.AggregatorCyclingPower;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface;
|
import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface;
|
||||||
|
|
||||||
@@ -30,7 +31,7 @@ public class BluetoothHandlerCyclingPower implements SensorHandlerInterface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handlePayload(SensorManager observer, @NonNull ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic) {
|
public void handlePayload(DriverObserver0 observer, @NonNull ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic) {
|
||||||
Data cyclingPower = parseCyclingPower(characteristic);
|
Data cyclingPower = parseCyclingPower(characteristic);
|
||||||
|
|
||||||
if (cyclingPower == null) return;
|
if (cyclingPower == null) return;
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import java.util.List;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import de.dennisguse.opentracks.data.models.HeartRate;
|
import de.dennisguse.opentracks.data.models.HeartRate;
|
||||||
|
import de.dennisguse.opentracks.sensors.driver.DriverObserver0;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.AggregatorHeartRate;
|
import de.dennisguse.opentracks.sensors.sensorData.AggregatorHeartRate;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface;
|
import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface;
|
||||||
|
|
||||||
@@ -40,7 +41,7 @@ public class BluetoothHandlerHeartRate implements SensorHandlerInterface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handlePayload(SensorManager observer, @NonNull ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic) {
|
public void handlePayload(DriverObserver0 observer, @NonNull ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic) {
|
||||||
HeartRate heartRate = parseHeartRate(characteristic);
|
HeartRate heartRate = parseHeartRate(characteristic);
|
||||||
|
|
||||||
if (heartRate == null) return;
|
if (heartRate == null) return;
|
||||||
|
|||||||
+2
-1
@@ -11,6 +11,7 @@ import java.util.UUID;
|
|||||||
import de.dennisguse.opentracks.data.models.Cadence;
|
import de.dennisguse.opentracks.data.models.Cadence;
|
||||||
import de.dennisguse.opentracks.data.models.Distance;
|
import de.dennisguse.opentracks.data.models.Distance;
|
||||||
import de.dennisguse.opentracks.data.models.Speed;
|
import de.dennisguse.opentracks.data.models.Speed;
|
||||||
|
import de.dennisguse.opentracks.sensors.driver.DriverObserver0;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.AggregatorRunning;
|
import de.dennisguse.opentracks.sensors.sensorData.AggregatorRunning;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface;
|
import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface;
|
||||||
|
|
||||||
@@ -33,7 +34,7 @@ public class BluetoothHandlerRunningSpeedAndCadence implements SensorHandlerInte
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handlePayload(SensorManager observer, @NonNull ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic) {
|
public void handlePayload(DriverObserver0 observer, @NonNull ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic) {
|
||||||
Data data = parseRunningSpeedAndCadence(sensorName, characteristic);
|
Data data = parseRunningSpeedAndCadence(sensorName, characteristic);
|
||||||
if (data == null) return;
|
if (data == null) return;
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import java.util.List;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import de.dennisguse.opentracks.data.models.Temperature;
|
import de.dennisguse.opentracks.data.models.Temperature;
|
||||||
|
import de.dennisguse.opentracks.sensors.driver.DriverObserver0;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.Aggregator;
|
import de.dennisguse.opentracks.sensors.sensorData.Aggregator;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.AggregatorTemperature;
|
import de.dennisguse.opentracks.sensors.sensorData.AggregatorTemperature;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface;
|
import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface;
|
||||||
@@ -29,7 +30,7 @@ public class BluetoothHandlerTemperature implements SensorHandlerInterface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handlePayload(SensorManager observer, ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic) {
|
public void handlePayload(DriverObserver0 observer, ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic) {
|
||||||
Temperature value = parseEnvironmentalSensing(characteristic);
|
Temperature value = parseEnvironmentalSensing(characteristic);
|
||||||
if (value == null) return;
|
if (value == null) return;
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import androidx.annotation.NonNull;
|
|||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
import de.dennisguse.opentracks.R;
|
import de.dennisguse.opentracks.R;
|
||||||
|
import de.dennisguse.opentracks.sensors.driver.DriverObserver0;
|
||||||
import de.dennisguse.opentracks.settings.PreferencesUtils;
|
import de.dennisguse.opentracks.settings.PreferencesUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -34,6 +35,7 @@ import de.dennisguse.opentracks.settings.PreferencesUtils;
|
|||||||
* TODO: listen for Bluetooth enabled/disabled events.
|
* TODO: listen for Bluetooth enabled/disabled events.
|
||||||
* @author Sandor Dornbush
|
* @author Sandor Dornbush
|
||||||
*/
|
*/
|
||||||
|
//TODO Merge into SensorManager
|
||||||
public class BluetoothRemoteSensorManager implements SharedPreferences.OnSharedPreferenceChangeListener {
|
public class BluetoothRemoteSensorManager implements SharedPreferences.OnSharedPreferenceChangeListener {
|
||||||
|
|
||||||
private static final String TAG = BluetoothRemoteSensorManager.class.getSimpleName();
|
private static final String TAG = BluetoothRemoteSensorManager.class.getSimpleName();
|
||||||
@@ -49,7 +51,7 @@ public class BluetoothRemoteSensorManager implements SharedPreferences.OnSharedP
|
|||||||
private final BluetoothConnectionManager cyclingPower;
|
private final BluetoothConnectionManager cyclingPower;
|
||||||
private final BluetoothConnectionManager runningSpeedAndCadence;
|
private final BluetoothConnectionManager runningSpeedAndCadence;
|
||||||
|
|
||||||
public BluetoothRemoteSensorManager(@NonNull Context context, @NonNull Handler handler, @Nullable SensorManager observer) {
|
public BluetoothRemoteSensorManager(@NonNull Context context, @NonNull Handler handler, @Nullable DriverObserver0 observer) {
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.handler = handler;
|
this.handler = handler;
|
||||||
|
|
||||||
|
|||||||
@@ -5,20 +5,24 @@ import android.content.SharedPreferences;
|
|||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import de.dennisguse.opentracks.data.models.AtmosphericPressure;
|
||||||
import de.dennisguse.opentracks.sensors.driver.BarometerInternal;
|
import de.dennisguse.opentracks.sensors.driver.BarometerInternal;
|
||||||
import de.dennisguse.opentracks.sensors.driver.Driver;
|
import de.dennisguse.opentracks.sensors.driver.Driver;
|
||||||
|
import de.dennisguse.opentracks.sensors.driver.DriverObserver0;
|
||||||
|
import de.dennisguse.opentracks.sensors.sensorData.Aggregator;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.AggregatorBarometer;
|
import de.dennisguse.opentracks.sensors.sensorData.AggregatorBarometer;
|
||||||
import de.dennisguse.opentracks.settings.PreferencesUtils;
|
import de.dennisguse.opentracks.settings.PreferencesUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Estimates the altitude gain and altitude loss using the device's pressure sensor (i.e., barometer).
|
* Estimates the altitude gain and altitude loss using the device's pressure sensor (i.e., barometer).
|
||||||
*/
|
*/
|
||||||
public class GainManager {
|
//TODO Rename class
|
||||||
|
public class GainManager implements DriverObserver0 {
|
||||||
|
|
||||||
private static final String TAG = GainManager.class.getSimpleName();
|
private static final String TAG = GainManager.class.getSimpleName();
|
||||||
|
|
||||||
|
|
||||||
private final SensorManager listener;
|
private final SensorManager sensorManager;
|
||||||
|
|
||||||
private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = (sharedPreferences, key) -> connect();
|
private final SharedPreferences.OnSharedPreferenceChangeListener sharedPreferenceChangeListener = (sharedPreferences, key) -> connect();
|
||||||
|
|
||||||
@@ -26,8 +30,10 @@ public class GainManager {
|
|||||||
private Handler handler;
|
private Handler handler;
|
||||||
private Driver driver;
|
private Driver driver;
|
||||||
|
|
||||||
public GainManager(SensorManager listener) {
|
private AggregatorBarometer aggregatorBarometer;
|
||||||
this.listener = listener;
|
|
||||||
|
public GainManager(SensorManager sensorManager) {
|
||||||
|
this.sensorManager = sensorManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void start(Context context, Handler handler) {
|
public void start(Context context, Handler handler) {
|
||||||
@@ -42,24 +48,32 @@ public class GainManager {
|
|||||||
this.handler = null;
|
this.handler = null;
|
||||||
PreferencesUtils.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
|
PreferencesUtils.unregisterOnSharedPreferenceChangeListener(sharedPreferenceChangeListener);
|
||||||
|
|
||||||
onDisconnect();
|
disconnect();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
public AggregatorBarometer getAggregatorBarometer() {
|
||||||
|
return aggregatorBarometer;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
public void setAggregatorBarometer(AggregatorBarometer aggregatorBarometer) {
|
||||||
|
this.aggregatorBarometer = aggregatorBarometer;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void connect() {
|
private void connect() {
|
||||||
onDisconnect();
|
disconnect();
|
||||||
|
|
||||||
String address = PreferencesUtils.getBarometerSensorAddress();
|
String address = PreferencesUtils.getBarometerSensorAddress();
|
||||||
switch (PreferencesUtils.getSensorType(address)) {
|
switch (PreferencesUtils.getSensorType(address)) {
|
||||||
case NONE -> {
|
case NONE -> {
|
||||||
driver = null;
|
|
||||||
listener.onRemove(new AggregatorBarometer(null, null));
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
case INTERNAL -> driver = new BarometerInternal(listener);
|
case INTERNAL -> driver = new BarometerInternal(this);
|
||||||
case REMOTE -> driver =
|
case REMOTE -> driver =
|
||||||
new BluetoothConnectionManager(
|
new BluetoothConnectionManager(
|
||||||
BluetoothUtils.getAdapter(context),
|
BluetoothUtils.getAdapter(context),
|
||||||
listener,
|
this,
|
||||||
new BluetoothHandlerBarometricPressure()
|
new BluetoothHandlerBarometricPressure()
|
||||||
);
|
);
|
||||||
default -> throw new RuntimeException("Not implemented");
|
default -> throw new RuntimeException("Not implemented");
|
||||||
@@ -68,10 +82,31 @@ public class GainManager {
|
|||||||
driver.connect(context, handler, address);
|
driver.connect(context, handler, address);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onDisconnect() {
|
private void disconnect() {
|
||||||
if (driver == null) return;
|
if (driver == null) return;
|
||||||
|
|
||||||
driver.disconnect();
|
driver.disconnect();
|
||||||
listener.onDisconnect(new AggregatorBarometer("GainManager", null));
|
driver = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onRemove(Aggregator<?, ?> emptySensorData) {
|
||||||
|
this.aggregatorBarometer = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onConnect(Aggregator<?, ?> emptySensorData) {
|
||||||
|
//TODO Aggregator should be created here.
|
||||||
|
this.aggregatorBarometer = (AggregatorBarometer) emptySensorData;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDisconnect(Aggregator<?, ?> emptySensorData) {
|
||||||
|
this.aggregatorBarometer.resetAggregated();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onChange(Record first) {
|
||||||
|
this.aggregatorBarometer.add(sensorManager.getNow(), (AtmosphericPressure) first);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,13 +12,13 @@ import androidx.annotation.VisibleForTesting;
|
|||||||
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
|
|
||||||
import de.dennisguse.opentracks.data.models.AtmosphericPressure;
|
|
||||||
import de.dennisguse.opentracks.data.models.Cadence;
|
import de.dennisguse.opentracks.data.models.Cadence;
|
||||||
import de.dennisguse.opentracks.data.models.Distance;
|
import de.dennisguse.opentracks.data.models.Distance;
|
||||||
import de.dennisguse.opentracks.data.models.HeartRate;
|
import de.dennisguse.opentracks.data.models.HeartRate;
|
||||||
import de.dennisguse.opentracks.data.models.Position;
|
import de.dennisguse.opentracks.data.models.Position;
|
||||||
import de.dennisguse.opentracks.data.models.Speed;
|
import de.dennisguse.opentracks.data.models.Speed;
|
||||||
import de.dennisguse.opentracks.data.models.Temperature;
|
import de.dennisguse.opentracks.data.models.Temperature;
|
||||||
|
import de.dennisguse.opentracks.sensors.driver.DriverObserver0;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.Aggregator;
|
import de.dennisguse.opentracks.sensors.sensorData.Aggregator;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.AggregatorBarometer;
|
import de.dennisguse.opentracks.sensors.sensorData.AggregatorBarometer;
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.AggregatorCyclingCadence;
|
import de.dennisguse.opentracks.sensors.sensorData.AggregatorCyclingCadence;
|
||||||
@@ -35,7 +35,8 @@ import de.dennisguse.opentracks.settings.PreferencesUtils;
|
|||||||
import de.dennisguse.opentracks.util.SystemUtils;
|
import de.dennisguse.opentracks.util.SystemUtils;
|
||||||
|
|
||||||
//TODO provide context and handler for different Managers (not passing via start(), but similar to getNow()).
|
//TODO provide context and handler for different Managers (not passing via start(), but similar to getNow()).
|
||||||
public class SensorManager implements SharedPreferences.OnSharedPreferenceChangeListener {
|
//TODO Remove DriverObserver from SensorManager
|
||||||
|
public class SensorManager implements SharedPreferences.OnSharedPreferenceChangeListener, DriverObserver0 {
|
||||||
|
|
||||||
private static final String TAG = SensorManager.class.getSimpleName();
|
private static final String TAG = SensorManager.class.getSimpleName();
|
||||||
|
|
||||||
@@ -100,7 +101,7 @@ public class SensorManager implements SharedPreferences.OnSharedPreferenceChange
|
|||||||
if (cyclingDistanceSpeed != null) cyclingDistanceSpeed.resetAggregated();
|
if (cyclingDistanceSpeed != null) cyclingDistanceSpeed.resetAggregated();
|
||||||
if (cyclingPower != null) cyclingPower.resetAggregated();
|
if (cyclingPower != null) cyclingPower.resetAggregated();
|
||||||
if (runningDistanceSpeedCadence != null) runningDistanceSpeedCadence.resetAggregated();
|
if (runningDistanceSpeedCadence != null) runningDistanceSpeedCadence.resetAggregated();
|
||||||
if (barometer != null) barometer.resetAggregated();
|
if (altitudeSumManager.getAggregatorBarometer() != null) altitudeSumManager.getAggregatorBarometer().resetAggregated();
|
||||||
if (gpsManager.getAggregatorGPS() != null) gpsManager.getAggregatorGPS().resetAggregated();
|
if (gpsManager.getAggregatorGPS() != null) gpsManager.getAggregatorGPS().resetAggregated();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -166,9 +167,6 @@ public class SensorManager implements SharedPreferences.OnSharedPreferenceChange
|
|||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
public AggregatorRunning runningDistanceSpeedCadence;
|
public AggregatorRunning runningDistanceSpeedCadence;
|
||||||
|
|
||||||
@VisibleForTesting
|
|
||||||
public AggregatorBarometer barometer;
|
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
public SensorData<HeartRate> getHeartRate(Instant now) {
|
public SensorData<HeartRate> getHeartRate(Instant now) {
|
||||||
if (heartRate != null) {
|
if (heartRate != null) {
|
||||||
@@ -264,10 +262,6 @@ public class SensorManager implements SharedPreferences.OnSharedPreferenceChange
|
|||||||
this.cyclingPower.add(now, (BluetoothHandlerCyclingPower.Data) value);
|
this.cyclingPower.add(now, (BluetoothHandlerCyclingPower.Data) value);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (value instanceof AtmosphericPressure) {
|
|
||||||
this.barometer.add(now, (AtmosphericPressure) value);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new UnsupportedOperationException(value.getClass().getCanonicalName());
|
throw new UnsupportedOperationException(value.getClass().getCanonicalName());
|
||||||
}
|
}
|
||||||
@@ -286,9 +280,11 @@ public class SensorManager implements SharedPreferences.OnSharedPreferenceChange
|
|||||||
this.cyclingDistanceSpeed = null;
|
this.cyclingDistanceSpeed = null;
|
||||||
this.cyclingPower = null;
|
this.cyclingPower = null;
|
||||||
this.runningDistanceSpeedCadence = null;
|
this.runningDistanceSpeedCadence = null;
|
||||||
this.barometer = null;
|
|
||||||
|
|
||||||
//TODO This is to ExportImportTest alive; refactor test.
|
//TODO This is to ExportImportTest alive; refactor test.
|
||||||
|
if (this.altitudeSumManager != null) {
|
||||||
|
this.altitudeSumManager.setAggregatorBarometer(null);
|
||||||
|
}
|
||||||
if (this.gpsManager != null) {
|
if (this.gpsManager != null) {
|
||||||
this.gpsManager.setAggregatorGPS();
|
this.gpsManager.setAggregatorGPS();
|
||||||
}
|
}
|
||||||
@@ -296,6 +292,7 @@ public class SensorManager implements SharedPreferences.OnSharedPreferenceChange
|
|||||||
|
|
||||||
public SensorDataSet getSensorDataSet(Instant now) {
|
public SensorDataSet getSensorDataSet(Instant now) {
|
||||||
AggregatorGPS gps = gpsManager.getAggregatorGPS();
|
AggregatorGPS gps = gpsManager.getAggregatorGPS();
|
||||||
|
AggregatorBarometer barometer = altitudeSumManager.getAggregatorBarometer();
|
||||||
|
|
||||||
return new SensorDataSet(
|
return new SensorDataSet(
|
||||||
gps != null && gps.hasReceivedData() ? gps.getAggregatedValueWithSensorName(now) : new SensorData<>(Position.of(now), ""),
|
gps != null && gps.hasReceivedData() ? gps.getAggregatedValueWithSensorName(now) : new SensorData<>(Position.of(now), ""),
|
||||||
@@ -337,10 +334,6 @@ public class SensorManager implements SharedPreferences.OnSharedPreferenceChange
|
|||||||
runningDistanceSpeedCadence = (AggregatorRunning) sensorData;
|
runningDistanceSpeedCadence = (AggregatorRunning) sensorData;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (type instanceof AggregatorBarometer) {
|
|
||||||
barometer = (AggregatorBarometer) sensorData;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new UnsupportedOperationException(type.getClass().getCanonicalName());
|
throw new UnsupportedOperationException(type.getClass().getCanonicalName());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ import androidx.annotation.NonNull;
|
|||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import de.dennisguse.opentracks.data.models.AtmosphericPressure;
|
import de.dennisguse.opentracks.data.models.AtmosphericPressure;
|
||||||
import de.dennisguse.opentracks.sensors.SensorManager;
|
|
||||||
import de.dennisguse.opentracks.sensors.sensorData.AggregatorBarometer;
|
import de.dennisguse.opentracks.sensors.sensorData.AggregatorBarometer;
|
||||||
|
|
||||||
public class BarometerInternal implements Driver {
|
public class BarometerInternal implements Driver {
|
||||||
@@ -21,7 +20,7 @@ public class BarometerInternal implements Driver {
|
|||||||
|
|
||||||
private static final int SAMPLING_PERIOD = (int) TimeUnit.SECONDS.toMicros(5);
|
private static final int SAMPLING_PERIOD = (int) TimeUnit.SECONDS.toMicros(5);
|
||||||
|
|
||||||
private final SensorManager observer;
|
private final DriverObserver0 observer;
|
||||||
|
|
||||||
private Context context;
|
private Context context;
|
||||||
|
|
||||||
@@ -42,9 +41,8 @@ public class BarometerInternal implements Driver {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public BarometerInternal(@NonNull SensorManager observer) {
|
public BarometerInternal(@NonNull DriverObserver0 observer) {
|
||||||
this.observer = observer;
|
this.observer = observer;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -66,6 +64,7 @@ public class BarometerInternal implements Driver {
|
|||||||
disconnect();
|
disconnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean isConnected() {
|
public boolean isConnected() {
|
||||||
return context != null;
|
return context != null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import android.os.Handler;
|
|||||||
public interface Driver {
|
public interface Driver {
|
||||||
void connect(Context context, Handler handler, String address);
|
void connect(Context context, Handler handler, String address);
|
||||||
|
|
||||||
|
//TODO Remove from interface?
|
||||||
boolean isConnected();
|
boolean isConnected();
|
||||||
|
|
||||||
void disconnect();
|
void disconnect();
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package de.dennisguse.opentracks.sensors.driver;
|
||||||
|
|
||||||
|
import de.dennisguse.opentracks.sensors.sensorData.Aggregator;
|
||||||
|
|
||||||
|
//TODO Make onChange parametrized
|
||||||
|
public interface DriverObserver0 {
|
||||||
|
|
||||||
|
//TODO Pass SensorName as parameter only
|
||||||
|
void onConnect(Aggregator<?,?> emptySensorData);
|
||||||
|
|
||||||
|
//TODO Remove parameter
|
||||||
|
void onDisconnect(Aggregator<?,?> emptySensorData);
|
||||||
|
|
||||||
|
//TODO Remove parameter
|
||||||
|
void onRemove(Aggregator<?,?> emptySensorData);
|
||||||
|
|
||||||
|
void onChange(Record value);
|
||||||
|
|
||||||
|
}
|
||||||
+2
-2
@@ -4,8 +4,8 @@ import android.bluetooth.BluetoothGattCharacteristic;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import de.dennisguse.opentracks.sensors.SensorManager;
|
|
||||||
import de.dennisguse.opentracks.sensors.ServiceMeasurementUUID;
|
import de.dennisguse.opentracks.sensors.ServiceMeasurementUUID;
|
||||||
|
import de.dennisguse.opentracks.sensors.driver.DriverObserver0;
|
||||||
|
|
||||||
public interface SensorHandlerInterface {
|
public interface SensorHandlerInterface {
|
||||||
|
|
||||||
@@ -13,5 +13,5 @@ public interface SensorHandlerInterface {
|
|||||||
|
|
||||||
Aggregator<?, ?> createEmptySensorData(String address, String name);
|
Aggregator<?, ?> createEmptySensorData(String address, String name);
|
||||||
|
|
||||||
void handlePayload(SensorManager observer, ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic);
|
void handlePayload(DriverObserver0 observer, ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user