code: protected void updateState() {
          final WidgetState.State state;
          if (useParentState() || getFollowParentState()) {
              state = mParent.getState();
          } else {
              state = getState();
          }
  
          Log.d(Log.SUBSYSTEM.WIDGET, TAG, "updateState(): %s for '%s'", state, getName());
          if (!mLevelInfo.isEmpty() && mLevel >= 0) {
              mLevelInfo.get(mLevel).setState(state);
          }
  
          boolean updateChildren = isInFollowStateGroup()
                  || getChildrenFollowState();
          for (Widget child : getChildren()) {
              if (updateChildren || child.getFollowParentState()) {
                  child.updateState();
              }
          }
      }
docs: external consumption