code: protected boolean addChild(final Widget child,
                                 final GVRSceneObject childRootSceneObject, final int index,
                                 boolean preventLayout) {
          final boolean added = addChildInner(child, childRootSceneObject, index);
          Log.d(Log.SUBSYSTEM.WIDGET, TAG, "addChild [%s] %b", child, added);
          if (added) {
              onTransformChanged();
              if (!preventLayout) {
                  invalidateAllLayouts();
                  requestLayout();
              }
          }
          return added;
      }
docs: Add another {@link Widget} as a child of this one.
  <p>
  A {@link GVRSceneObject} other than the one directly managed by the child
  {@code Widget} can be specified as the child's root. This is useful in
  cases where the parent object needs to insert additional scene objects
  between the child and its parent.
  <p>
  <b>NOTE:</b> it is the responsibility of the caller to keep track of the
  relationship between the child {@code Widget} and the alternative root
  scene object.
  
  @param child
  The {@code Widget} to add as a child.
  @param childRootSceneObject
  The root {@link GVRSceneObject} of the child.
  @param index
  Position at which to add the child. Pass -1 to add at end.
  @param preventLayout
  The {@code Widget} whether to call layout().
  @return {@code True} if {@code child} was added; {@code false} if
  {@code child} was previously added to this instance.