in rx-central-ble-sample/src/main/java/com/uber/rxcentralble/sample/MainActivity.java [266:316]
private void connect() {
if (connection == null) {
String name = nameEditText.getEditableText().toString();
if (!TextUtils.isEmpty(name)) {
Timber.i("Connect to: " + name);
connectButton.setText("Cancel");
ScanMatcher scanMatcher = new NameScanMatcher(name);
connection = scanner
.scan()
.compose(scanMatcher.match())
.firstOrError()
.flatMapObservable(scanData ->
connectionManager.connect(
scanData.getBluetoothDevice(),
DEFAULT_CONNECTION_TIMEOUT))
.retryWhen(errors ->
errors.flatMap(
error -> {
if (error instanceof ConnectionError) {
return Observable.just(Irrelevant.INSTANCE);
}
return Observable.error(error);
}))
.subscribe(
peripheral -> {
peripheralManager.setPeripheral(peripheral);
AndroidSchedulers.mainThread().scheduleDirect(() -> connectButton.setText("Disconnect"));
Timber.i("Connected to: " + name);
Timber.i("Max Write Length (MTU): " + peripheral.getMaxWriteLength());
},
error -> {
connection.dispose();
connection = null;
AndroidSchedulers.mainThread().scheduleDirect(() -> connectButton.setText("Connect"));
Timber.i("Connection error: " + error.getMessage());
}
);
}
} else {
connection.dispose();
connection = null;
connectButton.setText("Connect");
Timber.i("Disconnected");
}
}