public void moveToFullMode(int viewIdForFullMode) {
   _on_full_mode = true;
   for (int i = 0; i < _renders.size(); i++) {
     RenderViewData d = _renders.valueAt(i);
     if (d._view_id != viewIdForFullMode) {
       String user = getParticipantByViewId(d._view_id);
       LogSdk.d(TAG, "pausing GLview " + d._view_id + " for user " + user);
       if (d._video_on) {
         ConferenceCore.instance().receiveParticipantVideoOff(user);
         LogSdk.d(TAG, "send turn video Off for user " + user);
       }
       d.isFullMode = false;
     } else {
       d.isFullMode = true;
     }
   }
 }
  public void moveToMultiMode(int viewIdForFullMode) {
    _on_full_mode = false;
    int numActiveRenders = 0;
    for (int i = 0; i < _renders.size(); i++) {
      RenderViewData d = _renders.valueAt(i);
      if (d._view_id != viewIdForFullMode) {
        d.isFullMode = false;
        if (d._video_on && d._user != null) {
          numActiveRenders++;
          ConferenceCore.instance().receiveParticipantVideoOn(d._user);
          LogSdk.d(TAG, "resume GLview " + d._view_id + " for user " + d._user);
        }
      } else {
        numActiveRenders++;
      }
    }

    if (numActiveRenders < ParticipantsManager.MAX_ACTIVE_PARTICIPANTS_IN_CALL
        && _users.size() > numActiveRenders) {
      fillEmptyRenders();
    }
  }
  public boolean removeParticipant(String sParticipantId) {
    boolean updateFullMode = false;
    if (!_users.containsKey(sParticipantId)) {
      LogSdk.e(TAG, "remove Participant failed! Participant " + sParticipantId + " not found");
      return updateFullMode;
    }
    Integer view_id = _users.get(sParticipantId).getViewId();
    if (view_id == -1) {
      LogSdk.d(TAG, "Participant " + sParticipantId + " is not connected to any GLView");
    } else {
      RenderViewData d = _renders.get(view_id);
      updateFullMode = d.isFullMode;
      d._render.disconnect();
      d._video_on = false;
      d._user = null;
    }
    _users.remove(sParticipantId);

    if (updateFullMode) {
      _on_full_mode = true;
      for (int i = 0; i < _renders.size(); i++) {
        RenderViewData d = _renders.valueAt(i);
        if (d._view_id != view_id) {
          String user = getParticipantByViewId(d._view_id);
          LogSdk.d(TAG, "pausing GLview " + d._view_id + " for user " + user);
          if (d._video_on) {
            ConferenceCore.instance().receiveParticipantVideoOff(user);
            LogSdk.d(TAG, "send turn video Off for user " + user);
          }
        } else {
          d.isFullMode = false;
        }
      }
    }
    LogSdk.d(TAG, "remove Participant " + sParticipantId + " GLView " + view_id + " is free.");
    return updateFullMode;
  }
  public boolean removeParticipant(String sParticipantId) {
    boolean updateFullMode = false;
    if (!_users.containsKey(sParticipantId)) {
      LogSdk.e(TAG, "remove Participant failed! Participant " + sParticipantId + " not found");
      return updateFullMode;
    }
    Integer view_id = _users.get(sParticipantId).getViewId();
    if (view_id == -1) {
      LogSdk.d(TAG, "Participant " + sParticipantId + " is not connected to any GLView");
    } else {
      RenderViewData d = _renders.get(view_id);
      updateFullMode = d.isFullMode;
      d.isFullMode = false;
      d._render.disconnect();
      d._video_on = false;
      d._user = null;
    }
    _users.remove(sParticipantId);

    if (updateFullMode) moveToMultiMode(-1);

    LogSdk.d(TAG, "remove Participant " + sParticipantId + " GLView " + view_id + " is free.");
    return updateFullMode;
  }