docs: @Override
      protected int scrollInternalBy(int dy, RecyclerView.Recycler recycler, RecyclerView.State state) {
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
              Trace.beginSection(TRACE_SCROLL);
          }
  
          runPreLayout(recycler, state);
  
          int scrolled = 0;
          try {
              if (!mNoScrolling) {
                  scrolled = super.scrollInternalBy(dy, recycler, state);
              } else {
                  if (getChildCount() == 0 || dy == 0) {
                      return 0;
                  }
  
                  mLayoutState.mRecycle = true;
                  ensureLayoutStateExpose();
                  final int layoutDirection = dy > 0 ? LayoutState.LAYOUT_END : LayoutState.LAYOUT_START;
                  final int absDy = Math.abs(dy);
                  updateLayoutStateExpose(layoutDirection, absDy, true, state);
                  final int freeScroll = mLayoutState.mScrollingOffset;
  
                  final int consumed = freeScroll + fill(recycler, mLayoutState, state, false);
                  if (consumed < 0) {
                      return 0;
                  }
                  scrolled = absDy > consumed ? layoutDirection * consumed : dy;
              }
          } catch (Exception e) {
              Log.w(TAG, Log.getStackTraceString(e), e);
              if (sDebuggable)
                  throw e;
  
          } finally {
              runPostLayout(recycler, state, scrolled);
          }
  
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
              Trace.endSection();
          }
  
          return scrolled;
      }