@OnClick(R.id.btn_start_operation)
  public void startOperation() {

    _logs.clear();
    _log("Button Clicked");

    Observable.fromIterable(
            Arrays.asList("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l")) //
        .flatMap(
            s1 -> {
              _log(s1 + "start");

              if (s1.equalsIgnoreCase("b") && _attempt < 5) {
                _attempt++;
                return Observable.error(
                    new Throwable("b can't be processed (" + (_attempt - 1) + ")"));
              }

              if (s1.equalsIgnoreCase("c") || s1.equalsIgnoreCase("f")) {
                return Observable.just(s1);
              } else {
                return Observable.timer(2, TimeUnit.SECONDS).map(l -> s1);
              }
            })
        .retryWhen(source -> source.delay(8, TimeUnit.SECONDS))
        .doOnNext(s -> _log(s + "stop"))
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe();
  }
  @Override
  public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    Activity activity = getActivity();
    if (activity instanceof PagerActivity) {
      final PagerActivity pagerActivity = (PagerActivity) activity;

      downloadImage();

      handler.postDelayed(
          () -> new QueryPageCoordinatesTask(pagerActivity).execute(pageNumber), 1000);

      if (QuranSettings.getInstance(activity).shouldHighlightBookmarks()) {
        // Observable.timer by default runs on Schedulers.computation()
        compositeDisposable.add(
            Completable.timer(250, TimeUnit.MILLISECONDS)
                .subscribeOn(AndroidSchedulers.mainThread())
                .subscribeWith(
                    new DisposableCompletableObserver() {
                      @Override
                      public void onComplete() {
                        highlightTagsTask();
                      }

                      @Override
                      public void onError(Throwable e) {}
                    }));
      }
    }
  }
  private void highlightTagsTask() {
    compositeDisposable.add(
        bookmarkModel
            .getBookmarkedAyahsOnPageObservable(pageNumber)
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeWith(
                new DisposableObserver<List<Bookmark>>() {
                  @Override
                  public void onNext(List<Bookmark> bookmarks) {
                    for (int i = 0, bookmarksSize = bookmarks.size(); i < bookmarksSize; i++) {
                      Bookmark taggedAyah = bookmarks.get(i);
                      mImageView.highlightAyah(
                          taggedAyah.sura, taggedAyah.ayah, HighlightType.BOOKMARK);
                    }

                    if (mCoordinatesData == null) {
                      if (mCurrentTask != null && !(mCurrentTask instanceof QueryAyahCoordsTask)) {
                        mCurrentTask.cancel(true);
                        mCurrentTask = null;
                      }

                      if (mCurrentTask == null) {
                        mCurrentTask = new GetAyahCoordsTask(getActivity()).execute(pageNumber);
                      }
                    } else {
                      mImageView.invalidate();
                    }
                  }

                  @Override
                  public void onError(Throwable e) {}

                  @Override
                  public void onComplete() {}
                }));
  }