in rx-central-ble/src/main/java/com/uber/rxcentralble/core/scanners/ThrottledLollipopScanner.java [77:98]
public ThrottledLollipopScanner(ParsedAdvertisement.Factory parsedAdDataFactory,
long maxScanDurationMs,
long pauseIntervalMs) {
this.parsedAdDataFactory = parsedAdDataFactory;
this.scanCallback = getScanCallback();
this.maxScanDurationMs = maxScanDurationMs;
this.pauseIntervalMs = pauseIntervalMs;
this.errorSubject = CompletableSubject.create();
this.sharedScanData = scanModeRelay
.switchMap(nextScanMode -> Observable.fromCallable(this::calculateDelay)
.switchMap(delay -> Observable.timer(delay, TimeUnit.MILLISECONDS))
.map(proceed -> nextScanMode))
.distinctUntilChanged()
.switchMap(nextScanMode -> Observable.concat(
// Start a (potentially delayed) throttled scan.
throttledScan(scanDataRelay, nextScanMode),
// Repeat pause followed by throttle scan.
intervalScan(scanDataRelay, nextScanMode)))
.doFinally(this::cleanup)
.share();
}