File tree 5 files changed +53
-0
lines changed
main/java/com/polidea/rxandroidble
test/groovy/com/polidea/rxandroidble
5 files changed +53
-0
lines changed Original file line number Diff line number Diff line change 6
6
7
7
import com .polidea .rxandroidble .internal .RxBleLog ;
8
8
9
+ import java .util .Set ;
9
10
import java .util .UUID ;
10
11
11
12
import rx .Observable ;
@@ -41,6 +42,8 @@ public static void setLogLevel(@RxBleLog.LogLevel int logLevel) {
41
42
*/
42
43
public abstract RxBleDevice getBleDevice (@ NonNull String macAddress );
43
44
45
+ public abstract Set <RxBleDevice > getBondedDevices ();
46
+
44
47
/**
45
48
* Returns an infinite observable emitting BLE scan results.
46
49
* Scan is automatically started and stopped based on the Observable lifecycle.
Original file line number Diff line number Diff line change 20
20
import com .polidea .rxandroidble .internal .util .UUIDUtil ;
21
21
22
22
import java .util .HashMap ;
23
+ import java .util .HashSet ;
23
24
import java .util .Map ;
24
25
import java .util .Set ;
25
26
import java .util .UUID ;
@@ -69,6 +70,17 @@ public RxBleDevice getBleDevice(@NonNull String macAddress) {
69
70
return rxBleDeviceProvider .getBleDevice (macAddress );
70
71
}
71
72
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
+
72
84
@ Override
73
85
public Observable <RxBleScanResult > scanBleDevices (@ Nullable UUID ... filterServiceUUIDs ) {
74
86
Original file line number Diff line number Diff line change 4
4
import android .bluetooth .BluetoothDevice ;
5
5
import android .support .annotation .Nullable ;
6
6
7
+ import java .util .Set ;
8
+
7
9
public class RxBleAdapterWrapper {
8
10
9
11
private final BluetoothAdapter bluetoothAdapter ;
@@ -31,4 +33,8 @@ public boolean startLeScan(BluetoothAdapter.LeScanCallback leScanCallback) {
31
33
public void stopLeScan (BluetoothAdapter .LeScanCallback leScanCallback ) {
32
34
bluetoothAdapter .stopLeScan (leScanCallback );
33
35
}
36
+
37
+ public Set <BluetoothDevice > getBondedDevices () {
38
+ return bluetoothAdapter .getBondedDevices ();
39
+ }
34
40
}
Original file line number Diff line number Diff line change @@ -3,6 +3,7 @@ package com.polidea.rxandroidble
3
3
import android.bluetooth.BluetoothAdapter
4
4
import android.bluetooth.BluetoothDevice
5
5
import com.polidea.rxandroidble.internal.util.RxBleAdapterWrapper
6
+ import org.apache.maven.artifact.versioning.OverConstrainedVersionException
6
7
7
8
class MockRxBleAdapterWrapper extends RxBleAdapterWrapper {
8
9
@@ -19,6 +20,7 @@ class MockRxBleAdapterWrapper extends RxBleAdapterWrapper {
19
20
}
20
21
21
22
private List<ScanData > scanDataList = new ArrayList<> ()
23
+ private Set<BluetoothDevice > bondedDevices = new HashSet<> ()
22
24
23
25
MockRxBleAdapterWrapper () {
24
26
super (null )
@@ -32,6 +34,10 @@ class MockRxBleAdapterWrapper extends RxBleAdapterWrapper {
32
34
scanDataList. add(new ScanData (bluetoothDevice, rssi, scanResult))
33
35
}
34
36
37
+ def addBondedDevice (BluetoothDevice bluetoothDevice ) {
38
+ bondedDevices. add(bluetoothDevice)
39
+ }
40
+
35
41
@Override
36
42
BluetoothDevice getRemoteDevice (String macAddress ) {
37
43
scanDataList. find {
@@ -63,4 +69,9 @@ class MockRxBleAdapterWrapper extends RxBleAdapterWrapper {
63
69
void stopLeScan (BluetoothAdapter.LeScanCallback leScanCallback ) {
64
70
65
71
}
72
+
73
+ @Override
74
+ Set<BluetoothDevice > getBondedDevices () {
75
+ return bondedDevices
76
+ }
66
77
}
Original file line number Diff line number Diff line change @@ -49,6 +49,20 @@ class RxBleClientTest extends Specification {
49
49
)
50
50
}
51
51
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
+
52
66
def " should start BLE scan if subscriber subscribes to the scan observable" () {
53
67
given :
54
68
TestSubscriber testSubscriber = new TestSubscriber<> ()
@@ -335,6 +349,13 @@ class RxBleClientTest extends Specification {
335
349
bleAdapterWrapperSpy.addScanResult(mock, scanData['rssi'], scanData['scanRecord'])
336
350
}
337
351
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
+
338
359
/**
339
360
* This test reproduces issue: https://github.com/Polidea/RxAndroidBle/issues/17
340
361
* It first calls startLeScan method which takes 100ms to finish
You can’t perform that action at this time.
0 commit comments