docs: void createThreeDSecureSource(String sourceId) {
          // This represents a request for a 3DS purchase of 10.00 euro.
          final SourceParams threeDParams = SourceParams.createThreeDSecureParams(
                  1000L,
                  "EUR",
                  getUrl(true),
                  sourceId);
  
          Observable<Source> threeDSecureObservable = Observable.fromCallable(
                  new Callable<Source>() {
                      @Nullable
                      @Override
                      public Source call() throws Exception {
                          return mStripe.createSourceSynchronous(
                                  threeDParams,
                                  PaymentConfiguration.getInstance().getPublishableKey());
                      }
                  });
  
          mCompositeSubscription.add(threeDSecureObservable
                  .subscribeOn(Schedulers.io())
                  .observeOn(AndroidSchedulers.mainThread())
                  .doOnUnsubscribe(new Action0() {
                      @Override
                      public void call() {
                          mProgressDialogController.dismiss();
                      }
                  })
                  .subscribe(
                          // Because we've made the mapping above, we're now subscribing
                          // to the result of creating a 3DS Source
                          new Action1<Source>() {
                              @Override
                              public void call(@Nullable Source source) {
                                  if (source == null) {
                                      return;
                                  }
  
                                  // Once a 3DS Source is created, that is used
                                  // to initiate the third-party verification
                                  showDialog(source);
                              }
                          },
                          new Action1<Throwable>() {
                              @Override
                              public void call(Throwable throwable) {
                                  mErrorDialogHandler.show(throwable.getMessage());
                              }
                          }
                  ));
      }