docs: public boolean measureUntilFull(int centerDataIndex, final Collection<Widget> measuredChildren) {
          if (centerDataIndex == -1) {
              centerDataIndex = 0;
          }
  
          boolean firstChildInBoundsFound = false;
  
          Log.d(Log.SUBSYSTEM.LAYOUT, TAG, "measureUntilFull: centerDataIndex view = %d mContainer.size() = %d",
                  centerDataIndex, mContainer.size());
  
          for (int i = centerDataIndex; i >= 0 && i < mContainer.size();) {
              boolean inBounds = true;
              boolean childChanged = !isChildMeasured(i);
              Widget view = childChanged ? measureChild(i) : mContainer.get(i);
  
              if (!mViewPort.isClippingEnabled()) {
                  if (childChanged) {
                      postMeasurement();
                  }
              } else {
                  inBounds = inViewPort(i);
                  if (!inBounds) {
                      if (childChanged) {
                          invalidate(i);
                      }
                      childChanged = !childChanged;
                  }
              }
  
              Log.d(Log.SUBSYSTEM.LAYOUT, TAG, "measureUntilFull: measureChild view = %s " +
                              "isBounds = %b  dataIndex = %d childChanged = %b, viewport = %s",
                      view == null ? "<null>" : view.getName(), inBounds,
                      i, childChanged, mViewPort);
  
              if (view != null && inBounds) {
                  if (measuredChildren != null) {
                      measuredChildren.add(view);
                  }
              }
  
              boolean directionIsChanged = changeDirection(i, centerDataIndex, inBounds);
  
              i = getNextIndex(i, centerDataIndex, directionIsChanged);
  
              firstChildInBoundsFound = firstChildInBoundsFound || inBounds;
  
              if (directionIsChanged) {
                  inBounds = true;
              }
  
              Log.d(Log.SUBSYSTEM.LAYOUT, TAG, "measureUntilFull: directionIsChanged = %b inBounds = %b",
                      directionIsChanged, inBounds);
  
              if (mViewPort.isClippingEnabled() && childChanged && inBounds) {
                  inBounds = postMeasurement();
              }
  
              if (firstChildInBoundsFound && !inBounds) {
                  break;
              }
          }
          return true;
      }