1e1c44949Sopenharmony_ci/* 2e1c44949Sopenharmony_ci * Copyright (C) 2021 Huawei Device Co., Ltd. 3e1c44949Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4e1c44949Sopenharmony_ci * you may not use this file except in compliance with the License. 5e1c44949Sopenharmony_ci * You may obtain a copy of the License at 6e1c44949Sopenharmony_ci * 7e1c44949Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8e1c44949Sopenharmony_ci * 9e1c44949Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10e1c44949Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11e1c44949Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12e1c44949Sopenharmony_ci * See the License for the specific language governing permissions and 13e1c44949Sopenharmony_ci * limitations under the License. 14e1c44949Sopenharmony_ci */ 15e1c44949Sopenharmony_ci 16e1c44949Sopenharmony_ci#include "video_call_state.h" 17e1c44949Sopenharmony_ci 18e1c44949Sopenharmony_ci#include "telephony_errors.h" 19e1c44949Sopenharmony_ci#include "telephony_log_wrapper.h" 20e1c44949Sopenharmony_ci#include "call_manager_errors.h" 21e1c44949Sopenharmony_ci#include "ims_call.h" 22e1c44949Sopenharmony_ci 23e1c44949Sopenharmony_cinamespace OHOS { 24e1c44949Sopenharmony_cinamespace Telephony { 25e1c44949Sopenharmony_ciVideoCallState::VideoCallState(sptr<NetCallBase> callPtr) 26e1c44949Sopenharmony_ci : call_(callPtr), updateStatus_(VideoUpdateStatus::STATUS_NONE) 27e1c44949Sopenharmony_ci{} 28e1c44949Sopenharmony_ci 29e1c44949Sopenharmony_cibool VideoCallState::IsCallSupportVideoCall() 30e1c44949Sopenharmony_ci{ 31e1c44949Sopenharmony_ci if (call_ == nullptr) { 32e1c44949Sopenharmony_ci TELEPHONY_LOGE("unexpected null pointer."); 33e1c44949Sopenharmony_ci return false; 34e1c44949Sopenharmony_ci } 35e1c44949Sopenharmony_ci sptr<IMSCall> netCall = static_cast<IMSCall *>(call_.GetRefPtr()); 36e1c44949Sopenharmony_ci return netCall->IsSupportVideoCall(); 37e1c44949Sopenharmony_ci} 38e1c44949Sopenharmony_ci 39e1c44949Sopenharmony_civoid VideoCallState::SetVideoUpdateStatus(VideoUpdateStatus status) 40e1c44949Sopenharmony_ci{ 41e1c44949Sopenharmony_ci updateStatus_ = status; 42e1c44949Sopenharmony_ci} 43e1c44949Sopenharmony_ci 44e1c44949Sopenharmony_ciVideoUpdateStatus VideoCallState::GetVideoUpdateStatus() 45e1c44949Sopenharmony_ci{ 46e1c44949Sopenharmony_ci return updateStatus_; 47e1c44949Sopenharmony_ci} 48e1c44949Sopenharmony_ci 49e1c44949Sopenharmony_ciint32_t VideoCallState::SwitchCallVideoState(ImsCallMode mode) 50e1c44949Sopenharmony_ci{ 51e1c44949Sopenharmony_ci if (call_ == nullptr) { 52e1c44949Sopenharmony_ci TELEPHONY_LOGE("unexpected null pointer."); 53e1c44949Sopenharmony_ci return TELEPHONY_ERR_LOCAL_PTR_NULL; 54e1c44949Sopenharmony_ci } 55e1c44949Sopenharmony_ci sptr<IMSCall> netCall = static_cast<IMSCall *>(call_.GetRefPtr()); 56e1c44949Sopenharmony_ci netCall->SwitchVideoState(mode); 57e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 58e1c44949Sopenharmony_ci} 59e1c44949Sopenharmony_ci 60e1c44949Sopenharmony_ciint32_t VideoCallState::DispatchUpdateVideoRequest(ImsCallMode mode) 61e1c44949Sopenharmony_ci{ 62e1c44949Sopenharmony_ci if (call_ == nullptr) { 63e1c44949Sopenharmony_ci TELEPHONY_LOGE("unexpected null pointer."); 64e1c44949Sopenharmony_ci return TELEPHONY_ERR_LOCAL_PTR_NULL; 65e1c44949Sopenharmony_ci } 66e1c44949Sopenharmony_ci return call_->SendUpdateCallMediaModeRequest(mode); 67e1c44949Sopenharmony_ci} 68e1c44949Sopenharmony_ci 69e1c44949Sopenharmony_ciint32_t VideoCallState::DispatchUpdateVideoResponse(ImsCallMode mode) 70e1c44949Sopenharmony_ci{ 71e1c44949Sopenharmony_ci if (call_ == nullptr) { 72e1c44949Sopenharmony_ci TELEPHONY_LOGE("unexpected null pointer."); 73e1c44949Sopenharmony_ci return TELEPHONY_ERR_LOCAL_PTR_NULL; 74e1c44949Sopenharmony_ci } 75e1c44949Sopenharmony_ci return call_->SendUpdateCallMediaModeResponse(mode); 76e1c44949Sopenharmony_ci} 77e1c44949Sopenharmony_ci 78e1c44949Sopenharmony_ciint32_t VideoCallState::DispatchReportVideoCallInfo(CallMediaModeInfo &imsCallModeInfo) 79e1c44949Sopenharmony_ci{ 80e1c44949Sopenharmony_ci if (call_ == nullptr) { 81e1c44949Sopenharmony_ci TELEPHONY_LOGE("unexpected null pointer."); 82e1c44949Sopenharmony_ci return TELEPHONY_ERR_LOCAL_PTR_NULL; 83e1c44949Sopenharmony_ci } 84e1c44949Sopenharmony_ci return call_->ReportImsCallModeInfo(imsCallModeInfo); 85e1c44949Sopenharmony_ci} 86e1c44949Sopenharmony_ci 87e1c44949Sopenharmony_cisptr<VideoCallState> VideoCallState::GetCallVideoState(ImsCallMode mode) 88e1c44949Sopenharmony_ci{ 89e1c44949Sopenharmony_ci if (call_ == nullptr) { 90e1c44949Sopenharmony_ci TELEPHONY_LOGE("unexpected null pointer."); 91e1c44949Sopenharmony_ci return nullptr; 92e1c44949Sopenharmony_ci } 93e1c44949Sopenharmony_ci sptr<IMSCall> netCall = static_cast<IMSCall *>(call_.GetRefPtr()); 94e1c44949Sopenharmony_ci return netCall->GetCallVideoState(mode); 95e1c44949Sopenharmony_ci} 96e1c44949Sopenharmony_ci 97e1c44949Sopenharmony_ciAudioOnlyState::AudioOnlyState(sptr<NetCallBase> callPtr) : VideoCallState(callPtr) {} 98e1c44949Sopenharmony_ci 99e1c44949Sopenharmony_ciint32_t AudioOnlyState::SendUpdateCallMediaModeRequest(ImsCallMode mode) 100e1c44949Sopenharmony_ci{ 101e1c44949Sopenharmony_ci int ret = TELEPHONY_SUCCESS; 102e1c44949Sopenharmony_ci VideoUpdateStatus status = GetVideoUpdateStatus(); 103e1c44949Sopenharmony_ci TELEPHONY_LOGI("AudioOnlyState send update video request. mode:%{public}d, status %{public}d", mode, status); 104e1c44949Sopenharmony_ci switch (mode) { 105e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_SEND_ONLY: 106e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_RECEIVE_ONLY: 107e1c44949Sopenharmony_ci break; 108e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_AUDIO_ONLY: 109e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_VIDEO_PAUSED: 110e1c44949Sopenharmony_ci TELEPHONY_LOGE("illegal media type."); 111e1c44949Sopenharmony_ci ret = CALL_ERR_VIDEO_ILLEAGAL_SCENARIO; 112e1c44949Sopenharmony_ci break; 113e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_SEND_RECEIVE: 114e1c44949Sopenharmony_ci if (!IsCallSupportVideoCall()) { 115e1c44949Sopenharmony_ci TELEPHONY_LOGE("call not support video, end."); 116e1c44949Sopenharmony_ci return CALL_ERR_VIDEO_NOT_SUPPORTED; 117e1c44949Sopenharmony_ci } 118e1c44949Sopenharmony_ci if (status != VideoUpdateStatus::STATUS_NONE) { 119e1c44949Sopenharmony_ci TELEPHONY_LOGE("update is in progress. no need"); 120e1c44949Sopenharmony_ci return CALL_ERR_VIDEO_IN_PROGRESS; 121e1c44949Sopenharmony_ci } 122e1c44949Sopenharmony_ci ret = DispatchUpdateVideoRequest(mode); 123e1c44949Sopenharmony_ci if (ret != TELEPHONY_SUCCESS) { 124e1c44949Sopenharmony_ci TELEPHONY_LOGE("error occur when send updateRequest to call"); 125e1c44949Sopenharmony_ci return ret; 126e1c44949Sopenharmony_ci } 127e1c44949Sopenharmony_ci SetVideoUpdateStatus(VideoUpdateStatus::STATUS_SEND_REQUEST); 128e1c44949Sopenharmony_ci break; 129e1c44949Sopenharmony_ci default: 130e1c44949Sopenharmony_ci TELEPHONY_LOGE("unknown call media type."); 131e1c44949Sopenharmony_ci return CALL_ERR_VIDEO_ILLEGAL_MEDIA_TYPE; 132e1c44949Sopenharmony_ci } 133e1c44949Sopenharmony_ci return ret; 134e1c44949Sopenharmony_ci} 135e1c44949Sopenharmony_ci 136e1c44949Sopenharmony_ciint32_t AudioOnlyState::RecieveUpdateCallMediaModeRequest(CallMediaModeInfo &imsCallModeInfo) 137e1c44949Sopenharmony_ci{ 138e1c44949Sopenharmony_ci int32_t ret = TELEPHONY_SUCCESS; 139e1c44949Sopenharmony_ci VideoUpdateStatus status = GetVideoUpdateStatus(); 140e1c44949Sopenharmony_ci TELEPHONY_LOGI("AudioOnlyState receive update video request. mode:%{public}d, status %{public}d", 141e1c44949Sopenharmony_ci imsCallModeInfo.callMode, status); 142e1c44949Sopenharmony_ci switch (imsCallModeInfo.callMode) { 143e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_AUDIO_ONLY: 144e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_VIDEO_PAUSED: 145e1c44949Sopenharmony_ci TELEPHONY_LOGI("invalid media state request."); 146e1c44949Sopenharmony_ci ret = CALL_ERR_VIDEO_ILLEAGAL_SCENARIO; 147e1c44949Sopenharmony_ci break; 148e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_RECEIVE_ONLY: 149e1c44949Sopenharmony_ci if (status != VideoUpdateStatus::STATUS_NONE) { 150e1c44949Sopenharmony_ci TELEPHONY_LOGE("video update in progress"); 151e1c44949Sopenharmony_ci return CALL_ERR_VIDEO_IN_PROGRESS; 152e1c44949Sopenharmony_ci } 153e1c44949Sopenharmony_ci // notify app to accept or refuse, assume always accept here 154e1c44949Sopenharmony_ci (void)DispatchReportVideoCallInfo(imsCallModeInfo); 155e1c44949Sopenharmony_ci SetVideoUpdateStatus(VideoUpdateStatus::STATUS_RECV_REQUEST); 156e1c44949Sopenharmony_ci break; 157e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_SEND_ONLY: 158e1c44949Sopenharmony_ci TELEPHONY_LOGI("receive request."); 159e1c44949Sopenharmony_ci break; 160e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_SEND_RECEIVE: 161e1c44949Sopenharmony_ci if (!IsCallSupportVideoCall()) { 162e1c44949Sopenharmony_ci TELEPHONY_LOGE("not support video, refuse"); 163e1c44949Sopenharmony_ci (void)DispatchUpdateVideoResponse(ImsCallMode::CALL_MODE_AUDIO_ONLY); 164e1c44949Sopenharmony_ci return CALL_ERR_VIDEO_ILLEAGAL_SCENARIO; 165e1c44949Sopenharmony_ci } 166e1c44949Sopenharmony_ci if (status != VideoUpdateStatus::STATUS_NONE) { 167e1c44949Sopenharmony_ci TELEPHONY_LOGE("video update in progress"); 168e1c44949Sopenharmony_ci return CALL_ERR_VIDEO_IN_PROGRESS; 169e1c44949Sopenharmony_ci } 170e1c44949Sopenharmony_ci // notify app to accept or refuse, assume always accept here 171e1c44949Sopenharmony_ci (void)DispatchReportVideoCallInfo(imsCallModeInfo); 172e1c44949Sopenharmony_ci SetVideoUpdateStatus(VideoUpdateStatus::STATUS_RECV_REQUEST); 173e1c44949Sopenharmony_ci break; 174e1c44949Sopenharmony_ci default: 175e1c44949Sopenharmony_ci TELEPHONY_LOGE("unknown call media type."); 176e1c44949Sopenharmony_ci ret = CALL_ERR_VIDEO_ILLEGAL_MEDIA_TYPE; 177e1c44949Sopenharmony_ci break; 178e1c44949Sopenharmony_ci } 179e1c44949Sopenharmony_ci return ret; 180e1c44949Sopenharmony_ci} 181e1c44949Sopenharmony_ci 182e1c44949Sopenharmony_ciint32_t AudioOnlyState::SendUpdateCallMediaModeResponse(ImsCallMode mode) 183e1c44949Sopenharmony_ci{ 184e1c44949Sopenharmony_ci int32_t ret = TELEPHONY_SUCCESS; 185e1c44949Sopenharmony_ci VideoUpdateStatus status = GetVideoUpdateStatus(); 186e1c44949Sopenharmony_ci TELEPHONY_LOGI("AudioOnlyState send update video response. mode:%{public}d, status %{public}d", mode, status); 187e1c44949Sopenharmony_ci switch (mode) { 188e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_AUDIO_ONLY: 189e1c44949Sopenharmony_ci if (!IsCallSupportVideoCall()) { 190e1c44949Sopenharmony_ci TELEPHONY_LOGE("not support video, refuse"); 191e1c44949Sopenharmony_ci (void)DispatchUpdateVideoResponse(ImsCallMode::CALL_MODE_AUDIO_ONLY); 192e1c44949Sopenharmony_ci return CALL_ERR_VIDEO_ILLEAGAL_SCENARIO; 193e1c44949Sopenharmony_ci } 194e1c44949Sopenharmony_ci if (status != VideoUpdateStatus::STATUS_RECV_REQUEST) { 195e1c44949Sopenharmony_ci TELEPHONY_LOGE("video update in progress"); 196e1c44949Sopenharmony_ci return CALL_ERR_VIDEO_IN_PROGRESS; 197e1c44949Sopenharmony_ci } 198e1c44949Sopenharmony_ci // notify app to accept or refuse, assume always accept here 199e1c44949Sopenharmony_ci (void)DispatchUpdateVideoResponse(ImsCallMode::CALL_MODE_AUDIO_ONLY); 200e1c44949Sopenharmony_ci SetVideoUpdateStatus(VideoUpdateStatus::STATUS_NONE); 201e1c44949Sopenharmony_ci break; 202e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_VIDEO_PAUSED: 203e1c44949Sopenharmony_ci TELEPHONY_LOGI("invalid media state request."); 204e1c44949Sopenharmony_ci ret = CALL_ERR_VIDEO_ILLEAGAL_SCENARIO; 205e1c44949Sopenharmony_ci break; 206e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_SEND_ONLY: 207e1c44949Sopenharmony_ci TELEPHONY_LOGI("receive request."); 208e1c44949Sopenharmony_ci break; 209e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_RECEIVE_ONLY: 210e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_SEND_RECEIVE: 211e1c44949Sopenharmony_ci if (!IsCallSupportVideoCall()) { 212e1c44949Sopenharmony_ci TELEPHONY_LOGE("not support video, refuse"); 213e1c44949Sopenharmony_ci (void)DispatchUpdateVideoResponse(ImsCallMode::CALL_MODE_AUDIO_ONLY); 214e1c44949Sopenharmony_ci return CALL_ERR_VIDEO_ILLEAGAL_SCENARIO; 215e1c44949Sopenharmony_ci } 216e1c44949Sopenharmony_ci if (status != VideoUpdateStatus::STATUS_RECV_REQUEST) { 217e1c44949Sopenharmony_ci TELEPHONY_LOGE("video update in progress"); 218e1c44949Sopenharmony_ci return CALL_ERR_VIDEO_IN_PROGRESS; 219e1c44949Sopenharmony_ci } 220e1c44949Sopenharmony_ci // notify app to accept or refuse, assume always accept here 221e1c44949Sopenharmony_ci (void)DispatchUpdateVideoResponse(ImsCallMode::CALL_MODE_SEND_RECEIVE); 222e1c44949Sopenharmony_ci (void)SwitchCallVideoState(ImsCallMode::CALL_MODE_SEND_RECEIVE); 223e1c44949Sopenharmony_ci SetVideoUpdateStatus(VideoUpdateStatus::STATUS_NONE); 224e1c44949Sopenharmony_ci break; 225e1c44949Sopenharmony_ci default: 226e1c44949Sopenharmony_ci TELEPHONY_LOGE("unknown call media type."); 227e1c44949Sopenharmony_ci ret = CALL_ERR_VIDEO_ILLEGAL_MEDIA_TYPE; 228e1c44949Sopenharmony_ci break; 229e1c44949Sopenharmony_ci } 230e1c44949Sopenharmony_ci return ret; 231e1c44949Sopenharmony_ci} 232e1c44949Sopenharmony_ci 233e1c44949Sopenharmony_ciint32_t AudioOnlyState::ReceiveUpdateCallMediaModeResponse(CallMediaModeInfo &imsCallModeInfo) 234e1c44949Sopenharmony_ci{ 235e1c44949Sopenharmony_ci int32_t ret = TELEPHONY_SUCCESS; 236e1c44949Sopenharmony_ci VideoUpdateStatus status = GetVideoUpdateStatus(); 237e1c44949Sopenharmony_ci TELEPHONY_LOGI( 238e1c44949Sopenharmony_ci "AudioOnlyState receive response, mode %{public}d, status %{public}d", imsCallModeInfo.callMode, status); 239e1c44949Sopenharmony_ci switch (imsCallModeInfo.callMode) { 240e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_SEND_RECEIVE: 241e1c44949Sopenharmony_ci if (status != VideoUpdateStatus::STATUS_SEND_REQUEST) { 242e1c44949Sopenharmony_ci return CALL_ERR_VIDEO_ILLEAGAL_SCENARIO; 243e1c44949Sopenharmony_ci } 244e1c44949Sopenharmony_ci (void)SwitchCallVideoState(ImsCallMode::CALL_MODE_SEND_RECEIVE); 245e1c44949Sopenharmony_ci SetVideoUpdateStatus(VideoUpdateStatus::STATUS_NONE); 246e1c44949Sopenharmony_ci // notify app to accept or refuse, assume always accept here 247e1c44949Sopenharmony_ci DispatchReportVideoCallInfo(imsCallModeInfo); 248e1c44949Sopenharmony_ci break; 249e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_AUDIO_ONLY: 250e1c44949Sopenharmony_ci SetVideoUpdateStatus(VideoUpdateStatus::STATUS_NONE); 251e1c44949Sopenharmony_ci // notify app to accept or refuse, assume always accept here 252e1c44949Sopenharmony_ci DispatchReportVideoCallInfo(imsCallModeInfo); 253e1c44949Sopenharmony_ci break; 254e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_RECEIVE_ONLY: 255e1c44949Sopenharmony_ci if (status != VideoUpdateStatus::STATUS_RECV_REQUEST) { 256e1c44949Sopenharmony_ci return CALL_ERR_VIDEO_ILLEAGAL_SCENARIO; 257e1c44949Sopenharmony_ci } 258e1c44949Sopenharmony_ci (void)SwitchCallVideoState(ImsCallMode::CALL_MODE_RECEIVE_ONLY); 259e1c44949Sopenharmony_ci SetVideoUpdateStatus(VideoUpdateStatus::STATUS_NONE); 260e1c44949Sopenharmony_ci // notify app to accept or refuse, assume always accept here 261e1c44949Sopenharmony_ci DispatchReportVideoCallInfo(imsCallModeInfo); 262e1c44949Sopenharmony_ci break; 263e1c44949Sopenharmony_ci default: 264e1c44949Sopenharmony_ci TELEPHONY_LOGI("other media type, ignored"); 265e1c44949Sopenharmony_ci break; 266e1c44949Sopenharmony_ci } 267e1c44949Sopenharmony_ci return ret; 268e1c44949Sopenharmony_ci} 269e1c44949Sopenharmony_ci 270e1c44949Sopenharmony_ciVideoSendState::VideoSendState(sptr<NetCallBase> callPtr) : VideoCallState(callPtr) {} 271e1c44949Sopenharmony_ci 272e1c44949Sopenharmony_ciint32_t VideoSendState::SendUpdateCallMediaModeRequest(ImsCallMode mode) 273e1c44949Sopenharmony_ci{ 274e1c44949Sopenharmony_ci TELEPHONY_LOGI("VideoSendState send update video request. mode:%{public}d", mode); 275e1c44949Sopenharmony_ci int32_t ret = TELEPHONY_SUCCESS; 276e1c44949Sopenharmony_ci switch (mode) { 277e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_AUDIO_ONLY: 278e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_VIDEO_PAUSED: 279e1c44949Sopenharmony_ci ret = DispatchUpdateVideoRequest(mode); 280e1c44949Sopenharmony_ci if (ret != TELEPHONY_SUCCESS) { 281e1c44949Sopenharmony_ci TELEPHONY_LOGE("error occurs when dispatch request"); 282e1c44949Sopenharmony_ci return ret; 283e1c44949Sopenharmony_ci } 284e1c44949Sopenharmony_ci ret = SwitchCallVideoState(mode); // switch call video state 285e1c44949Sopenharmony_ci if (ret != TELEPHONY_SUCCESS) { 286e1c44949Sopenharmony_ci TELEPHONY_LOGE("error occurs when switch call state"); 287e1c44949Sopenharmony_ci return ret; 288e1c44949Sopenharmony_ci } 289e1c44949Sopenharmony_ci SetVideoUpdateStatus(VideoUpdateStatus::STATUS_NONE); 290e1c44949Sopenharmony_ci break; 291e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_RECEIVE_ONLY: 292e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_SEND_ONLY: 293e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_SEND_RECEIVE: 294e1c44949Sopenharmony_ci TELEPHONY_LOGE("already in progress."); 295e1c44949Sopenharmony_ci ret = CALL_ERR_VIDEO_IN_PROGRESS; 296e1c44949Sopenharmony_ci break; 297e1c44949Sopenharmony_ci default: 298e1c44949Sopenharmony_ci TELEPHONY_LOGE("unknown media type."); 299e1c44949Sopenharmony_ci ret = CALL_ERR_VIDEO_ILLEGAL_MEDIA_TYPE; 300e1c44949Sopenharmony_ci break; 301e1c44949Sopenharmony_ci } 302e1c44949Sopenharmony_ci return ret; 303e1c44949Sopenharmony_ci} 304e1c44949Sopenharmony_ci 305e1c44949Sopenharmony_ciint32_t VideoSendState::RecieveUpdateCallMediaModeRequest(CallMediaModeInfo &imsCallModeInfo) 306e1c44949Sopenharmony_ci{ 307e1c44949Sopenharmony_ci int32_t ret = TELEPHONY_SUCCESS; 308e1c44949Sopenharmony_ci VideoUpdateStatus status = GetVideoUpdateStatus(); 309e1c44949Sopenharmony_ci TELEPHONY_LOGI("VideoSendState receive update video request. mode:%{public}d, status:%{public}d", 310e1c44949Sopenharmony_ci imsCallModeInfo.callMode, status); 311e1c44949Sopenharmony_ci switch (imsCallModeInfo.callMode) { 312e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_AUDIO_ONLY: 313e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_VIDEO_PAUSED: 314e1c44949Sopenharmony_ci ret = SwitchCallVideoState(imsCallModeInfo.callMode); 315e1c44949Sopenharmony_ci if (ret != TELEPHONY_SUCCESS) { 316e1c44949Sopenharmony_ci TELEPHONY_LOGE("error occurs when switch call state."); 317e1c44949Sopenharmony_ci return ret; 318e1c44949Sopenharmony_ci } 319e1c44949Sopenharmony_ci SetVideoUpdateStatus(VideoUpdateStatus::STATUS_NONE); 320e1c44949Sopenharmony_ci break; 321e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_RECEIVE_ONLY: 322e1c44949Sopenharmony_ci TELEPHONY_LOGE("invalid media state request."); 323e1c44949Sopenharmony_ci ret = CALL_ERR_VIDEO_ILLEAGAL_SCENARIO; 324e1c44949Sopenharmony_ci break; 325e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_SEND_ONLY: 326e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_SEND_RECEIVE: 327e1c44949Sopenharmony_ci if (status != VideoUpdateStatus::STATUS_NONE) { 328e1c44949Sopenharmony_ci TELEPHONY_LOGE("already in progress."); 329e1c44949Sopenharmony_ci ret = CALL_ERR_VIDEO_IN_PROGRESS; 330e1c44949Sopenharmony_ci } 331e1c44949Sopenharmony_ci break; 332e1c44949Sopenharmony_ci default: 333e1c44949Sopenharmony_ci TELEPHONY_LOGE("unknown media type."); 334e1c44949Sopenharmony_ci ret = CALL_ERR_VIDEO_ILLEGAL_MEDIA_TYPE; 335e1c44949Sopenharmony_ci break; 336e1c44949Sopenharmony_ci } 337e1c44949Sopenharmony_ci return ret; 338e1c44949Sopenharmony_ci} 339e1c44949Sopenharmony_ci 340e1c44949Sopenharmony_ciint32_t VideoSendState::SendUpdateCallMediaModeResponse(ImsCallMode mode) 341e1c44949Sopenharmony_ci{ 342e1c44949Sopenharmony_ci TELEPHONY_LOGI("VideoSendState send response ignored. mode %{public}d", mode); 343e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 344e1c44949Sopenharmony_ci} 345e1c44949Sopenharmony_ci 346e1c44949Sopenharmony_ciint32_t VideoSendState::ReceiveUpdateCallMediaModeResponse(CallMediaModeInfo &imsCallModeInfo) 347e1c44949Sopenharmony_ci{ 348e1c44949Sopenharmony_ci int32_t ret = TELEPHONY_SUCCESS; 349e1c44949Sopenharmony_ci VideoUpdateStatus status = GetVideoUpdateStatus(); 350e1c44949Sopenharmony_ci TELEPHONY_LOGI("VideoSendState receive update video response. mode:%{public}d, status:%{public}d", 351e1c44949Sopenharmony_ci imsCallModeInfo.callMode, status); 352e1c44949Sopenharmony_ci switch (imsCallModeInfo.callMode) { 353e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_AUDIO_ONLY: 354e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_VIDEO_PAUSED: 355e1c44949Sopenharmony_ci ret = SwitchCallVideoState(imsCallModeInfo.callMode); 356e1c44949Sopenharmony_ci if (ret != TELEPHONY_SUCCESS) { 357e1c44949Sopenharmony_ci TELEPHONY_LOGE("error occurs when switch call state"); 358e1c44949Sopenharmony_ci return ret; 359e1c44949Sopenharmony_ci } 360e1c44949Sopenharmony_ci // set previous state none 361e1c44949Sopenharmony_ci SetVideoUpdateStatus(VideoUpdateStatus::STATUS_NONE); 362e1c44949Sopenharmony_ci break; 363e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_SEND_ONLY: 364e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_RECEIVE_ONLY: 365e1c44949Sopenharmony_ci if (status != TELEPHONY_SUCCESS) { 366e1c44949Sopenharmony_ci TELEPHONY_LOGE("already in progress."); 367e1c44949Sopenharmony_ci ret = CALL_ERR_VIDEO_IN_PROGRESS; 368e1c44949Sopenharmony_ci } 369e1c44949Sopenharmony_ci break; 370e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_SEND_RECEIVE: 371e1c44949Sopenharmony_ci ret = DispatchUpdateVideoResponse(ImsCallMode::CALL_MODE_SEND_RECEIVE); 372e1c44949Sopenharmony_ci if (ret != TELEPHONY_SUCCESS) { 373e1c44949Sopenharmony_ci return ret; 374e1c44949Sopenharmony_ci } 375e1c44949Sopenharmony_ci ret = SwitchCallVideoState(imsCallModeInfo.callMode); 376e1c44949Sopenharmony_ci if (ret != TELEPHONY_SUCCESS) { 377e1c44949Sopenharmony_ci TELEPHONY_LOGE("error occurs when switch call"); 378e1c44949Sopenharmony_ci return ret; 379e1c44949Sopenharmony_ci } 380e1c44949Sopenharmony_ci if (GetCallVideoState(ImsCallMode::CALL_MODE_AUDIO_ONLY) != nullptr) { 381e1c44949Sopenharmony_ci GetCallVideoState(ImsCallMode::CALL_MODE_AUDIO_ONLY)-> 382e1c44949Sopenharmony_ci SetVideoUpdateStatus(VideoUpdateStatus::STATUS_NONE); 383e1c44949Sopenharmony_ci break; 384e1c44949Sopenharmony_ci } else { 385e1c44949Sopenharmony_ci TELEPHONY_LOGE("CALL_MODE_AUDIO_ONLY is nullptr"); 386e1c44949Sopenharmony_ci ret = CALL_ERR_VIDEO_ILLEGAL_MEDIA_TYPE; 387e1c44949Sopenharmony_ci break; 388e1c44949Sopenharmony_ci } 389e1c44949Sopenharmony_ci default: 390e1c44949Sopenharmony_ci TELEPHONY_LOGE("unknown media type."); 391e1c44949Sopenharmony_ci ret = CALL_ERR_VIDEO_ILLEGAL_MEDIA_TYPE; 392e1c44949Sopenharmony_ci break; 393e1c44949Sopenharmony_ci } 394e1c44949Sopenharmony_ci return ret; 395e1c44949Sopenharmony_ci} 396e1c44949Sopenharmony_ci 397e1c44949Sopenharmony_ciVideoReceiveState::VideoReceiveState(sptr<NetCallBase> callPtr) : VideoCallState(callPtr) {} 398e1c44949Sopenharmony_ci 399e1c44949Sopenharmony_ciint32_t VideoReceiveState::SendUpdateCallMediaModeRequest(ImsCallMode mode) 400e1c44949Sopenharmony_ci{ 401e1c44949Sopenharmony_ci int32_t ret = TELEPHONY_SUCCESS; 402e1c44949Sopenharmony_ci VideoUpdateStatus status = GetVideoUpdateStatus(); 403e1c44949Sopenharmony_ci TELEPHONY_LOGI("VideoReceiveState send update video request. mode:%{public}d, status:%{public}d", mode, status); 404e1c44949Sopenharmony_ci switch (mode) { 405e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_AUDIO_ONLY: 406e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_VIDEO_PAUSED: 407e1c44949Sopenharmony_ci ret = DispatchUpdateVideoRequest(mode); 408e1c44949Sopenharmony_ci if (ret != TELEPHONY_SUCCESS) { 409e1c44949Sopenharmony_ci TELEPHONY_LOGE("error occurs when dispatch request"); 410e1c44949Sopenharmony_ci return ret; 411e1c44949Sopenharmony_ci } 412e1c44949Sopenharmony_ci ret = SwitchCallVideoState(mode); 413e1c44949Sopenharmony_ci if (ret) { 414e1c44949Sopenharmony_ci TELEPHONY_LOGE("error occur when switch call state"); 415e1c44949Sopenharmony_ci return ret; 416e1c44949Sopenharmony_ci } 417e1c44949Sopenharmony_ci SetVideoUpdateStatus(VideoUpdateStatus::STATUS_NONE); 418e1c44949Sopenharmony_ci break; 419e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_SEND_ONLY: 420e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_RECEIVE_ONLY: 421e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_SEND_RECEIVE: 422e1c44949Sopenharmony_ci if (status != VideoUpdateStatus::STATUS_NONE) { 423e1c44949Sopenharmony_ci TELEPHONY_LOGE("already in progress."); 424e1c44949Sopenharmony_ci ret = CALL_ERR_VIDEO_IN_PROGRESS; 425e1c44949Sopenharmony_ci } 426e1c44949Sopenharmony_ci break; 427e1c44949Sopenharmony_ci default: 428e1c44949Sopenharmony_ci TELEPHONY_LOGE("unknown media type."); 429e1c44949Sopenharmony_ci ret = CALL_ERR_VIDEO_ILLEGAL_MEDIA_TYPE; 430e1c44949Sopenharmony_ci break; 431e1c44949Sopenharmony_ci } 432e1c44949Sopenharmony_ci return ret; 433e1c44949Sopenharmony_ci} 434e1c44949Sopenharmony_ci 435e1c44949Sopenharmony_ciint32_t VideoReceiveState::RecieveUpdateCallMediaModeRequest(CallMediaModeInfo &imsCallModeInfo) 436e1c44949Sopenharmony_ci{ 437e1c44949Sopenharmony_ci int32_t ret = TELEPHONY_SUCCESS; 438e1c44949Sopenharmony_ci VideoUpdateStatus status = GetVideoUpdateStatus(); 439e1c44949Sopenharmony_ci TELEPHONY_LOGI("VideoReceiveState receive update video request. mode:%{public}d, status:%{public}d", 440e1c44949Sopenharmony_ci imsCallModeInfo.callMode, status); 441e1c44949Sopenharmony_ci switch (imsCallModeInfo.callMode) { 442e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_AUDIO_ONLY: 443e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_VIDEO_PAUSED: 444e1c44949Sopenharmony_ci ret = SwitchCallVideoState(imsCallModeInfo.callMode); 445e1c44949Sopenharmony_ci if (ret != TELEPHONY_SUCCESS) { 446e1c44949Sopenharmony_ci return ret; 447e1c44949Sopenharmony_ci } 448e1c44949Sopenharmony_ci DispatchReportVideoCallInfo(imsCallModeInfo); 449e1c44949Sopenharmony_ci SetVideoUpdateStatus(VideoUpdateStatus::STATUS_NONE); 450e1c44949Sopenharmony_ci break; 451e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_SEND_ONLY: 452e1c44949Sopenharmony_ci break; 453e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_RECEIVE_ONLY: 454e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_SEND_RECEIVE: 455e1c44949Sopenharmony_ci if (status != VideoUpdateStatus::STATUS_NONE) { 456e1c44949Sopenharmony_ci TELEPHONY_LOGE("already in progress."); 457e1c44949Sopenharmony_ci ret = CALL_ERR_VIDEO_IN_PROGRESS; 458e1c44949Sopenharmony_ci } 459e1c44949Sopenharmony_ci DispatchReportVideoCallInfo(imsCallModeInfo); 460e1c44949Sopenharmony_ci SetVideoUpdateStatus(VideoUpdateStatus::STATUS_RECV_REQUEST); 461e1c44949Sopenharmony_ci break; 462e1c44949Sopenharmony_ci default: 463e1c44949Sopenharmony_ci TELEPHONY_LOGE("unknown media type."); 464e1c44949Sopenharmony_ci ret = CALL_ERR_VIDEO_ILLEGAL_MEDIA_TYPE; 465e1c44949Sopenharmony_ci break; 466e1c44949Sopenharmony_ci } 467e1c44949Sopenharmony_ci return ret; 468e1c44949Sopenharmony_ci} 469e1c44949Sopenharmony_ci 470e1c44949Sopenharmony_ciint32_t VideoReceiveState::SendUpdateCallMediaModeResponse(ImsCallMode mode) 471e1c44949Sopenharmony_ci{ 472e1c44949Sopenharmony_ci int32_t ret = TELEPHONY_SUCCESS; 473e1c44949Sopenharmony_ci VideoUpdateStatus status = GetVideoUpdateStatus(); 474e1c44949Sopenharmony_ci TELEPHONY_LOGI("VideoReceiveState send update video response. mode:%{public}d, status:%{public}d", mode, status); 475e1c44949Sopenharmony_ci switch (mode) { 476e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_AUDIO_ONLY: 477e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_VIDEO_PAUSED: 478e1c44949Sopenharmony_ci ret = SwitchCallVideoState(mode); 479e1c44949Sopenharmony_ci if (ret == TELEPHONY_SUCCESS) { 480e1c44949Sopenharmony_ci TELEPHONY_LOGE("error occur when switch call state"); 481e1c44949Sopenharmony_ci return ret; 482e1c44949Sopenharmony_ci } 483e1c44949Sopenharmony_ci SetVideoUpdateStatus(VideoUpdateStatus::STATUS_NONE); 484e1c44949Sopenharmony_ci break; 485e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_SEND_ONLY: 486e1c44949Sopenharmony_ci break; 487e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_RECEIVE_ONLY: 488e1c44949Sopenharmony_ci if (status != VideoUpdateStatus::STATUS_RECV_REQUEST) { 489e1c44949Sopenharmony_ci return CALL_ERR_VIDEO_ILLEAGAL_SCENARIO; 490e1c44949Sopenharmony_ci } 491e1c44949Sopenharmony_ci DispatchUpdateVideoResponse(ImsCallMode::CALL_MODE_RECEIVE_ONLY); 492e1c44949Sopenharmony_ci SetVideoUpdateStatus(VideoUpdateStatus::STATUS_NONE); 493e1c44949Sopenharmony_ci break; 494e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_SEND_RECEIVE: 495e1c44949Sopenharmony_ci if (status != VideoUpdateStatus::STATUS_RECV_REQUEST) { 496e1c44949Sopenharmony_ci return CALL_ERR_VIDEO_ILLEAGAL_SCENARIO; 497e1c44949Sopenharmony_ci } 498e1c44949Sopenharmony_ci SetVideoUpdateStatus(VideoUpdateStatus::STATUS_NONE); 499e1c44949Sopenharmony_ci DispatchUpdateVideoResponse(ImsCallMode::CALL_MODE_SEND_RECEIVE); 500e1c44949Sopenharmony_ci ret = SwitchCallVideoState(mode); 501e1c44949Sopenharmony_ci if (ret) { 502e1c44949Sopenharmony_ci TELEPHONY_LOGE("error occur when switch call state"); 503e1c44949Sopenharmony_ci return ret; 504e1c44949Sopenharmony_ci } 505e1c44949Sopenharmony_ci break; 506e1c44949Sopenharmony_ci default: 507e1c44949Sopenharmony_ci TELEPHONY_LOGE("unknown media type."); 508e1c44949Sopenharmony_ci ret = CALL_ERR_VIDEO_ILLEGAL_MEDIA_TYPE; 509e1c44949Sopenharmony_ci break; 510e1c44949Sopenharmony_ci } 511e1c44949Sopenharmony_ci return ret; 512e1c44949Sopenharmony_ci} 513e1c44949Sopenharmony_ci 514e1c44949Sopenharmony_ciint32_t VideoReceiveState::ReceiveUpdateCallMediaModeResponse(CallMediaModeInfo &imsCallModeInfo) 515e1c44949Sopenharmony_ci{ 516e1c44949Sopenharmony_ci TELEPHONY_LOGI("VideoReceiveState receive update video response. mode:%{public}d", imsCallModeInfo.callMode); 517e1c44949Sopenharmony_ci int32_t ret = TELEPHONY_SUCCESS; 518e1c44949Sopenharmony_ci switch (imsCallModeInfo.callMode) { 519e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_AUDIO_ONLY: 520e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_SEND_RECEIVE: 521e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_VIDEO_PAUSED: 522e1c44949Sopenharmony_ci ret = SwitchCallVideoState(imsCallModeInfo.callMode); 523e1c44949Sopenharmony_ci if (ret != TELEPHONY_SUCCESS) { 524e1c44949Sopenharmony_ci TELEPHONY_LOGE("error occur when switch call state"); 525e1c44949Sopenharmony_ci return ret; 526e1c44949Sopenharmony_ci } 527e1c44949Sopenharmony_ci DispatchReportVideoCallInfo(imsCallModeInfo); 528e1c44949Sopenharmony_ci SetVideoUpdateStatus(VideoUpdateStatus::STATUS_NONE); 529e1c44949Sopenharmony_ci break; 530e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_SEND_ONLY: 531e1c44949Sopenharmony_ci break; 532e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_RECEIVE_ONLY: 533e1c44949Sopenharmony_ci DispatchReportVideoCallInfo(imsCallModeInfo); 534e1c44949Sopenharmony_ci if (GetVideoUpdateStatus() != VideoUpdateStatus::STATUS_NONE) { 535e1c44949Sopenharmony_ci SetVideoUpdateStatus(VideoUpdateStatus::STATUS_NONE); 536e1c44949Sopenharmony_ci } 537e1c44949Sopenharmony_ci break; 538e1c44949Sopenharmony_ci default: 539e1c44949Sopenharmony_ci TELEPHONY_LOGE("unknown media type."); 540e1c44949Sopenharmony_ci ret = CALL_ERR_VIDEO_ILLEGAL_MEDIA_TYPE; 541e1c44949Sopenharmony_ci break; 542e1c44949Sopenharmony_ci } 543e1c44949Sopenharmony_ci return ret; 544e1c44949Sopenharmony_ci} 545e1c44949Sopenharmony_ci 546e1c44949Sopenharmony_ciVideoSendReceiveState::VideoSendReceiveState(sptr<NetCallBase> callPtr) : VideoCallState(callPtr) {} 547e1c44949Sopenharmony_ci 548e1c44949Sopenharmony_ciint32_t VideoSendReceiveState::SendUpdateCallMediaModeRequest(ImsCallMode mode) 549e1c44949Sopenharmony_ci{ 550e1c44949Sopenharmony_ci TELEPHONY_LOGI("VideoSendReceiveState send update video request. mode:%{public}d", mode); 551e1c44949Sopenharmony_ci int32_t ret = TELEPHONY_SUCCESS; 552e1c44949Sopenharmony_ci switch (mode) { 553e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_AUDIO_ONLY: 554e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_VIDEO_PAUSED: 555e1c44949Sopenharmony_ci ret = DispatchUpdateVideoRequest(mode); 556e1c44949Sopenharmony_ci if (ret != TELEPHONY_SUCCESS) { 557e1c44949Sopenharmony_ci TELEPHONY_LOGE("error occur when send updateRequest to call"); 558e1c44949Sopenharmony_ci return ret; 559e1c44949Sopenharmony_ci } 560e1c44949Sopenharmony_ci ret = SwitchCallVideoState(mode); 561e1c44949Sopenharmony_ci if (ret != TELEPHONY_SUCCESS) { 562e1c44949Sopenharmony_ci TELEPHONY_LOGE("error occur when switch call state"); 563e1c44949Sopenharmony_ci return ret; 564e1c44949Sopenharmony_ci } 565e1c44949Sopenharmony_ci SetVideoUpdateStatus(VideoUpdateStatus::STATUS_NONE); 566e1c44949Sopenharmony_ci break; 567e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_SEND_ONLY: 568e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_RECEIVE_ONLY: 569e1c44949Sopenharmony_ci ret = DispatchUpdateVideoRequest(mode); 570e1c44949Sopenharmony_ci if (ret != TELEPHONY_SUCCESS) { 571e1c44949Sopenharmony_ci TELEPHONY_LOGE("error occur when send updateRequest to call"); 572e1c44949Sopenharmony_ci return ret; 573e1c44949Sopenharmony_ci } 574e1c44949Sopenharmony_ci break; 575e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_SEND_RECEIVE: 576e1c44949Sopenharmony_ci TELEPHONY_LOGE("illegal media type."); 577e1c44949Sopenharmony_ci return CALL_ERR_VIDEO_ILLEAGAL_SCENARIO; 578e1c44949Sopenharmony_ci default: 579e1c44949Sopenharmony_ci TELEPHONY_LOGE("unknown media type."); 580e1c44949Sopenharmony_ci ret = CALL_ERR_VIDEO_ILLEGAL_MEDIA_TYPE; 581e1c44949Sopenharmony_ci break; 582e1c44949Sopenharmony_ci } 583e1c44949Sopenharmony_ci return ret; 584e1c44949Sopenharmony_ci} 585e1c44949Sopenharmony_ci 586e1c44949Sopenharmony_ciint32_t VideoSendReceiveState::RecieveUpdateCallMediaModeRequest(CallMediaModeInfo &imsCallModeInfo) 587e1c44949Sopenharmony_ci{ 588e1c44949Sopenharmony_ci int32_t ret = TELEPHONY_SUCCESS; 589e1c44949Sopenharmony_ci VideoUpdateStatus status = GetVideoUpdateStatus(); 590e1c44949Sopenharmony_ci TELEPHONY_LOGI("VideoSendReceiveState receive update video request. mode:%{public}d, status:%{public}d", 591e1c44949Sopenharmony_ci imsCallModeInfo.callMode, status); 592e1c44949Sopenharmony_ci switch (imsCallModeInfo.callMode) { 593e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_AUDIO_ONLY: 594e1c44949Sopenharmony_ci ret = SwitchCallVideoState(imsCallModeInfo.callMode); // support send downgrade & pause video request 595e1c44949Sopenharmony_ci if (ret != TELEPHONY_SUCCESS) { 596e1c44949Sopenharmony_ci TELEPHONY_LOGE("error occurs when switch call state"); 597e1c44949Sopenharmony_ci return ret; 598e1c44949Sopenharmony_ci } 599e1c44949Sopenharmony_ci (void)DispatchReportVideoCallInfo(imsCallModeInfo); 600e1c44949Sopenharmony_ci if (status != VideoUpdateStatus::STATUS_NONE) { 601e1c44949Sopenharmony_ci SetVideoUpdateStatus(VideoUpdateStatus::STATUS_NONE); 602e1c44949Sopenharmony_ci } 603e1c44949Sopenharmony_ci break; 604e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_VIDEO_PAUSED: 605e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_SEND_ONLY: 606e1c44949Sopenharmony_ci TELEPHONY_LOGI("receive update video request"); 607e1c44949Sopenharmony_ci break; 608e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_RECEIVE_ONLY: 609e1c44949Sopenharmony_ci TELEPHONY_LOGI("receive update video request"); 610e1c44949Sopenharmony_ci if (status != VideoUpdateStatus::STATUS_NONE) { 611e1c44949Sopenharmony_ci TELEPHONY_LOGI("already in progress."); 612e1c44949Sopenharmony_ci return CALL_ERR_VIDEO_IN_PROGRESS; 613e1c44949Sopenharmony_ci } 614e1c44949Sopenharmony_ci (void)DispatchReportVideoCallInfo(imsCallModeInfo); 615e1c44949Sopenharmony_ci SetVideoUpdateStatus(VideoUpdateStatus::STATUS_RECV_REQUEST); 616e1c44949Sopenharmony_ci break; 617e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_SEND_RECEIVE: 618e1c44949Sopenharmony_ci (void)DispatchReportVideoCallInfo(imsCallModeInfo); 619e1c44949Sopenharmony_ci SetVideoUpdateStatus(VideoUpdateStatus::STATUS_RECV_REQUEST); 620e1c44949Sopenharmony_ci break; 621e1c44949Sopenharmony_ci default: 622e1c44949Sopenharmony_ci TELEPHONY_LOGE("unknown media type."); 623e1c44949Sopenharmony_ci ret = CALL_ERR_VIDEO_ILLEGAL_MEDIA_TYPE; 624e1c44949Sopenharmony_ci break; 625e1c44949Sopenharmony_ci } 626e1c44949Sopenharmony_ci return ret; 627e1c44949Sopenharmony_ci} 628e1c44949Sopenharmony_ci 629e1c44949Sopenharmony_ciint32_t VideoSendReceiveState::SendUpdateCallMediaModeResponse(ImsCallMode mode) 630e1c44949Sopenharmony_ci{ 631e1c44949Sopenharmony_ci TELEPHONY_LOGI("VideoSendReceiveState ignore response"); 632e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 633e1c44949Sopenharmony_ci} 634e1c44949Sopenharmony_ci 635e1c44949Sopenharmony_ciint32_t VideoSendReceiveState::ReceiveUpdateCallMediaModeResponse(CallMediaModeInfo &imsCallModeInfo) 636e1c44949Sopenharmony_ci{ 637e1c44949Sopenharmony_ci int32_t ret = TELEPHONY_SUCCESS; 638e1c44949Sopenharmony_ci VideoUpdateStatus status = GetVideoUpdateStatus(); 639e1c44949Sopenharmony_ci TELEPHONY_LOGI("VideoSendReceiveState receive update video response. mode:%{public}d, status:%{public}d", 640e1c44949Sopenharmony_ci imsCallModeInfo.callMode, status); 641e1c44949Sopenharmony_ci switch (imsCallModeInfo.callMode) { 642e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_RECEIVE_ONLY: 643e1c44949Sopenharmony_ci TELEPHONY_LOGI("receive update video response"); 644e1c44949Sopenharmony_ci if (status != VideoUpdateStatus::STATUS_RECV_REQUEST) { 645e1c44949Sopenharmony_ci return CALL_ERR_VIDEO_ILLEAGAL_SCENARIO; 646e1c44949Sopenharmony_ci } 647e1c44949Sopenharmony_ci DispatchReportVideoCallInfo(imsCallModeInfo); 648e1c44949Sopenharmony_ci ret = SwitchCallVideoState(imsCallModeInfo.callMode); // support send downgrade & pause video request 649e1c44949Sopenharmony_ci if (ret != TELEPHONY_SUCCESS) { 650e1c44949Sopenharmony_ci TELEPHONY_LOGE("error occurs when switch call state"); 651e1c44949Sopenharmony_ci return ret; 652e1c44949Sopenharmony_ci } 653e1c44949Sopenharmony_ci SetVideoUpdateStatus(VideoUpdateStatus::STATUS_NONE); 654e1c44949Sopenharmony_ci break; 655e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_SEND_RECEIVE: 656e1c44949Sopenharmony_ci if (status != VideoUpdateStatus::STATUS_RECV_REQUEST) { 657e1c44949Sopenharmony_ci return CALL_ERR_VIDEO_ILLEAGAL_SCENARIO; 658e1c44949Sopenharmony_ci } 659e1c44949Sopenharmony_ci ret = DispatchReportVideoCallInfo(imsCallModeInfo); 660e1c44949Sopenharmony_ci SetVideoUpdateStatus(VideoUpdateStatus::STATUS_NONE); 661e1c44949Sopenharmony_ci break; 662e1c44949Sopenharmony_ci default: 663e1c44949Sopenharmony_ci TELEPHONY_LOGE("unknown media type."); 664e1c44949Sopenharmony_ci ret = CALL_ERR_VIDEO_ILLEGAL_MEDIA_TYPE; 665e1c44949Sopenharmony_ci break; 666e1c44949Sopenharmony_ci } 667e1c44949Sopenharmony_ci return ret; 668e1c44949Sopenharmony_ci} 669e1c44949Sopenharmony_ci 670e1c44949Sopenharmony_ciVideoPauseState::VideoPauseState(sptr<NetCallBase> callPtr) : VideoCallState(callPtr) {} 671e1c44949Sopenharmony_ci 672e1c44949Sopenharmony_ciint32_t VideoPauseState::SendUpdateCallMediaModeRequest(ImsCallMode mode) 673e1c44949Sopenharmony_ci{ 674e1c44949Sopenharmony_ci TELEPHONY_LOGI("VideoPauseState send update video request. mode:%{public}d", mode); 675e1c44949Sopenharmony_ci int32_t ret = TELEPHONY_SUCCESS; 676e1c44949Sopenharmony_ci switch (mode) { 677e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_AUDIO_ONLY: 678e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_SEND_RECEIVE: 679e1c44949Sopenharmony_ci ret = DispatchUpdateVideoRequest(mode); 680e1c44949Sopenharmony_ci if (ret != TELEPHONY_SUCCESS) { 681e1c44949Sopenharmony_ci TELEPHONY_LOGE("error occur when send updateRequest to call"); 682e1c44949Sopenharmony_ci return ret; 683e1c44949Sopenharmony_ci } 684e1c44949Sopenharmony_ci ret = SwitchCallVideoState(mode); 685e1c44949Sopenharmony_ci if (ret == TELEPHONY_SUCCESS) { 686e1c44949Sopenharmony_ci TELEPHONY_LOGE("error occur when switch call state"); 687e1c44949Sopenharmony_ci return ret; 688e1c44949Sopenharmony_ci } 689e1c44949Sopenharmony_ci SetVideoUpdateStatus(VideoUpdateStatus::STATUS_NONE); 690e1c44949Sopenharmony_ci break; 691e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_SEND_ONLY: 692e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_RECEIVE_ONLY: 693e1c44949Sopenharmony_ci TELEPHONY_LOGI("send update video state"); 694e1c44949Sopenharmony_ci ret = DispatchUpdateVideoRequest(mode); 695e1c44949Sopenharmony_ci break; 696e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_VIDEO_PAUSED: 697e1c44949Sopenharmony_ci TELEPHONY_LOGE("illegal media type."); 698e1c44949Sopenharmony_ci ret = CALL_ERR_VIDEO_ILLEAGAL_SCENARIO; 699e1c44949Sopenharmony_ci break; 700e1c44949Sopenharmony_ci default: 701e1c44949Sopenharmony_ci TELEPHONY_LOGE("unknown media type."); 702e1c44949Sopenharmony_ci ret = CALL_ERR_VIDEO_ILLEGAL_MEDIA_TYPE; 703e1c44949Sopenharmony_ci break; 704e1c44949Sopenharmony_ci } 705e1c44949Sopenharmony_ci return ret; 706e1c44949Sopenharmony_ci} 707e1c44949Sopenharmony_ci 708e1c44949Sopenharmony_ciint32_t VideoPauseState::RecieveUpdateCallMediaModeRequest(CallMediaModeInfo &imsCallModeInfo) 709e1c44949Sopenharmony_ci{ 710e1c44949Sopenharmony_ci TELEPHONY_LOGI("VideoPauseState receive update video request. mode:%{public}d", imsCallModeInfo.callMode); 711e1c44949Sopenharmony_ci int32_t ret = TELEPHONY_SUCCESS; 712e1c44949Sopenharmony_ci switch (imsCallModeInfo.callMode) { 713e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_AUDIO_ONLY: 714e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_SEND_RECEIVE: 715e1c44949Sopenharmony_ci ret = SwitchCallVideoState(imsCallModeInfo.callMode); 716e1c44949Sopenharmony_ci if (ret == TELEPHONY_SUCCESS) { 717e1c44949Sopenharmony_ci TELEPHONY_LOGE("error occur when switch call state"); 718e1c44949Sopenharmony_ci return ret; 719e1c44949Sopenharmony_ci } 720e1c44949Sopenharmony_ci SetVideoUpdateStatus(VideoUpdateStatus::STATUS_NONE); 721e1c44949Sopenharmony_ci break; 722e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_SEND_ONLY: 723e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_RECEIVE_ONLY: 724e1c44949Sopenharmony_ci TELEPHONY_LOGI("receive update call media request"); 725e1c44949Sopenharmony_ci break; 726e1c44949Sopenharmony_ci case ImsCallMode::CALL_MODE_VIDEO_PAUSED: 727e1c44949Sopenharmony_ci TELEPHONY_LOGE("illegal media type."); 728e1c44949Sopenharmony_ci ret = CALL_ERR_VIDEO_ILLEAGAL_SCENARIO; 729e1c44949Sopenharmony_ci break; 730e1c44949Sopenharmony_ci default: 731e1c44949Sopenharmony_ci TELEPHONY_LOGE("unknown media type."); 732e1c44949Sopenharmony_ci ret = CALL_ERR_VIDEO_ILLEGAL_MEDIA_TYPE; 733e1c44949Sopenharmony_ci break; 734e1c44949Sopenharmony_ci } 735e1c44949Sopenharmony_ci return ret; 736e1c44949Sopenharmony_ci} 737e1c44949Sopenharmony_ci 738e1c44949Sopenharmony_ciint32_t VideoPauseState::SendUpdateCallMediaModeResponse(ImsCallMode mode) 739e1c44949Sopenharmony_ci{ 740e1c44949Sopenharmony_ci TELEPHONY_LOGI("VideoPauseState send update video response. mode:%{public}d", mode); 741e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 742e1c44949Sopenharmony_ci} 743e1c44949Sopenharmony_ci 744e1c44949Sopenharmony_ciint32_t VideoPauseState::ReceiveUpdateCallMediaModeResponse(CallMediaModeInfo &imsCallModeInfo) 745e1c44949Sopenharmony_ci{ 746e1c44949Sopenharmony_ci TELEPHONY_LOGI("VideoPauseState receive update video response. mode:%{public}d", imsCallModeInfo.callMode); 747e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 748e1c44949Sopenharmony_ci} 749e1c44949Sopenharmony_ci} // namespace Telephony 750e1c44949Sopenharmony_ci} // namespace OHOS 751