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#ifndef VIDEO_CALL_STATE_H 17e1c44949Sopenharmony_ci#define VIDEO_CALL_STATE_H 18e1c44949Sopenharmony_ci 19e1c44949Sopenharmony_ci#include <map> 20e1c44949Sopenharmony_ci#include <memory> 21e1c44949Sopenharmony_ci#include <mutex> 22e1c44949Sopenharmony_ci 23e1c44949Sopenharmony_ci#include "refbase.h" 24e1c44949Sopenharmony_ci#include "net_call_base.h" 25e1c44949Sopenharmony_ci#include "call_manager_inner_type.h" 26e1c44949Sopenharmony_ci 27e1c44949Sopenharmony_cinamespace OHOS { 28e1c44949Sopenharmony_cinamespace Telephony { 29e1c44949Sopenharmony_cienum VideoUpdateStatus { 30e1c44949Sopenharmony_ci STATUS_NONE, 31e1c44949Sopenharmony_ci STATUS_SEND_REQUEST, 32e1c44949Sopenharmony_ci STATUS_RECV_REQUEST, 33e1c44949Sopenharmony_ci STATUS_RECV_RESPONSE, 34e1c44949Sopenharmony_ci STATUS_SEND_RESPONSE, 35e1c44949Sopenharmony_ci}; 36e1c44949Sopenharmony_ci 37e1c44949Sopenharmony_ciclass VideoCallState : public virtual RefBase { 38e1c44949Sopenharmony_cipublic: 39e1c44949Sopenharmony_ci VideoCallState(sptr<NetCallBase> callPtr); 40e1c44949Sopenharmony_ci virtual ~VideoCallState() = default; 41e1c44949Sopenharmony_ci bool IsCallSupportVideoCall(); 42e1c44949Sopenharmony_ci void SetVideoUpdateStatus(VideoUpdateStatus status); 43e1c44949Sopenharmony_ci VideoUpdateStatus GetVideoUpdateStatus(); 44e1c44949Sopenharmony_ci int32_t SwitchCallVideoState(ImsCallMode mode); 45e1c44949Sopenharmony_ci int32_t DispatchUpdateVideoRequest(ImsCallMode mode); 46e1c44949Sopenharmony_ci int32_t DispatchUpdateVideoResponse(ImsCallMode mode); 47e1c44949Sopenharmony_ci int32_t DispatchReportVideoCallInfo(CallMediaModeInfo &imsCallModeInfo); 48e1c44949Sopenharmony_ci virtual int32_t SendUpdateCallMediaModeRequest(ImsCallMode mode) = 0; 49e1c44949Sopenharmony_ci virtual int32_t RecieveUpdateCallMediaModeRequest(CallMediaModeInfo &imsCallModeInfo) = 0; 50e1c44949Sopenharmony_ci virtual int32_t SendUpdateCallMediaModeResponse(ImsCallMode mode) = 0; 51e1c44949Sopenharmony_ci virtual int32_t ReceiveUpdateCallMediaModeResponse(CallMediaModeInfo &imsCallModeInfo) = 0; 52e1c44949Sopenharmony_ci sptr<VideoCallState> GetCallVideoState(ImsCallMode mode); 53e1c44949Sopenharmony_ci 54e1c44949Sopenharmony_ciprotected: 55e1c44949Sopenharmony_ci sptr<NetCallBase> call_; 56e1c44949Sopenharmony_ci VideoUpdateStatus updateStatus_; 57e1c44949Sopenharmony_ci}; 58e1c44949Sopenharmony_ci 59e1c44949Sopenharmony_ciclass AudioOnlyState : public VideoCallState { 60e1c44949Sopenharmony_cipublic: 61e1c44949Sopenharmony_ci AudioOnlyState(sptr<NetCallBase> callPtr); 62e1c44949Sopenharmony_ci ~AudioOnlyState() = default; 63e1c44949Sopenharmony_ci int32_t SendUpdateCallMediaModeRequest(ImsCallMode mode) override; 64e1c44949Sopenharmony_ci int32_t RecieveUpdateCallMediaModeRequest(CallMediaModeInfo &imsCallModeInfo) override; 65e1c44949Sopenharmony_ci int32_t SendUpdateCallMediaModeResponse(ImsCallMode mode) override; 66e1c44949Sopenharmony_ci int32_t ReceiveUpdateCallMediaModeResponse(CallMediaModeInfo &imsCallModeInfo) override; 67e1c44949Sopenharmony_ci}; 68e1c44949Sopenharmony_ci 69e1c44949Sopenharmony_ciclass VideoSendState : public VideoCallState { 70e1c44949Sopenharmony_cipublic: 71e1c44949Sopenharmony_ci VideoSendState(sptr<NetCallBase> callPtr); 72e1c44949Sopenharmony_ci ~VideoSendState() = default; 73e1c44949Sopenharmony_ci int32_t SendUpdateCallMediaModeRequest(ImsCallMode mode) override; 74e1c44949Sopenharmony_ci int32_t RecieveUpdateCallMediaModeRequest(CallMediaModeInfo &imsCallModeInfo) override; 75e1c44949Sopenharmony_ci int32_t SendUpdateCallMediaModeResponse(ImsCallMode mode) override; 76e1c44949Sopenharmony_ci int32_t ReceiveUpdateCallMediaModeResponse(CallMediaModeInfo &imsCallModeInfo) override; 77e1c44949Sopenharmony_ci}; 78e1c44949Sopenharmony_ci 79e1c44949Sopenharmony_ciclass VideoReceiveState : public VideoCallState { 80e1c44949Sopenharmony_cipublic: 81e1c44949Sopenharmony_ci VideoReceiveState(sptr<NetCallBase> callPtr); 82e1c44949Sopenharmony_ci ~VideoReceiveState() = default; 83e1c44949Sopenharmony_ci int32_t SendUpdateCallMediaModeRequest(ImsCallMode mode) override; 84e1c44949Sopenharmony_ci int32_t RecieveUpdateCallMediaModeRequest(CallMediaModeInfo &imsCallModeInfo) override; 85e1c44949Sopenharmony_ci int32_t SendUpdateCallMediaModeResponse(ImsCallMode mode) override; 86e1c44949Sopenharmony_ci int32_t ReceiveUpdateCallMediaModeResponse(CallMediaModeInfo &imsCallModeInfo) override; 87e1c44949Sopenharmony_ci}; 88e1c44949Sopenharmony_ci 89e1c44949Sopenharmony_ciclass VideoSendReceiveState : public VideoCallState { 90e1c44949Sopenharmony_cipublic: 91e1c44949Sopenharmony_ci VideoSendReceiveState(sptr<NetCallBase> callPtr); 92e1c44949Sopenharmony_ci ~VideoSendReceiveState() = default; 93e1c44949Sopenharmony_ci int32_t SendUpdateCallMediaModeRequest(ImsCallMode mode) override; 94e1c44949Sopenharmony_ci int32_t RecieveUpdateCallMediaModeRequest(CallMediaModeInfo &imsCallModeInfo) override; 95e1c44949Sopenharmony_ci int32_t SendUpdateCallMediaModeResponse(ImsCallMode mode) override; 96e1c44949Sopenharmony_ci int32_t ReceiveUpdateCallMediaModeResponse(CallMediaModeInfo &imsCallModeInfo) override; 97e1c44949Sopenharmony_ci}; 98e1c44949Sopenharmony_ci 99e1c44949Sopenharmony_ciclass VideoPauseState : public VideoCallState { 100e1c44949Sopenharmony_cipublic: 101e1c44949Sopenharmony_ci VideoPauseState(sptr<NetCallBase> callPtr); 102e1c44949Sopenharmony_ci ~VideoPauseState() = default; 103e1c44949Sopenharmony_ci int32_t SendUpdateCallMediaModeRequest(ImsCallMode mode) override; 104e1c44949Sopenharmony_ci int32_t RecieveUpdateCallMediaModeRequest(CallMediaModeInfo &imsCallModeInfo) override; 105e1c44949Sopenharmony_ci int32_t SendUpdateCallMediaModeResponse(ImsCallMode mode) override; 106e1c44949Sopenharmony_ci int32_t ReceiveUpdateCallMediaModeResponse(CallMediaModeInfo &imsCallModeInfo) override; 107e1c44949Sopenharmony_ci}; 108e1c44949Sopenharmony_ci} // namespace Telephony 109e1c44949Sopenharmony_ci} // namespace OHOS 110e1c44949Sopenharmony_ci#endif