private void connect()

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");
    }
  }