docs: protected int computeScrollDeltaToGetChildRectOnScreen(Rect rect) {
          if (getChildCount() == 0) return 0;
          int height = getHeight();
          int screenTop = getScrollY();
          int screenBottom = screenTop + height;
          int fadingEdge = getVerticalFadingEdgeLength();
          // leave room for top fading edge as long as rect isn't at very top
          if (rect.top > 0) {
              screenTop += fadingEdge;
          }
  
          // leave room for bottom fading edge as long as rect isn't at very bottom
          if (rect.bottom < getChildAt(0).getHeight()) {
              screenBottom -= fadingEdge;
          }
          int scrollYDelta = 0;
          if (rect.bottom > screenBottom && rect.top > screenTop) {
              // need to move down to get it in view: move down just enough so
              // that the entire rectangle is in view (or at least the first
              // screen size chunk).
              if (rect.height() > height) {
                  // just enough to get screen size chunk on
                  scrollYDelta += (rect.top - screenTop);
              } else {
                  // get entire rect at bottom of screen
                  scrollYDelta += (rect.bottom - screenBottom);
              }
  
              // make sure we aren't scrolling beyond the end of our content
              int bottom = getChildAt(0).getBottom();
              int distanceToBottom = bottom - screenBottom;
              scrollYDelta = Math.min(scrollYDelta, distanceToBottom);
  
          } else if (rect.top < screenTop && rect.bottom < screenBottom) {
              // need to move up to get it in view: move up just enough so that
              // entire rectangle is in view (or at least the first screen
              // size chunk of it).
  
              if (rect.height() > height) {
                  // screen size chunk
                  scrollYDelta -= (screenBottom - rect.bottom);
              } else {
                  // entire rect at top
                  scrollYDelta -= (screenTop - rect.top);
              }
  
              // make sure we aren't scrolling any further than the top our content
              scrollYDelta = Math.max(scrollYDelta, -getScrollY());
          }
          return scrollYDelta;
      }