docs: private boolean scrollAndFocus(int directionY, int top, int bottom, int directionX, int left, int right) {
          boolean handled = true;
          int height = getHeight();
          int containerTop = getScrollY();
          int containerBottom = containerTop + height;
          boolean up = directionY == View.FOCUS_UP;
          int width = getWidth();
          int containerLeft = getScrollX();
          int containerRight = containerLeft + width;
          boolean leftwards = directionX == View.FOCUS_UP;
          View newFocused = findFocusableViewInBounds(up, top, bottom, leftwards, left, right);
          if (newFocused == null) {
              newFocused = this;
          }
          if ((top >= containerTop && bottom <= containerBottom) || (left >= containerLeft && right <= containerRight)) {
              handled = false;
          } else {
              int deltaY = up ? (top - containerTop) : (bottom - containerBottom);
              int deltaX = leftwards ? (left - containerLeft) : (right - containerRight);
              doScroll(deltaX, deltaY);
          }
          if (newFocused != findFocus() && newFocused.requestFocus(directionY)) {
              mTwoDScrollViewMovedFocus = true;
              mTwoDScrollViewMovedFocus = false;
          }
          return handled;
      }