From 490141db2a24b71d4e4674f383a82c95850e6dfb Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Wed, 22 Nov 2023 20:24:12 +0100 Subject: [PATCH] Barometer: added settings for sensor selection. Part of #1424. --- .../BluetoothHandlerBarometricPressure.java | 8 ++- .../opentracks/sensors/GainManager.java | 4 +- .../sensorData/AggregatorBarometer.java | 4 +- .../opentracks/settings/PreferencesUtils.java | 12 +++++ .../BluetoothLeCyclingPowerPreference.java | 4 +- .../BluetoothLeCyclingSpeedPreference.java | 4 +- .../BluetoothLePressurePreference.java | 41 ++++++++++++++++ ...othLeRunningSpeedAndCadencePreference.java | 4 +- .../BluetoothLeSensorPreference.java | 49 ++++++++++++------- src/main/res/values/settings.xml | 2 + src/main/res/values/strings.xml | 2 + src/main/res/xml/settings_sensors.xml | 4 ++ 12 files changed, 111 insertions(+), 27 deletions(-) create mode 100644 src/main/java/de/dennisguse/opentracks/settings/bluetooth/BluetoothLePressurePreference.java diff --git a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerBarometricPressure.java b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerBarometricPressure.java index ef7aeba37..1875b5a69 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerBarometricPressure.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothHandlerBarometricPressure.java @@ -7,6 +7,8 @@ import java.util.UUID; import de.dennisguse.opentracks.data.models.AtmosphericPressure; import de.dennisguse.opentracks.sensors.sensorData.Aggregator; +import de.dennisguse.opentracks.sensors.sensorData.AggregatorBarometer; +import de.dennisguse.opentracks.sensors.sensorData.Raw; import de.dennisguse.opentracks.sensors.sensorData.SensorHandlerInterface; public class BluetoothHandlerBarometricPressure implements SensorHandlerInterface { @@ -23,12 +25,14 @@ public class BluetoothHandlerBarometricPressure implements SensorHandlerInterfac @Override public Aggregator createEmptySensorData(String address, String name) { - return null; //TODO + return new AggregatorBarometer(address, name); } @Override public void handlePayload(SensorManager.SensorDataChangedObserver observer, ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic) { - //TODO + AtmosphericPressure value = parseEnvironmentalSensing(characteristic); + if (value == null) return; + observer.onChange(new Raw<>(value)); } public static AtmosphericPressure parseEnvironmentalSensing(BluetoothGattCharacteristic characteristic) { diff --git a/src/main/java/de/dennisguse/opentracks/sensors/GainManager.java b/src/main/java/de/dennisguse/opentracks/sensors/GainManager.java index 40e1749f9..613502832 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/GainManager.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/GainManager.java @@ -29,7 +29,7 @@ public class GainManager implements SensorConnector { driver.connect(context, handler, this); if (driver.isConnected()) { - listener.onConnect(new AggregatorBarometer("internal")); + listener.onConnect(new AggregatorBarometer("internal", null)); } } @@ -37,7 +37,7 @@ public class GainManager implements SensorConnector { Log.d(TAG, "Stop"); driver.disconnect(context); - listener.onDisconnect(new AggregatorBarometer("internal")); + listener.onDisconnect(new AggregatorBarometer("internal", null)); } public void onSensorValueChanged(AtmosphericPressure currentSensorValue) { diff --git a/src/main/java/de/dennisguse/opentracks/sensors/sensorData/AggregatorBarometer.java b/src/main/java/de/dennisguse/opentracks/sensors/sensorData/AggregatorBarometer.java index 7e5ed7c57..06f9fbb7e 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/sensorData/AggregatorBarometer.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/sensorData/AggregatorBarometer.java @@ -11,8 +11,8 @@ public class AggregatorBarometer extends Aggregator sensorUUIDs) { + return newInstance(preferenceKey, sensorUUIDs, false); } - public static BluetoothLeSensorPreferenceDialog newInstance(String preferenceKey, List sensorUUIDs) { + public static BluetoothLeSensorPreferenceDialog newInstance(String preferenceKey, List sensorUUIDs, boolean includeInternalSensor) { final BluetoothLeSensorPreferenceDialog fragment = new BluetoothLeSensorPreferenceDialog(); - final Bundle b = new Bundle(1); + final Bundle b = new Bundle(3); b.putString(ARG_KEY, preferenceKey); b.putParcelableArrayList(ARG_BLE_SERVICE_UUIDS, new ArrayList<>(sensorUUIDs.stream() .map(ServiceMeasurementUUID::serviceUUID) .map(ParcelUuid::new) .collect(Collectors.toList()))); + b.putBoolean(ARG_INCLUDE_INTERNAL, includeInternalSensor); + fragment.setArguments(b); return fragment; } @@ -179,6 +182,7 @@ public abstract class BluetoothLeSensorPreference extends DialogPreference { private void startBluetoothScan() { List serviceUUIDs = getArguments().getParcelableArrayList(ARG_BLE_SERVICE_UUIDS); + boolean includeInternalSensor = getArguments().getBoolean(ARG_INCLUDE_INTERNAL); BluetoothAdapter bluetoothAdapter = BluetoothUtils.getAdapter(getContext()); if (bluetoothAdapter == null || !bluetoothAdapter.isEnabled()) { @@ -201,14 +205,23 @@ public abstract class BluetoothLeSensorPreference extends DialogPreference { } String deviceNone = getContext().getString(R.string.sensor_type_value_none); + String sensorInternal = getString(R.string.sensor_type_value_internal); + listAdapter.add(getContext().getString(DEVICE_NONE_RESOURCEID), deviceNone); selectedEntryIndex = 0; BluetoothLeSensorPreference preference = (BluetoothLeSensorPreference) getPreference(); - String deviceSelected = preference.getValue(); - if (deviceSelected != null && !deviceNone.equals(deviceSelected)) { - listAdapter.add(preference.getValue(), preference.getValue()); - selectedEntryIndex = 1; + String deviceSelected = preference.value; + if (includeInternalSensor) { + listAdapter.add(getString(SENSOR_INTERNAL_RESOURCEID), sensorInternal); + if (sensorInternal.equals(deviceSelected)) { + selectedEntryIndex = 1; + } + } + + if (deviceSelected != null && !deviceNone.equals(deviceSelected) && !sensorInternal.equals(deviceSelected)) { + listAdapter.add(preference.value, preference.value); + selectedEntryIndex++; } List scanFilter = null; diff --git a/src/main/res/values/settings.xml b/src/main/res/values/settings.xml index f66ad622a..97e18a979 100644 --- a/src/main/res/values/settings.xml +++ b/src/main/res/values/settings.xml @@ -32,7 +32,9 @@ bluetoothCyclingSpeedSensor bluetoothCyclingPowerSensor bluetoothRunningSpeedAndCadenceSensor + bluetoothPressureSensor NONE + INTERNAL bluetoothCyclingSpeedWheelCircumference 2135 diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 02bdf8955..44ffd5fc6 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -331,6 +331,7 @@ limitations under the License. bpm %1$d bpm Power + Barometer Avg Power Max Power W @@ -559,6 +560,7 @@ limitations under the License. %1$d s None Off + Internal sensor Smallest (recommended) %1$d s (recommended) Becoming idle. diff --git a/src/main/res/xml/settings_sensors.xml b/src/main/res/xml/settings_sensors.xml index 564a3e3f3..f72adcdaa 100644 --- a/src/main/res/xml/settings_sensors.xml +++ b/src/main/res/xml/settings_sensors.xml @@ -15,6 +15,10 @@ android:key="@string/settings_sensor_heart_rate_max_key" android:title="@string/settings_sensor_heart_rate_max" app:useSimpleSummaryProvider="true" /> +