Skip to content

Commit bf82ef8

Browse files
fracturedpsycheuKL
authored andcommittedJul 22, 2016
Added code to get bonded devices from adapter (#46)
* Added support for getBondedDevices
1 parent 341c5fe commit bf82ef8

File tree

5 files changed

+53
-0
lines changed

5 files changed

+53
-0
lines changed
 

‎rxandroidble/src/main/java/com/polidea/rxandroidble/RxBleClient.java

+3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import com.polidea.rxandroidble.internal.RxBleLog;
88

9+
import java.util.Set;
910
import java.util.UUID;
1011

1112
import rx.Observable;
@@ -41,6 +42,8 @@ public static void setLogLevel(@RxBleLog.LogLevel int logLevel) {
4142
*/
4243
public abstract RxBleDevice getBleDevice(@NonNull String macAddress);
4344

45+
public abstract Set<RxBleDevice> getBondedDevices();
46+
4447
/**
4548
* Returns an infinite observable emitting BLE scan results.
4649
* Scan is automatically started and stopped based on the Observable lifecycle.

‎rxandroidble/src/main/java/com/polidea/rxandroidble/RxBleClientImpl.java

+12
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import com.polidea.rxandroidble.internal.util.UUIDUtil;
2121

2222
import java.util.HashMap;
23+
import java.util.HashSet;
2324
import java.util.Map;
2425
import java.util.Set;
2526
import java.util.UUID;
@@ -69,6 +70,17 @@ public RxBleDevice getBleDevice(@NonNull String macAddress) {
6970
return rxBleDeviceProvider.getBleDevice(macAddress);
7071
}
7172

73+
@Override
74+
public Set<RxBleDevice> getBondedDevices() {
75+
Set<RxBleDevice> rxBleDevices = new HashSet<>();
76+
Set<BluetoothDevice> bluetoothDevices = rxBleAdapterWrapper.getBondedDevices();
77+
for (BluetoothDevice bluetoothDevice : bluetoothDevices) {
78+
rxBleDevices.add(getBleDevice(bluetoothDevice.getAddress()));
79+
}
80+
81+
return rxBleDevices;
82+
}
83+
7284
@Override
7385
public Observable<RxBleScanResult> scanBleDevices(@Nullable UUID... filterServiceUUIDs) {
7486

‎rxandroidble/src/main/java/com/polidea/rxandroidble/internal/util/RxBleAdapterWrapper.java

+6
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import android.bluetooth.BluetoothDevice;
55
import android.support.annotation.Nullable;
66

7+
import java.util.Set;
8+
79
public class RxBleAdapterWrapper {
810

911
private final BluetoothAdapter bluetoothAdapter;
@@ -31,4 +33,8 @@ public boolean startLeScan(BluetoothAdapter.LeScanCallback leScanCallback) {
3133
public void stopLeScan(BluetoothAdapter.LeScanCallback leScanCallback) {
3234
bluetoothAdapter.stopLeScan(leScanCallback);
3335
}
36+
37+
public Set<BluetoothDevice> getBondedDevices() {
38+
return bluetoothAdapter.getBondedDevices();
39+
}
3440
}

‎rxandroidble/src/test/groovy/com/polidea/rxandroidble/MockRxBleAdapterWrapper.groovy

+11
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.polidea.rxandroidble
33
import android.bluetooth.BluetoothAdapter
44
import android.bluetooth.BluetoothDevice
55
import com.polidea.rxandroidble.internal.util.RxBleAdapterWrapper
6+
import org.apache.maven.artifact.versioning.OverConstrainedVersionException
67

78
class MockRxBleAdapterWrapper extends RxBleAdapterWrapper {
89

@@ -19,6 +20,7 @@ class MockRxBleAdapterWrapper extends RxBleAdapterWrapper {
1920
}
2021

2122
private List<ScanData> scanDataList = new ArrayList<>()
23+
private Set<BluetoothDevice> bondedDevices = new HashSet<>()
2224

2325
MockRxBleAdapterWrapper() {
2426
super(null)
@@ -32,6 +34,10 @@ class MockRxBleAdapterWrapper extends RxBleAdapterWrapper {
3234
scanDataList.add(new ScanData(bluetoothDevice, rssi, scanResult))
3335
}
3436

37+
def addBondedDevice(BluetoothDevice bluetoothDevice) {
38+
bondedDevices.add(bluetoothDevice)
39+
}
40+
3541
@Override
3642
BluetoothDevice getRemoteDevice(String macAddress) {
3743
scanDataList.find {
@@ -63,4 +69,9 @@ class MockRxBleAdapterWrapper extends RxBleAdapterWrapper {
6369
void stopLeScan(BluetoothAdapter.LeScanCallback leScanCallback) {
6470

6571
}
72+
73+
@Override
74+
Set<BluetoothDevice> getBondedDevices() {
75+
return bondedDevices
76+
}
6677
}

‎rxandroidble/src/test/groovy/com/polidea/rxandroidble/RxBleClientTest.groovy

+21
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,20 @@ class RxBleClientTest extends Specification {
4949
)
5050
}
5151

52+
def "should return bonded devices"() {
53+
given:
54+
bluetoothDeviceBonded("AA:AA:AA:AA:AA:AA")
55+
bluetoothDeviceBonded("BB:BB:BB:BB:BB:BB")
56+
bluetoothDeviceDiscovered deviceMac: "AA:AA:AA:AA:AA:AA", rssi: 0, scanRecord: [] as byte[]
57+
bluetoothDeviceDiscovered deviceMac: "BB:BB:BB:BB:BB:BB", rssi: 50, scanRecord: [] as byte[]
58+
59+
when:
60+
def results = objectUnderTest.getBondedDevices()
61+
62+
then:
63+
assert results.size() == 2
64+
}
65+
5266
def "should start BLE scan if subscriber subscribes to the scan observable"() {
5367
given:
5468
TestSubscriber testSubscriber = new TestSubscriber<>()
@@ -335,6 +349,13 @@ class RxBleClientTest extends Specification {
335349
bleAdapterWrapperSpy.addScanResult(mock, scanData['rssi'], scanData['scanRecord'])
336350
}
337351
352+
def bluetoothDeviceBonded(String address) {
353+
def mock = Mock(BluetoothDevice)
354+
mock.getAddress() >> address
355+
mock.hashCode() >> address.hashCode()
356+
bleAdapterWrapperSpy.addBondedDevice(mock);
357+
}
358+
338359
/**
339360
* This test reproduces issue: https://github.com/Polidea/RxAndroidBle/issues/17
340361
* It first calls startLeScan method which takes 100ms to finish

0 commit comments

Comments
 (0)
Please sign in to comment.