docs: private void configureRecyclerViewScrollEvent() {
          getRecyclerView().addOnScrollListener(new RecyclerView.OnScrollListener() {
              @Override
              public void onScrolled(@NonNull final RecyclerView recyclerView, final int dx, final int dy) {
                  super.onScrolled(recyclerView, dx, dy);
                  recyclerView.post(new Runnable() {
                      @Override
                      public void run() {
                          enhanceFAB(getFab(), dx, dy);
                          onViewScrolled(recyclerView, dx, dy);
                          onViewScrolledToEnd(recyclerView, dx, dy);
                      }
                  });
              }
  
              @Override
              public void onScrollStateChanged(@NonNull final RecyclerView recyclerView, final int newState) {
                  super.onScrollStateChanged(recyclerView, newState);
                  recyclerView.post(new Runnable() {
                      @Override
                      public void run() {
                          lastState = newState;
                          onViewScrollStateChanged(recyclerView, newState);
                          if (newState == SCROLL_STATE_IDLE) {
                              if (checkViewScrolledToFirst()) {
                                  onViewScrolledToFirst(recyclerView);
                              }
                              if (checkViewScrolledToLast()) {
                                  onViewScrolledToLast(recyclerView);
                              }
                              synchronized (lockEOL) {
                                  if (lockEOL.get()) {
                                      lockEOL.set(!lockEOL.get());
                                  }
                              }
                          }
                      }
                  });
              }
          });
      }