From b5408eabcd19ff38d1c03d9f05da6fc97ff61f44 Mon Sep 17 00:00:00 2001 From: Kilian Lackhove Date: Fri, 10 Apr 2026 21:56:18 +0200 Subject: [PATCH] Pre-populate BLE devices list with already-bonded devices --- .../settings/bluetooth/BluetoothLeSensorPreference.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) 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 7e90f94d9..26abaf528 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/bluetooth/BluetoothLeSensorPreference.java +++ b/src/main/java/de/dennisguse/opentracks/settings/bluetooth/BluetoothLeSensorPreference.java @@ -228,8 +228,15 @@ public abstract class BluetoothLeSensorPreference extends DialogPreference { selectedEntryIndex = !includeInternalSensor ? 1 : 2; } + // Pre-populate with already-bonded BLE devices so that devices that are paired but not actively advertising (e.g. Bosch eBike) are still shown. In case we dont have any cached UUIDs for a device, we just add it to the list and let the user decide + boolean filterEnabled = PreferencesUtils.getBluetoothFilterEnabled(); + bluetoothAdapter.getBondedDevices().stream() + .filter(bonded -> bonded.getType() == BluetoothDevice.DEVICE_TYPE_LE || bonded.getType() == BluetoothDevice.DEVICE_TYPE_DUAL) + .filter(bonded -> !filterEnabled || bonded.getUuids() == null || java.util.Arrays.stream(bonded.getUuids()).anyMatch(serviceUUIDs::contains)) + .forEach(bonded -> listAdapter.add(bonded.getAddress(), bonded.getName())); + List scanFilter = null; - if (PreferencesUtils.getBluetoothFilterEnabled()) { + if (filterEnabled) { scanFilter = serviceUUIDs.stream() .map(it -> new ScanFilter.Builder().setServiceUuid(it).build()) .toList();