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 "cs_call.h" 17e1c44949Sopenharmony_ci 18e1c44949Sopenharmony_ci#include "call_manager_errors.h" 19e1c44949Sopenharmony_ci#include "telephony_log_wrapper.h" 20e1c44949Sopenharmony_ci 21e1c44949Sopenharmony_cinamespace OHOS { 22e1c44949Sopenharmony_cinamespace Telephony { 23e1c44949Sopenharmony_ciCSCall::CSCall(DialParaInfo &info) : CarrierCall(info) {} 24e1c44949Sopenharmony_ci 25e1c44949Sopenharmony_ciCSCall::CSCall(DialParaInfo &info, AppExecFwk::PacMap &extras) : CarrierCall(info, extras) {} 26e1c44949Sopenharmony_ci 27e1c44949Sopenharmony_ciCSCall::~CSCall() {} 28e1c44949Sopenharmony_ci 29e1c44949Sopenharmony_ciint32_t CSCall::DialingProcess() 30e1c44949Sopenharmony_ci{ 31e1c44949Sopenharmony_ci return CarrierDialingProcess(); 32e1c44949Sopenharmony_ci} 33e1c44949Sopenharmony_ci 34e1c44949Sopenharmony_ciint32_t CSCall::AnswerCall(int32_t videoState) 35e1c44949Sopenharmony_ci{ 36e1c44949Sopenharmony_ci return CarrierAnswerCall(videoState); 37e1c44949Sopenharmony_ci} 38e1c44949Sopenharmony_ci 39e1c44949Sopenharmony_ciint32_t CSCall::RejectCall() 40e1c44949Sopenharmony_ci{ 41e1c44949Sopenharmony_ci return CarrierRejectCall(); 42e1c44949Sopenharmony_ci} 43e1c44949Sopenharmony_ci 44e1c44949Sopenharmony_ciint32_t CSCall::HangUpCall() 45e1c44949Sopenharmony_ci{ 46e1c44949Sopenharmony_ci return CarrierHangUpCall(); 47e1c44949Sopenharmony_ci} 48e1c44949Sopenharmony_ci 49e1c44949Sopenharmony_ciint32_t CSCall::HoldCall() 50e1c44949Sopenharmony_ci{ 51e1c44949Sopenharmony_ci return CarrierHoldCall(); 52e1c44949Sopenharmony_ci} 53e1c44949Sopenharmony_ci 54e1c44949Sopenharmony_ciint32_t CSCall::UnHoldCall() 55e1c44949Sopenharmony_ci{ 56e1c44949Sopenharmony_ci return CarrierUnHoldCall(); 57e1c44949Sopenharmony_ci} 58e1c44949Sopenharmony_ci 59e1c44949Sopenharmony_ciint32_t CSCall::SwitchCall() 60e1c44949Sopenharmony_ci{ 61e1c44949Sopenharmony_ci return CarrierSwitchCall(); 62e1c44949Sopenharmony_ci} 63e1c44949Sopenharmony_ci 64e1c44949Sopenharmony_civoid CSCall::GetCallAttributeInfo(CallAttributeInfo &info) 65e1c44949Sopenharmony_ci{ 66e1c44949Sopenharmony_ci GetCallAttributeCarrierInfo(info); 67e1c44949Sopenharmony_ci} 68e1c44949Sopenharmony_ci 69e1c44949Sopenharmony_ciint32_t CSCall::SetMute(int32_t mute, int32_t slotId) 70e1c44949Sopenharmony_ci{ 71e1c44949Sopenharmony_ci return CarrierSetMute(mute, slotId); 72e1c44949Sopenharmony_ci} 73e1c44949Sopenharmony_ci 74e1c44949Sopenharmony_ciint32_t CSCall::CombineConference() 75e1c44949Sopenharmony_ci{ 76e1c44949Sopenharmony_ci int32_t ret = DelayedSingleton<CsConference>::GetInstance()->SetMainCall(GetCallID()); 77e1c44949Sopenharmony_ci if (ret != TELEPHONY_SUCCESS) { 78e1c44949Sopenharmony_ci return ret; 79e1c44949Sopenharmony_ci } 80e1c44949Sopenharmony_ci ConferenceState currentState = DelayedSingleton<CsConference>::GetInstance()->GetConferenceState(); 81e1c44949Sopenharmony_ci if (currentState == ConferenceState::CONFERENCE_STATE_CREATING) { 82e1c44949Sopenharmony_ci TELEPHONY_LOGE("skip combine, a process of combine already exsists"); 83e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 84e1c44949Sopenharmony_ci } 85e1c44949Sopenharmony_ci DelayedSingleton<CsConference>::GetInstance()->SetConferenceState(ConferenceState::CONFERENCE_STATE_CREATING); 86e1c44949Sopenharmony_ci return CarrierCombineConference(); 87e1c44949Sopenharmony_ci} 88e1c44949Sopenharmony_ci 89e1c44949Sopenharmony_civoid CSCall::HandleCombineConferenceFailEvent() 90e1c44949Sopenharmony_ci{ 91e1c44949Sopenharmony_ci std::set<std::int32_t> subCallIdList = DelayedSingleton<CsConference>::GetInstance()->GetSubCallIdList(); 92e1c44949Sopenharmony_ci if (subCallIdList.empty()) { 93e1c44949Sopenharmony_ci DelayedSingleton<CsConference>::GetInstance()->SetMainCall(ERR_ID); 94e1c44949Sopenharmony_ci } else { 95e1c44949Sopenharmony_ci DelayedSingleton<CsConference>::GetInstance()->SetMainCall(*subCallIdList.begin()); 96e1c44949Sopenharmony_ci } 97e1c44949Sopenharmony_ci ConferenceState oldState = DelayedSingleton<CsConference>::GetInstance()->GetOldConferenceState(); 98e1c44949Sopenharmony_ci DelayedSingleton<CsConference>::GetInstance()->SetConferenceState(oldState); 99e1c44949Sopenharmony_ci} 100e1c44949Sopenharmony_ci 101e1c44949Sopenharmony_ciint32_t CSCall::SeparateConference() 102e1c44949Sopenharmony_ci{ 103e1c44949Sopenharmony_ci return CarrierSeparateConference(); 104e1c44949Sopenharmony_ci} 105e1c44949Sopenharmony_ci 106e1c44949Sopenharmony_ciint32_t CSCall::KickOutFromConference() 107e1c44949Sopenharmony_ci{ 108e1c44949Sopenharmony_ci return CarrierKickOutFromConference(); 109e1c44949Sopenharmony_ci} 110e1c44949Sopenharmony_ci 111e1c44949Sopenharmony_ciint32_t CSCall::CanCombineConference() 112e1c44949Sopenharmony_ci{ 113e1c44949Sopenharmony_ci int32_t ret = IsSupportConferenceable(); 114e1c44949Sopenharmony_ci if (ret != TELEPHONY_SUCCESS) { 115e1c44949Sopenharmony_ci TELEPHONY_LOGE("call unsupported conference, error%{public}d", ret); 116e1c44949Sopenharmony_ci return ret; 117e1c44949Sopenharmony_ci } 118e1c44949Sopenharmony_ci return DelayedSingleton<CsConference>::GetInstance()->CanCombineConference(); 119e1c44949Sopenharmony_ci} 120e1c44949Sopenharmony_ci 121e1c44949Sopenharmony_ciint32_t CSCall::CanSeparateConference() 122e1c44949Sopenharmony_ci{ 123e1c44949Sopenharmony_ci return DelayedSingleton<CsConference>::GetInstance()->CanSeparateConference(); 124e1c44949Sopenharmony_ci} 125e1c44949Sopenharmony_ci 126e1c44949Sopenharmony_ciint32_t CSCall::CanKickOutFromConference() 127e1c44949Sopenharmony_ci{ 128e1c44949Sopenharmony_ci return DelayedSingleton<CsConference>::GetInstance()->CanKickOutFromConference(); 129e1c44949Sopenharmony_ci} 130e1c44949Sopenharmony_ci 131e1c44949Sopenharmony_ciint32_t CSCall::LaunchConference() 132e1c44949Sopenharmony_ci{ 133e1c44949Sopenharmony_ci int32_t ret = DelayedSingleton<CsConference>::GetInstance()->JoinToConference(GetCallID()); 134e1c44949Sopenharmony_ci if (ret == TELEPHONY_SUCCESS) { 135e1c44949Sopenharmony_ci SetTelConferenceState(TelConferenceState::TEL_CONFERENCE_ACTIVE); 136e1c44949Sopenharmony_ci } 137e1c44949Sopenharmony_ci return ret; 138e1c44949Sopenharmony_ci} 139e1c44949Sopenharmony_ci 140e1c44949Sopenharmony_ciint32_t CSCall::ExitConference() 141e1c44949Sopenharmony_ci{ 142e1c44949Sopenharmony_ci int32_t ret = DelayedSingleton<CsConference>::GetInstance()->LeaveFromConference(GetCallID()); 143e1c44949Sopenharmony_ci if (ret == TELEPHONY_SUCCESS) { 144e1c44949Sopenharmony_ci SetTelConferenceState(TelConferenceState::TEL_CONFERENCE_IDLE); 145e1c44949Sopenharmony_ci } 146e1c44949Sopenharmony_ci return ret; 147e1c44949Sopenharmony_ci} 148e1c44949Sopenharmony_ci 149e1c44949Sopenharmony_ciint32_t CSCall::HoldConference() 150e1c44949Sopenharmony_ci{ 151e1c44949Sopenharmony_ci int32_t ret = DelayedSingleton<CsConference>::GetInstance()->HoldConference(GetCallID()); 152e1c44949Sopenharmony_ci if (ret == TELEPHONY_SUCCESS) { 153e1c44949Sopenharmony_ci SetTelConferenceState(TelConferenceState::TEL_CONFERENCE_HOLDING); 154e1c44949Sopenharmony_ci } 155e1c44949Sopenharmony_ci return ret; 156e1c44949Sopenharmony_ci} 157e1c44949Sopenharmony_ci 158e1c44949Sopenharmony_ciint32_t CSCall::GetMainCallId(int32_t &mainCallId) 159e1c44949Sopenharmony_ci{ 160e1c44949Sopenharmony_ci mainCallId = DelayedSingleton<CsConference>::GetInstance()->GetMainCall(); 161e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 162e1c44949Sopenharmony_ci} 163e1c44949Sopenharmony_ci 164e1c44949Sopenharmony_ciint32_t CSCall::GetSubCallIdList(std::vector<std::u16string> &callIdList) 165e1c44949Sopenharmony_ci{ 166e1c44949Sopenharmony_ci return DelayedSingleton<CsConference>::GetInstance()->GetSubCallIdList(GetCallID(), callIdList); 167e1c44949Sopenharmony_ci} 168e1c44949Sopenharmony_ci 169e1c44949Sopenharmony_ciint32_t CSCall::GetCallIdListForConference(std::vector<std::u16string> &callIdList) 170e1c44949Sopenharmony_ci{ 171e1c44949Sopenharmony_ci return DelayedSingleton<CsConference>::GetInstance()->GetCallIdListForConference(GetCallID(), callIdList); 172e1c44949Sopenharmony_ci} 173e1c44949Sopenharmony_ci 174e1c44949Sopenharmony_ciint32_t CSCall::IsSupportConferenceable() 175e1c44949Sopenharmony_ci{ 176e1c44949Sopenharmony_ci // get from configure file 177e1c44949Sopenharmony_ci#ifdef ABILIT_CONFIG_SUPPORT 178e1c44949Sopenharmony_ci bool carrierSupport = GetCarrierConfig(CS_SUPPORT_CONFERENCE); 179e1c44949Sopenharmony_ci if (!carrierSupport) { 180e1c44949Sopenharmony_ci return TELEPHONY_CONFERENCE_CARRIER_NOT_SUPPORT; 181e1c44949Sopenharmony_ci } 182e1c44949Sopenharmony_ci#endif 183e1c44949Sopenharmony_ci return CarrierCall::IsSupportConferenceable(); 184e1c44949Sopenharmony_ci} 185e1c44949Sopenharmony_ci} // namespace Telephony 186e1c44949Sopenharmony_ci} // namespace OHOS 187