From bb290e2ee4643e5d3c87195445caabb7b5dd59aa Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Tue, 28 Dec 2021 22:42:24 +0100 Subject: [PATCH] Settings: add option to disable filter of BLE sensors. Fixes #1000. --- .../opentracks/settings/BluetoothLeAdapter.java | 6 +++--- .../opentracks/settings/PreferencesUtils.java | 5 +++++ .../bluetooth/BluetoothLeSensorPreference.java | 14 ++++++++------ src/main/res/values/settings.xml | 5 +++++ src/main/res/values/strings.xml | 1 + src/main/res/xml/settings_sensors.xml | 7 +++++++ 6 files changed, 29 insertions(+), 9 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/settings/BluetoothLeAdapter.java b/src/main/java/de/dennisguse/opentracks/settings/BluetoothLeAdapter.java index 8b6c035eb..381532213 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/BluetoothLeAdapter.java +++ b/src/main/java/de/dennisguse/opentracks/settings/BluetoothLeAdapter.java @@ -45,7 +45,7 @@ public class BluetoothLeAdapter extends BaseAdapter { Device device = devices.get(position); TextView textView = currentView.findViewById(android.R.id.text1); - textView.setText(device.getName()); + textView.setText(device.getNameOrAddress()); return currentView; } @@ -81,8 +81,8 @@ public class BluetoothLeAdapter extends BaseAdapter { this.address = address; } - public String getName() { - return name; + public String getNameOrAddress() { + return name != null ? name : getAddress(); } public void setName(String name) { diff --git a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java index c714cd3a0..3595c0abe 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java +++ b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java @@ -232,6 +232,11 @@ public class PreferencesUtils { return getString(R.string.settings_sensor_bluetooth_running_speed_and_cadence_key, getBluetoothSensorAddressNone()); } + public static boolean getBluetoothFilterEnabled() { + final boolean DEFAULT = resources.getBoolean(R.bool.settings_sensor_bluetooth_service_filter_enabled_default); + return getBoolean(R.string.settings_sensor_bluetooth_service_filter_enabled_key, DEFAULT); + } + public static boolean shouldShowStatsOnLockscreen() { final boolean STATS_SHOW_ON_LOCKSCREEN_DEFAULT = resources.getBoolean(R.bool.stats_show_on_lockscreen_while_recording_default); return getBoolean(R.string.stats_show_on_lockscreen_while_recording_key, STATS_SHOW_ON_LOCKSCREEN_DEFAULT); diff --git a/src/main/java/de/dennisguse/opentracks/settings/bluetooth/BluetoothLeSensorPreference.java b/src/main/java/de/dennisguse/opentracks/settings/bluetooth/BluetoothLeSensorPreference.java index 0a97eebcf..4d571c3cb 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/bluetooth/BluetoothLeSensorPreference.java +++ b/src/main/java/de/dennisguse/opentracks/settings/bluetooth/BluetoothLeSensorPreference.java @@ -34,8 +34,8 @@ import java.util.stream.Collectors; import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.settings.BluetoothLeAdapter; -import de.dennisguse.opentracks.util.BluetoothUtils; import de.dennisguse.opentracks.settings.PreferencesUtils; +import de.dennisguse.opentracks.util.BluetoothUtils; /** * Preference to select a discoverable Bluetooth LE device. @@ -109,17 +109,14 @@ public abstract class BluetoothLeSensorPreference extends DialogPreference { private final ScanCallback scanCallback = new ScanCallback() { @Override public void onScanResult(int callbackType, ScanResult result) { - super.onScanResult(callbackType, result); Log.d(TAG, "Found device " + result.getDevice().getName() + " " + result); - listAdapter.add(result.getDevice()); } @Override public void onBatchScanResults(List results) { for (ScanResult result : results) { - Log.d(TAG, "Found device " + result.getDevice().getName() + " " + result); - listAdapter.add(result.getDevice()); + onScanResult(-1, result); } } @@ -213,7 +210,12 @@ public abstract class BluetoothLeSensorPreference extends DialogPreference { selectedEntryIndex = 1; } - List scanFilter = serviceUUIDs.stream().map(it -> new ScanFilter.Builder().setServiceUuid(it).build()).collect(Collectors.toList()); + List scanFilter = null; + if (PreferencesUtils.getBluetoothFilterEnabled()) { + scanFilter = serviceUUIDs.stream() + .map(it -> new ScanFilter.Builder().setServiceUuid(it).build()) + .collect(Collectors.toList()); + } ScanSettings.Builder scanSettingsBuilder = new ScanSettings.Builder(); scanSettingsBuilder.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY); diff --git a/src/main/res/values/settings.xml b/src/main/res/values/settings.xml index 1e6ace826..435732f61 100644 --- a/src/main/res/values/settings.xml +++ b/src/main/res/values/settings.xml @@ -39,6 +39,11 @@ bluetoothCyclingSpeedWheelCircumference 2135 + bluetoothSensorFilterEnabled + + true + + settingsDefaultExportDirectory instantExportEnabled false diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 12ef6bfc4..a550e21c1 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -433,6 +433,7 @@ limitations under the License. Cadence Distance, Speed, and Cadence Wheel Circumference (mm) + Only show Bluetooth devices that announce required services Preferred rate diff --git a/src/main/res/xml/settings_sensors.xml b/src/main/res/xml/settings_sensors.xml index e64f425c1..4d40b595c 100644 --- a/src/main/res/xml/settings_sensors.xml +++ b/src/main/res/xml/settings_sensors.xml @@ -39,4 +39,11 @@ android:title="@string/settings_sensor_running_speed_and_cadence" /> + + + + \ No newline at end of file