正在查看: xDrip+ v04633772025.07.16 应用的 RxBleClientImpl.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
正在查看: xDrip+ v04633772025.07.16 应用的 RxBleClientImpl.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
package com.polidea.rxandroidble2;
import android.bluetooth.BluetoothDevice;
import bleshadow.dagger.Lazy;
import com.nightscout.core.mqtt.Constants;
import com.polidea.rxandroidble2.ClientComponent;
import com.polidea.rxandroidble2.RxBleAdapterStateObservable;
import com.polidea.rxandroidble2.exceptions.BleScanException;
import com.polidea.rxandroidble2.internal.RxBleDeviceProvider;
import com.polidea.rxandroidble2.internal.RxBleLog;
import com.polidea.rxandroidble2.internal.scan.RxBleInternalScanResult;
import com.polidea.rxandroidble2.internal.scan.ScanPreconditionsVerifier;
import com.polidea.rxandroidble2.internal.scan.ScanSetup;
import com.polidea.rxandroidble2.internal.scan.ScanSetupBuilder;
import com.polidea.rxandroidble2.internal.serialization.ClientOperationQueue;
import com.polidea.rxandroidble2.internal.util.CheckerLocationPermission;
import com.polidea.rxandroidble2.internal.util.ClientStateObservable;
import com.polidea.rxandroidble2.internal.util.LocationServicesStatus;
import com.polidea.rxandroidble2.internal.util.RxBleAdapterWrapper;
import com.polidea.rxandroidble2.internal.util.ScanRecordParser;
import com.polidea.rxandroidble2.scan.BackgroundScanner;
import com.polidea.rxandroidble2.scan.ScanFilter;
import com.polidea.rxandroidble2.scan.ScanResult;
import com.polidea.rxandroidble2.scan.ScanSettings;
import io.reactivex.Maybe;
import io.reactivex.MaybeSource;
import io.reactivex.Observable;
import io.reactivex.ObservableSource;
import io.reactivex.Scheduler;
import io.reactivex.functions.Consumer;
import io.reactivex.functions.Function;
import io.reactivex.functions.Predicate;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.Callable;
class RxBleClientImpl extends RxBleClient {
private final BackgroundScanner backgroundScanner;
final Scheduler bluetoothInteractionScheduler;
private final CheckerLocationPermission checkerLocationPermission;
private final ClientComponent.ClientComponentFinalizer clientComponentFinalizer;
final Function<RxBleInternalScanResult, ScanResult> internalToExternalScanResultMapFunction;
private final Lazy<ClientStateObservable> lazyClientStateObservable;
private final LocationServicesStatus locationServicesStatus;
final ClientOperationQueue operationQueue;
final Map<Set<UUID>, Observable<Object>> queuedScanOperations = new HashMap();
private final Observable<RxBleAdapterStateObservable.BleAdapterState> rxBleAdapterStateObservable;
private final RxBleAdapterWrapper rxBleAdapterWrapper;
private final RxBleDeviceProvider rxBleDeviceProvider;
final ScanPreconditionsVerifier scanPreconditionVerifier;
private final ScanRecordParser scanRecordParser;
final ScanSetupBuilder scanSetupBuilder;
RxBleClientImpl(RxBleAdapterWrapper rxBleAdapterWrapper, ClientOperationQueue clientOperationQueue, Observable<RxBleAdapterStateObservable.BleAdapterState> observable, ScanRecordParser scanRecordParser, LocationServicesStatus locationServicesStatus, Lazy<ClientStateObservable> lazy, RxBleDeviceProvider rxBleDeviceProvider, ScanSetupBuilder scanSetupBuilder, ScanPreconditionsVerifier scanPreconditionsVerifier, Function<RxBleInternalScanResult, ScanResult> function, Scheduler scheduler, ClientComponent.ClientComponentFinalizer clientComponentFinalizer, BackgroundScanner backgroundScanner, CheckerLocationPermission checkerLocationPermission) {
this.operationQueue = clientOperationQueue;
this.rxBleAdapterWrapper = rxBleAdapterWrapper;
this.rxBleAdapterStateObservable = observable;
this.scanRecordParser = scanRecordParser;
this.locationServicesStatus = locationServicesStatus;
this.lazyClientStateObservable = lazy;
this.rxBleDeviceProvider = rxBleDeviceProvider;
this.scanSetupBuilder = scanSetupBuilder;
this.scanPreconditionVerifier = scanPreconditionsVerifier;
this.internalToExternalScanResultMapFunction = function;
this.bluetoothInteractionScheduler = scheduler;
this.clientComponentFinalizer = clientComponentFinalizer;
this.backgroundScanner = backgroundScanner;
this.checkerLocationPermission = checkerLocationPermission;
}
protected void finalize() throws Throwable {
this.clientComponentFinalizer.onFinalize();
super.finalize();
}
@Override
public RxBleDevice getBleDevice(String str) {
guardBluetoothAdapterAvailable();
return this.rxBleDeviceProvider.getBleDevice(str);
}
@Override
public Set<RxBleDevice> getBondedDevices() {
guardBluetoothAdapterAvailable();
HashSet hashSet = new HashSet();
Iterator<BluetoothDevice> it = this.rxBleAdapterWrapper.getBondedDevices().iterator();
while (it.hasNext()) {
hashSet.add(getBleDevice(it.next().getAddress()));
}
return hashSet;
}
@Override
public Observable<ScanResult> scanBleDevices(final ScanSettings scanSettings, final ScanFilter... scanFilterArr) {
return Observable.defer(new Callable<ObservableSource<? extends ScanResult>>() {
@Override
public ObservableSource<? extends ScanResult> call2() {
RxBleClientImpl.this.scanPreconditionVerifier.verify(scanSettings.shouldCheckLocationProviderState());
ScanSetup build = RxBleClientImpl.this.scanSetupBuilder.build(scanSettings, scanFilterArr);
return RxBleClientImpl.this.operationQueue.queue(build.scanOperation).unsubscribeOn(RxBleClientImpl.this.bluetoothInteractionScheduler).compose(build.scanOperationBehaviourEmulatorTransformer).map(RxBleClientImpl.this.internalToExternalScanResultMapFunction).doOnNext(new Consumer<ScanResult>() {
@Override
public void accept(ScanResult scanResult) {
if (RxBleLog.getShouldLogScannedPeripherals()) {
RxBleLog.i(Constants.DEVICE_ID_FORMAT, scanResult);
}
}
}).mergeWith(RxBleClientImpl.this.bluetoothAdapterOffExceptionObservable());
}
});
}
@Override
public BackgroundScanner getBackgroundScanner() {
return this.backgroundScanner;
}
<T> Observable<T> bluetoothAdapterOffExceptionObservable() {
return this.rxBleAdapterStateObservable.filter(new Predicate<RxBleAdapterStateObservable.BleAdapterState>() {
@Override
public boolean test(RxBleAdapterStateObservable.BleAdapterState bleAdapterState) {
return bleAdapterState != RxBleAdapterStateObservable.BleAdapterState.STATE_ON;
}
}).firstElement().flatMap(new Function<RxBleAdapterStateObservable.BleAdapterState, MaybeSource<T>>() {
@Override
public MaybeSource<T> apply(RxBleAdapterStateObservable.BleAdapterState bleAdapterState) {
return Maybe.error(new BleScanException(1));
}
}).toObservable();
}
private void guardBluetoothAdapterAvailable() {
if (!this.rxBleAdapterWrapper.hasBluetoothAdapter()) {
throw new UnsupportedOperationException("RxAndroidBle library needs a BluetoothAdapter to be available in the system to work. If this is a test on an emulator then you can use 'https://github.com/Polidea/RxAndroidBle/tree/master/mockrxandroidble'");
}
}
}