Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add advertisingSid property to ScanResult #856

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -383,7 +383,8 @@ private static RxBleScanResultMock convertToPublicScanResult(RxBleDevice bleDevi
System.currentTimeMillis() * 1000000,
ScanCallbackType.CALLBACK_TYPE_FIRST_MATCH,
scanRecord,
IsConnectable.LEGACY_UNKNOWN
IsConnectable.LEGACY_UNKNOWN,
255
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@
public class RxBleScanResultMock extends ScanResult implements ScanResultInterface {
public RxBleScanResultMock(RxBleDevice bleDevice, int rssi, long timestampNanos,
ScanCallbackType callbackType, ScanRecord scanRecord,
IsConnectable isConnectable) {
super(bleDevice, rssi, timestampNanos, callbackType, scanRecord, isConnectable);
IsConnectable isConnectable, Integer advertisingSid) {
super(bleDevice, rssi, timestampNanos, callbackType, scanRecord, isConnectable, advertisingSid);
}

public String getAddress() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@
import com.polidea.rxandroidble2.helpers.LocationServicesOkObservable;
import com.polidea.rxandroidble2.internal.DeviceComponent;
import com.polidea.rxandroidble2.internal.RxBleLog;
import com.polidea.rxandroidble2.internal.scan.AdvertisingSidExtractor;
import com.polidea.rxandroidble2.internal.scan.AdvertisingSidExtractorApi18;
import com.polidea.rxandroidble2.internal.scan.AdvertisingSidExtractorApi26;
import com.polidea.rxandroidble2.internal.scan.BackgroundScannerImpl;
import com.polidea.rxandroidble2.internal.scan.InternalToExternalScanResultConverter;
import com.polidea.rxandroidble2.internal.scan.IsConnectableChecker;
Expand Down Expand Up @@ -358,6 +361,19 @@ static IsConnectableChecker provideIsConnectableChecker(
return isConnectableCheckerApi26.get();
}

@Provides
@ClientScope
static AdvertisingSidExtractor provideAdvertisingSidExtractor(
@Named(PlatformConstants.INT_DEVICE_SDK) int deviceSdk,
Provider<AdvertisingSidExtractorApi18> advertisingSidExtractorApi18,
Provider<AdvertisingSidExtractorApi26> advertisingSidExtractorApi26
) {
if (deviceSdk < Build.VERSION_CODES.O) {
return advertisingSidExtractorApi18.get();
}
return advertisingSidExtractorApi26.get();
}

@Provides
@Named(BluetoothConstants.ENABLE_NOTIFICATION_VALUE)
static byte[] provideEnableNotificationValue() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,9 @@ public interface ScanResultInterface {
* Get the type of scan callback
*/
ScanCallbackType getScanCallbackType();

/**
* Get the advertising set id
*/
Integer getAdvertisingSid();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.polidea.rxandroidble2.internal.scan;

import android.bluetooth.le.ScanResult;

import androidx.annotation.RestrictTo;

@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public interface AdvertisingSidExtractor {
Integer extract(ScanResult scanResult);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.polidea.rxandroidble2.internal.scan;

import android.bluetooth.le.ScanResult;

import bleshadow.javax.inject.Inject;

public class AdvertisingSidExtractorApi18 implements AdvertisingSidExtractor {
@Inject
public AdvertisingSidExtractorApi18() {
}

@Override
public Integer extract(ScanResult scanResult) {
return null;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.polidea.rxandroidble2.internal.scan;

import android.bluetooth.le.ScanResult;

import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;

import bleshadow.javax.inject.Inject;

@RequiresApi(26 /* Build.VERSION_CODES.O */)
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public class AdvertisingSidExtractorApi26 implements AdvertisingSidExtractor {
@Inject
public AdvertisingSidExtractorApi26() {
}

@Override
public Integer extract(ScanResult scanResult) {
return scanResult.getAdvertisingSid();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,31 +26,34 @@ public class InternalScanResultCreator {

private final ScanRecordParser scanRecordParser;
private final IsConnectableChecker isConnectableChecker;
private final AdvertisingSidExtractor advertisingSidExtractor;

@Inject
public InternalScanResultCreator(ScanRecordParser scanRecordParser, IsConnectableChecker isConnectableChecker) {
public InternalScanResultCreator(ScanRecordParser scanRecordParser, IsConnectableChecker isConnectableChecker,
AdvertisingSidExtractor advertisingSidExtractor) {
this.scanRecordParser = scanRecordParser;
this.isConnectableChecker = isConnectableChecker;
this.advertisingSidExtractor = advertisingSidExtractor;
}

public RxBleInternalScanResult create(BluetoothDevice bluetoothDevice, int rssi, byte[] scanRecord) {
final ScanRecord scanRecordObj = scanRecordParser.parseFromBytes(scanRecord);
return new RxBleInternalScanResult(bluetoothDevice, rssi, System.nanoTime(), scanRecordObj,
ScanCallbackType.CALLBACK_TYPE_UNSPECIFIED, IsConnectable.LEGACY_UNKNOWN);
ScanCallbackType.CALLBACK_TYPE_UNSPECIFIED, IsConnectable.LEGACY_UNKNOWN, null);
}

@RequiresApi(21 /* Build.VERSION_CODES.LOLLIPOP */)
public RxBleInternalScanResult create(ScanResult result) {
final ScanRecordImplNativeWrapper scanRecord = new ScanRecordImplNativeWrapper(result.getScanRecord(), scanRecordParser);
return new RxBleInternalScanResult(result.getDevice(), result.getRssi(), result.getTimestampNanos(), scanRecord,
ScanCallbackType.CALLBACK_TYPE_BATCH, isConnectableChecker.check(result));
ScanCallbackType.CALLBACK_TYPE_BATCH, isConnectableChecker.check(result), advertisingSidExtractor.extract(result));
}

@RequiresApi(21 /* Build.VERSION_CODES.LOLLIPOP */)
public RxBleInternalScanResult create(int callbackType, ScanResult result) {
final ScanRecordImplNativeWrapper scanRecord = new ScanRecordImplNativeWrapper(result.getScanRecord(), scanRecordParser);
return new RxBleInternalScanResult(result.getDevice(), result.getRssi(), result.getTimestampNanos(), scanRecord,
toScanCallbackType(callbackType), isConnectableChecker.check(result));
toScanCallbackType(callbackType), isConnectableChecker.check(result), advertisingSidExtractor.extract(result));
}

@RequiresApi(21 /* Build.VERSION_CODES.LOLLIPOP */)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ public ScanResult apply(RxBleInternalScanResult rxBleInternalScanResult) {
rxBleInternalScanResult.getTimestampNanos(),
rxBleInternalScanResult.getScanCallbackType(),
rxBleInternalScanResult.getScanRecord(),
rxBleInternalScanResult.isConnectable()
rxBleInternalScanResult.isConnectable(),
rxBleInternalScanResult.getAdvertisingSid()
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,17 @@ public class RxBleInternalScanResult implements ScanResultInterface {
private final ScanRecord scanRecord;
private final ScanCallbackType scanCallbackType;
private final IsConnectable isConnectable;
private final Integer advertisingSid;

public RxBleInternalScanResult(BluetoothDevice bluetoothDevice, int rssi, long timestampNanos, ScanRecord scanRecord,
ScanCallbackType scanCallbackType, IsConnectable isConnectable) {
ScanCallbackType scanCallbackType, IsConnectable isConnectable, Integer advertisingSid) {
this.bluetoothDevice = bluetoothDevice;
this.rssi = rssi;
this.timestampNanos = timestampNanos;
this.scanRecord = scanRecord;
this.scanCallbackType = scanCallbackType;
this.isConnectable = isConnectable;
this.advertisingSid = advertisingSid;
}

public BluetoothDevice getBluetoothDevice() {
Expand Down Expand Up @@ -64,4 +66,9 @@ public String getDeviceName() {
public IsConnectable isConnectable() {
return isConnectable;
}

@Override
public Integer getAdvertisingSid() {
return advertisingSid;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,8 @@ public RxBleInternalScanResult apply(RxBleInternalScanResult rxBleInternalScanRe
rxBleInternalScanResult.getTimestampNanos(),
rxBleInternalScanResult.getScanRecord(),
ScanCallbackType.CALLBACK_TYPE_FIRST_MATCH,
rxBleInternalScanResult.isConnectable()
rxBleInternalScanResult.isConnectable(),
rxBleInternalScanResult.getAdvertisingSid()
);
}
};
Expand All @@ -195,7 +196,8 @@ public RxBleInternalScanResult apply(RxBleInternalScanResult rxBleInternalScanRe
rxBleInternalScanResult.getTimestampNanos(),
rxBleInternalScanResult.getScanRecord(),
ScanCallbackType.CALLBACK_TYPE_MATCH_LOST,
rxBleInternalScanResult.isConnectable()
rxBleInternalScanResult.isConnectable(),
rxBleInternalScanResult.getAdvertisingSid()
);
}
};
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.polidea.rxandroidble2.scan;

import androidx.annotation.NonNull;
import androidx.annotation.RestrictTo;

import com.polidea.rxandroidble2.RxBleDevice;
import com.polidea.rxandroidble2.internal.logger.LoggerUtil;
Expand All @@ -13,6 +14,7 @@ public class ScanResult {
private final ScanCallbackType callbackType;
private final ScanRecord scanRecord;
private final IsConnectable isConnectable;
private final Integer advertisingSid;

public ScanResult(RxBleDevice bleDevice, int rssi, long timestampNanos, ScanCallbackType callbackType,
ScanRecord scanRecord, IsConnectable isConnectable) {
Expand All @@ -22,6 +24,19 @@ public ScanResult(RxBleDevice bleDevice, int rssi, long timestampNanos, ScanCall
this.callbackType = callbackType;
this.scanRecord = scanRecord;
this.isConnectable = isConnectable;
this.advertisingSid = null;
}

@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public ScanResult(RxBleDevice bleDevice, int rssi, long timestampNanos, ScanCallbackType callbackType,
ScanRecord scanRecord, IsConnectable isConnectable, Integer advertisingSid) {
this.bleDevice = bleDevice;
this.rssi = rssi;
this.timestampNanos = timestampNanos;
this.callbackType = callbackType;
this.scanRecord = scanRecord;
this.isConnectable = isConnectable;
this.advertisingSid = advertisingSid;
}

public RxBleDevice getBleDevice() {
Expand All @@ -48,6 +63,10 @@ public IsConnectable isConnectable() {
return isConnectable;
}

public Integer getAdvertisingSid() {
return advertisingSid;
}

@Override
@NonNull
public String toString() {
Expand All @@ -58,6 +77,7 @@ public String toString() {
+ ", callbackType=" + callbackType
+ ", scanRecord=" + LoggerUtil.bytesToHex(scanRecord.getBytes())
+ ", isConnectable=" + isConnectable
+ ", advertisingSid=" + advertisingSid
+ '}';
}
}
Loading