/**
   * applies the views state to the view.
   *
   * @return true if viewstate has been applied, otherwise false (i.e. activity / fragment is
   *     starting for the first time)
   */
  public boolean applyViewState() {

    MvpViewStateViewGroupDelegateCallback delegate =
        (MvpViewStateViewGroupDelegateCallback) delegateCallback;

    if (applyViewState) {
      delegate.setRestoringViewState(true);
      delegate.getViewState().apply(delegate.getMvpView(), delegate.isRetainInstance());
      delegate.setRestoringViewState(false);
      delegate.onViewStateInstanceRestored(delegate.isRetainInstance());
      return true;
    }

    delegate.onNewViewStateInstance();
    return false;
  }