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 "call_base.h" 17e1c44949Sopenharmony_ci 18e1c44949Sopenharmony_ci#include <securec.h> 19e1c44949Sopenharmony_ci 20e1c44949Sopenharmony_ci#include "audio_control_manager.h" 21e1c44949Sopenharmony_ci#include "bluetooth_call_manager.h" 22e1c44949Sopenharmony_ci#include "call_manager_errors.h" 23e1c44949Sopenharmony_ci#include "cellular_call_connection.h" 24e1c44949Sopenharmony_ci#include "common_type.h" 25e1c44949Sopenharmony_ci#include "ffrt.h" 26e1c44949Sopenharmony_ci#include "telephony_log_wrapper.h" 27e1c44949Sopenharmony_ci#include "voip_call.h" 28e1c44949Sopenharmony_ci#include "voip_call_connection.h" 29e1c44949Sopenharmony_ci#include "call_manager_info.h" 30e1c44949Sopenharmony_ci#include "call_voice_assistant_manager.h" 31e1c44949Sopenharmony_ci 32e1c44949Sopenharmony_cinamespace OHOS { 33e1c44949Sopenharmony_cinamespace Telephony { 34e1c44949Sopenharmony_cistatic const int MILLI_TO_BASE = 1000; 35e1c44949Sopenharmony_ci 36e1c44949Sopenharmony_ciCallBase::CallBase(DialParaInfo &info) 37e1c44949Sopenharmony_ci : callId_(info.callId), callType_(info.callType), videoState_(info.videoState), accountNumber_(info.number), 38e1c44949Sopenharmony_ci bundleName_(info.bundleName), callRunningState_(CallRunningState::CALL_RUNNING_STATE_CREATE), 39e1c44949Sopenharmony_ci conferenceState_(TelConferenceState::TEL_CONFERENCE_IDLE), startTime_(0), 40e1c44949Sopenharmony_ci direction_(CallDirection::CALL_DIRECTION_IN), policyFlag_(0), callState_(info.callState), autoAnswerState_(false), 41e1c44949Sopenharmony_ci canUnHoldState_(true), canSwitchCallState_(true), answerVideoState_(0), isSpeakerphoneOn_(false), 42e1c44949Sopenharmony_ci callEndedType_(CallEndedType::UNKNOWN), callBeginTime_(0), callCreateTime_(0), callEndTime_(0), ringBeginTime_(0), 43e1c44949Sopenharmony_ci ringEndTime_(0), answerType_(CallAnswerType::CALL_ANSWER_MISSED), accountId_(info.accountId), 44e1c44949Sopenharmony_ci crsType_(info.crsType), originalCallType_(info.originalCallType), isMuted_(false), numberLocation_("default"), 45e1c44949Sopenharmony_ci blockReason_(0), isEccContact_(false), celiaCallType_(-1), extraParams_(info.extraParams), isAnswered_(false) 46e1c44949Sopenharmony_ci{ 47e1c44949Sopenharmony_ci (void)memset_s(&contactInfo_, sizeof(ContactInfo), 0, sizeof(ContactInfo)); 48e1c44949Sopenharmony_ci (void)memset_s(&numberMarkInfo_, sizeof(NumberMarkInfo), 0, sizeof(NumberMarkInfo)); 49e1c44949Sopenharmony_ci} 50e1c44949Sopenharmony_ci 51e1c44949Sopenharmony_ciCallBase::CallBase(DialParaInfo &info, AppExecFwk::PacMap &extras) 52e1c44949Sopenharmony_ci : callId_(info.callId), callType_(info.callType), videoState_(info.videoState), accountNumber_(info.number), 53e1c44949Sopenharmony_ci bundleName_(info.bundleName), callRunningState_(CallRunningState::CALL_RUNNING_STATE_CREATE), 54e1c44949Sopenharmony_ci conferenceState_(TelConferenceState::TEL_CONFERENCE_IDLE), startTime_(0), 55e1c44949Sopenharmony_ci direction_(CallDirection::CALL_DIRECTION_OUT), policyFlag_(0), callState_(info.callState), 56e1c44949Sopenharmony_ci autoAnswerState_(false), canUnHoldState_(true), canSwitchCallState_(true), answerVideoState_(0), 57e1c44949Sopenharmony_ci isSpeakerphoneOn_(false), callEndedType_(CallEndedType::UNKNOWN), callBeginTime_(0), callCreateTime_(0), 58e1c44949Sopenharmony_ci callEndTime_(0), ringBeginTime_(0), ringEndTime_(0), answerType_(CallAnswerType::CALL_ANSWER_MISSED), 59e1c44949Sopenharmony_ci accountId_(info.accountId), crsType_(info.crsType), originalCallType_(info.originalCallType), isMuted_(false), 60e1c44949Sopenharmony_ci numberLocation_("default"), blockReason_(0), isEccContact_(false), celiaCallType_(-1), 61e1c44949Sopenharmony_ci extraParams_(info.extraParams), isAnswered_(false) 62e1c44949Sopenharmony_ci{ 63e1c44949Sopenharmony_ci (void)memset_s(&contactInfo_, sizeof(ContactInfo), 0, sizeof(ContactInfo)); 64e1c44949Sopenharmony_ci (void)memset_s(&numberMarkInfo_, sizeof(NumberMarkInfo), 0, sizeof(NumberMarkInfo)); 65e1c44949Sopenharmony_ci} 66e1c44949Sopenharmony_ci 67e1c44949Sopenharmony_ciCallBase::~CallBase() {} 68e1c44949Sopenharmony_ci 69e1c44949Sopenharmony_ciint32_t CallBase::DialCallBase() 70e1c44949Sopenharmony_ci{ 71e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 72e1c44949Sopenharmony_ci callRunningState_ = CallRunningState::CALL_RUNNING_STATE_CONNECTING; 73e1c44949Sopenharmony_ci TELEPHONY_LOGI("start to set audio"); 74e1c44949Sopenharmony_ci // Set audio, set hands-free 75e1c44949Sopenharmony_ci ffrt::submit([=]() { HangUpVoipCall(); }); 76e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 77e1c44949Sopenharmony_ci} 78e1c44949Sopenharmony_ci 79e1c44949Sopenharmony_civoid CallBase::HangUpVoipCall() 80e1c44949Sopenharmony_ci{ 81e1c44949Sopenharmony_ci std::vector<CallAttributeInfo> callAttributeInfo = CallObjectManager::GetAllCallInfoList(); 82e1c44949Sopenharmony_ci std::vector<CallAttributeInfo>::iterator it = callAttributeInfo.begin(); 83e1c44949Sopenharmony_ci while (it != callAttributeInfo.end()) { 84e1c44949Sopenharmony_ci CallAttributeInfo callinfo = (*it); 85e1c44949Sopenharmony_ci TelCallState callState = callinfo.callState; 86e1c44949Sopenharmony_ci ++it; 87e1c44949Sopenharmony_ci if (callinfo.callType == CallType::TYPE_VOIP) { 88e1c44949Sopenharmony_ci sptr<CallBase> tempCall = CallObjectManager::GetOneCallObject(callinfo.callId); 89e1c44949Sopenharmony_ci sptr<VoIPCall> call = static_cast<VoIPCall *>(static_cast<void *>(tempCall.GetRefPtr())); 90e1c44949Sopenharmony_ci if (call == nullptr) { 91e1c44949Sopenharmony_ci TELEPHONY_LOGE("the call object is nullptr, callId:%{public}d", callinfo.callId); 92e1c44949Sopenharmony_ci break; 93e1c44949Sopenharmony_ci } 94e1c44949Sopenharmony_ci if (call->GetTelCallState() == TelCallState::CALL_STATUS_ACTIVE) { 95e1c44949Sopenharmony_ci TELEPHONY_LOGI("the voip call with callId %{public}d is active, no need to hangup", call->GetCallID()); 96e1c44949Sopenharmony_ci continue; 97e1c44949Sopenharmony_ci } 98e1c44949Sopenharmony_ci call->HangUpCall(ErrorReason::CELLULAR_CALL_EXISTS); 99e1c44949Sopenharmony_ci } 100e1c44949Sopenharmony_ci } 101e1c44949Sopenharmony_ci} 102e1c44949Sopenharmony_ci 103e1c44949Sopenharmony_ciint32_t CallBase::IncomingCallBase() 104e1c44949Sopenharmony_ci{ 105e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 106e1c44949Sopenharmony_ci callRunningState_ = CallRunningState::CALL_RUNNING_STATE_RINGING; 107e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 108e1c44949Sopenharmony_ci} 109e1c44949Sopenharmony_ci 110e1c44949Sopenharmony_ciint32_t CallBase::AnswerCallBase() 111e1c44949Sopenharmony_ci{ 112e1c44949Sopenharmony_ci if (!IsCurrentRinging()) { 113e1c44949Sopenharmony_ci TELEPHONY_LOGW("the device is currently not ringing"); 114e1c44949Sopenharmony_ci return CALL_ERR_PHONE_ANSWER_IS_BUSY; 115e1c44949Sopenharmony_ci } 116e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 117e1c44949Sopenharmony_ci} 118e1c44949Sopenharmony_ci 119e1c44949Sopenharmony_ciint32_t CallBase::RejectCallBase() 120e1c44949Sopenharmony_ci{ 121e1c44949Sopenharmony_ci answerType_ = CallAnswerType::CALL_ANSWER_REJECT; 122e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 123e1c44949Sopenharmony_ci} 124e1c44949Sopenharmony_ci 125e1c44949Sopenharmony_civoid CallBase::SetExtraParams(AAFwk::WantParams extraParams) 126e1c44949Sopenharmony_ci{ 127e1c44949Sopenharmony_ci extraParams_ = extraParams; 128e1c44949Sopenharmony_ci} 129e1c44949Sopenharmony_ci 130e1c44949Sopenharmony_civoid CallBase::GetCallAttributeBaseInfo(CallAttributeInfo &info) 131e1c44949Sopenharmony_ci{ 132e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 133e1c44949Sopenharmony_ci (void)memset_s(info.accountNumber, kMaxNumberLen, 0, kMaxNumberLen); 134e1c44949Sopenharmony_ci if (accountNumber_.length() > static_cast<size_t>(kMaxNumberLen)) { 135e1c44949Sopenharmony_ci TELEPHONY_LOGE("Number out of limit!"); 136e1c44949Sopenharmony_ci return; 137e1c44949Sopenharmony_ci } 138e1c44949Sopenharmony_ci if (memcpy_s(info.accountNumber, kMaxNumberLen, accountNumber_.c_str(), accountNumber_.length()) == 0) { 139e1c44949Sopenharmony_ci info.speakerphoneOn = isSpeakerphoneOn_; 140e1c44949Sopenharmony_ci info.videoState = videoState_; 141e1c44949Sopenharmony_ci info.startTime = startTime_; 142e1c44949Sopenharmony_ci info.callType = callType_; 143e1c44949Sopenharmony_ci info.callId = callId_; 144e1c44949Sopenharmony_ci info.callState = callState_; 145e1c44949Sopenharmony_ci info.conferenceState = conferenceState_; 146e1c44949Sopenharmony_ci info.callBeginTime = callBeginTime_; 147e1c44949Sopenharmony_ci info.callCreateTime = callCreateTime_; 148e1c44949Sopenharmony_ci info.callEndTime = callEndTime_; 149e1c44949Sopenharmony_ci info.ringBeginTime = ringBeginTime_; 150e1c44949Sopenharmony_ci info.ringEndTime = ringEndTime_; 151e1c44949Sopenharmony_ci info.callDirection = direction_; 152e1c44949Sopenharmony_ci info.answerType = answerType_; 153e1c44949Sopenharmony_ci info.accountId = accountId_; 154e1c44949Sopenharmony_ci info.crsType = crsType_; 155e1c44949Sopenharmony_ci info.originalCallType = originalCallType_; 156e1c44949Sopenharmony_ci info.isEccContact = isEccContact_; 157e1c44949Sopenharmony_ci info.celiaCallType = celiaCallType_; 158e1c44949Sopenharmony_ci info.extraParamsString = AAFwk::WantParamWrapper(extraParams_).ToString(); 159e1c44949Sopenharmony_ci if (memset_s(info.numberLocation, kMaxNumberLen, 0, kMaxNumberLen) != EOK) { 160e1c44949Sopenharmony_ci TELEPHONY_LOGE("memset_s numberLocation fail"); 161e1c44949Sopenharmony_ci return; 162e1c44949Sopenharmony_ci } 163e1c44949Sopenharmony_ci if (memcpy_s(info.numberLocation, kMaxNumberLen, numberLocation_.c_str(), numberLocation_.length()) != EOK) { 164e1c44949Sopenharmony_ci TELEPHONY_LOGE("memcpy_s numberLocation fail"); 165e1c44949Sopenharmony_ci return; 166e1c44949Sopenharmony_ci } 167e1c44949Sopenharmony_ci if (memcpy_s(info.contactName, kMaxNumberLen, contactInfo_.name.c_str(), contactInfo_.name.length()) != EOK) { 168e1c44949Sopenharmony_ci TELEPHONY_LOGE("memcpy_s contact name fail"); 169e1c44949Sopenharmony_ci } 170e1c44949Sopenharmony_ci info.numberMarkInfo = numberMarkInfo_; 171e1c44949Sopenharmony_ci info.blockReason = blockReason_; 172e1c44949Sopenharmony_ci if (bundleName_.length() > static_cast<size_t>(kMaxBundleNameLen)) { 173e1c44949Sopenharmony_ci TELEPHONY_LOGE("Number out of limit!"); 174e1c44949Sopenharmony_ci return; 175e1c44949Sopenharmony_ci } 176e1c44949Sopenharmony_ci errno_t result = memcpy_s(info.bundleName, kMaxBundleNameLen, bundleName_.c_str(), bundleName_.length()); 177e1c44949Sopenharmony_ci if (result != EOK) { 178e1c44949Sopenharmony_ci TELEPHONY_LOGE("memcpy_s failed!"); 179e1c44949Sopenharmony_ci } 180e1c44949Sopenharmony_ci } 181e1c44949Sopenharmony_ci} 182e1c44949Sopenharmony_ci 183e1c44949Sopenharmony_ciint32_t CallBase::GetCallID() 184e1c44949Sopenharmony_ci{ 185e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 186e1c44949Sopenharmony_ci return callId_; 187e1c44949Sopenharmony_ci} 188e1c44949Sopenharmony_ci 189e1c44949Sopenharmony_ciCallType CallBase::GetCallType() 190e1c44949Sopenharmony_ci{ 191e1c44949Sopenharmony_ci return callType_; 192e1c44949Sopenharmony_ci} 193e1c44949Sopenharmony_ci 194e1c44949Sopenharmony_ciCallRunningState CallBase::GetCallRunningState() 195e1c44949Sopenharmony_ci{ 196e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 197e1c44949Sopenharmony_ci return callRunningState_; 198e1c44949Sopenharmony_ci} 199e1c44949Sopenharmony_ci 200e1c44949Sopenharmony_ci// transfer from external call state to callmanager local state 201e1c44949Sopenharmony_ciint32_t CallBase::SetTelCallState(TelCallState nextState) 202e1c44949Sopenharmony_ci{ 203e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 204e1c44949Sopenharmony_ci if (callRunningState_ != CallRunningState::CALL_RUNNING_STATE_CREATE && callState_ == nextState && 205e1c44949Sopenharmony_ci nextState != TelCallState::CALL_STATUS_DIALING) { 206e1c44949Sopenharmony_ci TELEPHONY_LOGI("Call state duplication %{public}d", nextState); 207e1c44949Sopenharmony_ci return CALL_ERR_NOT_NEW_STATE; 208e1c44949Sopenharmony_ci } 209e1c44949Sopenharmony_ci callState_ = nextState; 210e1c44949Sopenharmony_ci switch (nextState) { 211e1c44949Sopenharmony_ci case TelCallState::CALL_STATUS_DIALING: 212e1c44949Sopenharmony_ci StateChangesToDialing(); 213e1c44949Sopenharmony_ci break; 214e1c44949Sopenharmony_ci case TelCallState::CALL_STATUS_INCOMING: 215e1c44949Sopenharmony_ci StateChangesToIncoming(); 216e1c44949Sopenharmony_ci break; 217e1c44949Sopenharmony_ci case TelCallState::CALL_STATUS_WAITING: 218e1c44949Sopenharmony_ci StateChangesToWaiting(); 219e1c44949Sopenharmony_ci break; 220e1c44949Sopenharmony_ci case TelCallState::CALL_STATUS_ACTIVE: 221e1c44949Sopenharmony_ci StateChangesToActive(); 222e1c44949Sopenharmony_ci break; 223e1c44949Sopenharmony_ci case TelCallState::CALL_STATUS_HOLDING: 224e1c44949Sopenharmony_ci StateChangesToHolding(); 225e1c44949Sopenharmony_ci break; 226e1c44949Sopenharmony_ci case TelCallState::CALL_STATUS_DISCONNECTED: 227e1c44949Sopenharmony_ci StateChangesToDisconnected(); 228e1c44949Sopenharmony_ci break; 229e1c44949Sopenharmony_ci case TelCallState::CALL_STATUS_DISCONNECTING: 230e1c44949Sopenharmony_ci StateChangesToDisconnecting(); 231e1c44949Sopenharmony_ci break; 232e1c44949Sopenharmony_ci case TelCallState::CALL_STATUS_ALERTING: 233e1c44949Sopenharmony_ci StateChangesToAlerting(); 234e1c44949Sopenharmony_ci break; 235e1c44949Sopenharmony_ci default: 236e1c44949Sopenharmony_ci break; 237e1c44949Sopenharmony_ci } 238e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 239e1c44949Sopenharmony_ci} 240e1c44949Sopenharmony_ci 241e1c44949Sopenharmony_civoid CallBase::StateChangesToDialing() 242e1c44949Sopenharmony_ci{ 243e1c44949Sopenharmony_ci callRunningState_ = CallRunningState::CALL_RUNNING_STATE_DIALING; 244e1c44949Sopenharmony_ci} 245e1c44949Sopenharmony_ci 246e1c44949Sopenharmony_civoid CallBase::StateChangesToIncoming() 247e1c44949Sopenharmony_ci{ 248e1c44949Sopenharmony_ci callRunningState_ = CallRunningState::CALL_RUNNING_STATE_RINGING; 249e1c44949Sopenharmony_ci ringBeginTime_ = time(nullptr); 250e1c44949Sopenharmony_ci} 251e1c44949Sopenharmony_ci 252e1c44949Sopenharmony_civoid CallBase::StateChangesToWaiting() 253e1c44949Sopenharmony_ci{ 254e1c44949Sopenharmony_ci callRunningState_ = CallRunningState::CALL_RUNNING_STATE_RINGING; 255e1c44949Sopenharmony_ci ringBeginTime_ = time(nullptr); 256e1c44949Sopenharmony_ci} 257e1c44949Sopenharmony_ci 258e1c44949Sopenharmony_civoid CallBase::StateChangesToActive() 259e1c44949Sopenharmony_ci{ 260e1c44949Sopenharmony_ci callRunningState_ = CallRunningState::CALL_RUNNING_STATE_ACTIVE; 261e1c44949Sopenharmony_ci if (callBeginTime_ == 0) { 262e1c44949Sopenharmony_ci callBeginTime_ = ringEndTime_ = time(nullptr); 263e1c44949Sopenharmony_ci if (callType_ == CallType::TYPE_VOIP) { 264e1c44949Sopenharmony_ci struct timeval tv; 265e1c44949Sopenharmony_ci gettimeofday(&tv, nullptr); 266e1c44949Sopenharmony_ci startTime_ = tv.tv_sec * MILLI_TO_BASE + tv.tv_usec / MILLI_TO_BASE; 267e1c44949Sopenharmony_ci } else { 268e1c44949Sopenharmony_ci startTime_ = callBeginTime_; 269e1c44949Sopenharmony_ci } 270e1c44949Sopenharmony_ci answerType_ = CallAnswerType::CALL_ANSWER_ACTIVED; 271e1c44949Sopenharmony_ci } 272e1c44949Sopenharmony_ci} 273e1c44949Sopenharmony_ci 274e1c44949Sopenharmony_civoid CallBase::StateChangesToHolding() 275e1c44949Sopenharmony_ci{ 276e1c44949Sopenharmony_ci callRunningState_ = CallRunningState::CALL_RUNNING_STATE_HOLD; 277e1c44949Sopenharmony_ci if (conferenceState_ == TelConferenceState::TEL_CONFERENCE_ACTIVE) { 278e1c44949Sopenharmony_ci conferenceState_ = TelConferenceState::TEL_CONFERENCE_DISCONNECTED; 279e1c44949Sopenharmony_ci } 280e1c44949Sopenharmony_ci} 281e1c44949Sopenharmony_ci 282e1c44949Sopenharmony_civoid CallBase::StateChangesToDisconnected() 283e1c44949Sopenharmony_ci{ 284e1c44949Sopenharmony_ci callRunningState_ = CallRunningState::CALL_RUNNING_STATE_ENDED; 285e1c44949Sopenharmony_ci if (conferenceState_ == TelConferenceState::TEL_CONFERENCE_DISCONNECTING || 286e1c44949Sopenharmony_ci conferenceState_ == TelConferenceState::TEL_CONFERENCE_ACTIVE) { 287e1c44949Sopenharmony_ci conferenceState_ = TelConferenceState::TEL_CONFERENCE_DISCONNECTED; 288e1c44949Sopenharmony_ci } 289e1c44949Sopenharmony_ci callEndTime_ = time(nullptr); 290e1c44949Sopenharmony_ci if (ringEndTime_ == 0) { 291e1c44949Sopenharmony_ci ringEndTime_ = time(nullptr); 292e1c44949Sopenharmony_ci } 293e1c44949Sopenharmony_ci} 294e1c44949Sopenharmony_ci 295e1c44949Sopenharmony_civoid CallBase::StateChangesToDisconnecting() 296e1c44949Sopenharmony_ci{ 297e1c44949Sopenharmony_ci callRunningState_ = CallRunningState::CALL_RUNNING_STATE_ENDING; 298e1c44949Sopenharmony_ci if (conferenceState_ == TelConferenceState::TEL_CONFERENCE_ACTIVE) { 299e1c44949Sopenharmony_ci conferenceState_ = TelConferenceState::TEL_CONFERENCE_DISCONNECTING; 300e1c44949Sopenharmony_ci } 301e1c44949Sopenharmony_ci if (ringEndTime_ == 0) { 302e1c44949Sopenharmony_ci ringEndTime_ = time(nullptr); 303e1c44949Sopenharmony_ci } 304e1c44949Sopenharmony_ci} 305e1c44949Sopenharmony_ci 306e1c44949Sopenharmony_civoid CallBase::StateChangesToAlerting() 307e1c44949Sopenharmony_ci{ 308e1c44949Sopenharmony_ci callRunningState_ = CallRunningState::CALL_RUNNING_STATE_DIALING; 309e1c44949Sopenharmony_ci ringBeginTime_ = time(nullptr); 310e1c44949Sopenharmony_ci} 311e1c44949Sopenharmony_ci 312e1c44949Sopenharmony_ciTelCallState CallBase::GetTelCallState() 313e1c44949Sopenharmony_ci{ 314e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 315e1c44949Sopenharmony_ci return callState_; 316e1c44949Sopenharmony_ci} 317e1c44949Sopenharmony_ci 318e1c44949Sopenharmony_civoid CallBase::SetAutoAnswerState(bool flag) 319e1c44949Sopenharmony_ci{ 320e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 321e1c44949Sopenharmony_ci autoAnswerState_ = flag; 322e1c44949Sopenharmony_ci TELEPHONY_LOGI("NeedAutoAnswer:%{public}d", autoAnswerState_); 323e1c44949Sopenharmony_ci} 324e1c44949Sopenharmony_ci 325e1c44949Sopenharmony_cibool CallBase::GetAutoAnswerState() 326e1c44949Sopenharmony_ci{ 327e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 328e1c44949Sopenharmony_ci return autoAnswerState_; 329e1c44949Sopenharmony_ci} 330e1c44949Sopenharmony_ci 331e1c44949Sopenharmony_civoid CallBase::SetAnswerVideoState(int32_t videoState) 332e1c44949Sopenharmony_ci{ 333e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 334e1c44949Sopenharmony_ci answerVideoState_ = videoState; 335e1c44949Sopenharmony_ci TELEPHONY_LOGI("set answer video state :%{public}d", answerVideoState_); 336e1c44949Sopenharmony_ci} 337e1c44949Sopenharmony_ci 338e1c44949Sopenharmony_ciint32_t CallBase::GetAnswerVideoState() 339e1c44949Sopenharmony_ci{ 340e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 341e1c44949Sopenharmony_ci return answerVideoState_; 342e1c44949Sopenharmony_ci} 343e1c44949Sopenharmony_ci 344e1c44949Sopenharmony_civoid CallBase::SetCanUnHoldState(bool flag) 345e1c44949Sopenharmony_ci{ 346e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 347e1c44949Sopenharmony_ci canUnHoldState_ = flag; 348e1c44949Sopenharmony_ci TELEPHONY_LOGI("CanUnHoldState:%{public}d", canUnHoldState_); 349e1c44949Sopenharmony_ci} 350e1c44949Sopenharmony_ci 351e1c44949Sopenharmony_cibool CallBase::GetCanUnHoldState() 352e1c44949Sopenharmony_ci{ 353e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 354e1c44949Sopenharmony_ci TELEPHONY_LOGI("CanUnHoldState:%{public}d", canUnHoldState_); 355e1c44949Sopenharmony_ci return canUnHoldState_; 356e1c44949Sopenharmony_ci} 357e1c44949Sopenharmony_ci 358e1c44949Sopenharmony_civoid CallBase::SetCanSwitchCallState(bool flag) 359e1c44949Sopenharmony_ci{ 360e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 361e1c44949Sopenharmony_ci canSwitchCallState_ = flag; 362e1c44949Sopenharmony_ci TELEPHONY_LOGI("CanSwitchCallState:%{public}d", canSwitchCallState_); 363e1c44949Sopenharmony_ci} 364e1c44949Sopenharmony_ci 365e1c44949Sopenharmony_cibool CallBase::GetCanSwitchCallState() 366e1c44949Sopenharmony_ci{ 367e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 368e1c44949Sopenharmony_ci TELEPHONY_LOGI("CanSwitchCallState:%{public}d", canSwitchCallState_); 369e1c44949Sopenharmony_ci return canSwitchCallState_; 370e1c44949Sopenharmony_ci} 371e1c44949Sopenharmony_ci 372e1c44949Sopenharmony_civoid CallBase::SetTelConferenceState(TelConferenceState state) 373e1c44949Sopenharmony_ci{ 374e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 375e1c44949Sopenharmony_ci conferenceState_ = state; 376e1c44949Sopenharmony_ci TELEPHONY_LOGI("SetTelConferenceState, callId:%{public}d, state:%{public}d", callId_, state); 377e1c44949Sopenharmony_ci} 378e1c44949Sopenharmony_ci 379e1c44949Sopenharmony_ciTelConferenceState CallBase::GetTelConferenceState() 380e1c44949Sopenharmony_ci{ 381e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 382e1c44949Sopenharmony_ci return conferenceState_; 383e1c44949Sopenharmony_ci} 384e1c44949Sopenharmony_ci 385e1c44949Sopenharmony_ciVideoStateType CallBase::GetVideoStateType() 386e1c44949Sopenharmony_ci{ 387e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 388e1c44949Sopenharmony_ci return videoState_; 389e1c44949Sopenharmony_ci} 390e1c44949Sopenharmony_ci 391e1c44949Sopenharmony_civoid CallBase::SetVideoStateType(VideoStateType mediaType) 392e1c44949Sopenharmony_ci{ 393e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 394e1c44949Sopenharmony_ci videoState_ = mediaType; 395e1c44949Sopenharmony_ci} 396e1c44949Sopenharmony_ci 397e1c44949Sopenharmony_ciint32_t CallBase::GetCrsType() 398e1c44949Sopenharmony_ci{ 399e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 400e1c44949Sopenharmony_ci return crsType_; 401e1c44949Sopenharmony_ci} 402e1c44949Sopenharmony_ci 403e1c44949Sopenharmony_civoid CallBase::SetCrsType(int32_t crsType) 404e1c44949Sopenharmony_ci{ 405e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 406e1c44949Sopenharmony_ci crsType_ = crsType; 407e1c44949Sopenharmony_ci} 408e1c44949Sopenharmony_ci 409e1c44949Sopenharmony_ciint32_t CallBase::GetOriginalCallType() 410e1c44949Sopenharmony_ci{ 411e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 412e1c44949Sopenharmony_ci return originalCallType_; 413e1c44949Sopenharmony_ci} 414e1c44949Sopenharmony_ci 415e1c44949Sopenharmony_civoid CallBase::SetOriginalCallType(int32_t originalCallType) 416e1c44949Sopenharmony_ci{ 417e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 418e1c44949Sopenharmony_ci originalCallType_ = originalCallType; 419e1c44949Sopenharmony_ci} 420e1c44949Sopenharmony_ci 421e1c44949Sopenharmony_civoid CallBase::SetIsEccContact(bool isEccContact) 422e1c44949Sopenharmony_ci{ 423e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 424e1c44949Sopenharmony_ci isEccContact_ = isEccContact; 425e1c44949Sopenharmony_ci} 426e1c44949Sopenharmony_ci 427e1c44949Sopenharmony_civoid CallBase::SetNumberLocation(std::string numberLocation) 428e1c44949Sopenharmony_ci{ 429e1c44949Sopenharmony_ci CallVoiceAssistantManager::GetInstance()->UpdateNumberLocation(numberLocation, callId_); 430e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 431e1c44949Sopenharmony_ci numberLocation_ = numberLocation; 432e1c44949Sopenharmony_ci} 433e1c44949Sopenharmony_ci 434e1c44949Sopenharmony_ciint32_t CallBase::GetAccountId() 435e1c44949Sopenharmony_ci{ 436e1c44949Sopenharmony_ci return accountId_; 437e1c44949Sopenharmony_ci} 438e1c44949Sopenharmony_ci 439e1c44949Sopenharmony_cistd::string CallBase::GetNumberLocation() 440e1c44949Sopenharmony_ci{ 441e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 442e1c44949Sopenharmony_ci return numberLocation_; 443e1c44949Sopenharmony_ci} 444e1c44949Sopenharmony_ci 445e1c44949Sopenharmony_civoid CallBase::SetPolicyFlag(PolicyFlag flag) 446e1c44949Sopenharmony_ci{ 447e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 448e1c44949Sopenharmony_ci policyFlag_ |= flag; 449e1c44949Sopenharmony_ci} 450e1c44949Sopenharmony_ci 451e1c44949Sopenharmony_ciuint64_t CallBase::GetPolicyFlag() 452e1c44949Sopenharmony_ci{ 453e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 454e1c44949Sopenharmony_ci return policyFlag_; 455e1c44949Sopenharmony_ci} 456e1c44949Sopenharmony_ci 457e1c44949Sopenharmony_ciContactInfo CallBase::GetCallerInfo() 458e1c44949Sopenharmony_ci{ 459e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 460e1c44949Sopenharmony_ci return contactInfo_; 461e1c44949Sopenharmony_ci} 462e1c44949Sopenharmony_ci 463e1c44949Sopenharmony_civoid CallBase::SetCallerInfo(const ContactInfo &info) 464e1c44949Sopenharmony_ci{ 465e1c44949Sopenharmony_ci CallVoiceAssistantManager::GetInstance()->UpdateContactInfo(info, callId_); 466e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 467e1c44949Sopenharmony_ci contactInfo_ = info; 468e1c44949Sopenharmony_ci} 469e1c44949Sopenharmony_ci 470e1c44949Sopenharmony_ciNumberMarkInfo CallBase::GetNumberMarkInfo() 471e1c44949Sopenharmony_ci{ 472e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 473e1c44949Sopenharmony_ci return numberMarkInfo_; 474e1c44949Sopenharmony_ci} 475e1c44949Sopenharmony_ci 476e1c44949Sopenharmony_civoid CallBase::SetNumberMarkInfo(const NumberMarkInfo &numberMarkInfo) 477e1c44949Sopenharmony_ci{ 478e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 479e1c44949Sopenharmony_ci numberMarkInfo_ = numberMarkInfo; 480e1c44949Sopenharmony_ci} 481e1c44949Sopenharmony_ci 482e1c44949Sopenharmony_civoid CallBase::SetBlockReason(const int32_t &blockReason) 483e1c44949Sopenharmony_ci{ 484e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 485e1c44949Sopenharmony_ci blockReason_ = blockReason; 486e1c44949Sopenharmony_ci} 487e1c44949Sopenharmony_ci 488e1c44949Sopenharmony_civoid CallBase::SetCallRunningState(CallRunningState callRunningState) 489e1c44949Sopenharmony_ci{ 490e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 491e1c44949Sopenharmony_ci callRunningState_ = callRunningState; 492e1c44949Sopenharmony_ci} 493e1c44949Sopenharmony_ci 494e1c44949Sopenharmony_civoid CallBase::SetStartTime(int64_t startTime) 495e1c44949Sopenharmony_ci{ 496e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 497e1c44949Sopenharmony_ci startTime_ = startTime; 498e1c44949Sopenharmony_ci} 499e1c44949Sopenharmony_ci 500e1c44949Sopenharmony_civoid CallBase::SetCallBeginTime(time_t callBeginTime) 501e1c44949Sopenharmony_ci{ 502e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 503e1c44949Sopenharmony_ci callBeginTime_ = callBeginTime; 504e1c44949Sopenharmony_ci} 505e1c44949Sopenharmony_ci 506e1c44949Sopenharmony_civoid CallBase::SetCallCreateTime(time_t callCreateTime) 507e1c44949Sopenharmony_ci{ 508e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 509e1c44949Sopenharmony_ci callCreateTime_ = callCreateTime; 510e1c44949Sopenharmony_ci} 511e1c44949Sopenharmony_ci 512e1c44949Sopenharmony_civoid CallBase::SetCallEndTime(time_t callEndTime) 513e1c44949Sopenharmony_ci{ 514e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 515e1c44949Sopenharmony_ci callEndTime_ = callEndTime; 516e1c44949Sopenharmony_ci} 517e1c44949Sopenharmony_ci 518e1c44949Sopenharmony_civoid CallBase::SetRingBeginTime(time_t ringBeginTime) 519e1c44949Sopenharmony_ci{ 520e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 521e1c44949Sopenharmony_ci ringBeginTime_ = ringBeginTime; 522e1c44949Sopenharmony_ci} 523e1c44949Sopenharmony_ci 524e1c44949Sopenharmony_civoid CallBase::SetRingEndTime(time_t ringEndTime) 525e1c44949Sopenharmony_ci{ 526e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 527e1c44949Sopenharmony_ci ringEndTime_ = ringEndTime; 528e1c44949Sopenharmony_ci} 529e1c44949Sopenharmony_ci 530e1c44949Sopenharmony_civoid CallBase::SetAnswerType(CallAnswerType answerType) 531e1c44949Sopenharmony_ci{ 532e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 533e1c44949Sopenharmony_ci answerType_ = answerType; 534e1c44949Sopenharmony_ci} 535e1c44949Sopenharmony_ci 536e1c44949Sopenharmony_ciCallEndedType CallBase::GetCallEndedType() 537e1c44949Sopenharmony_ci{ 538e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 539e1c44949Sopenharmony_ci return callEndedType_; 540e1c44949Sopenharmony_ci} 541e1c44949Sopenharmony_ci 542e1c44949Sopenharmony_ciint32_t CallBase::SetCallEndedType(CallEndedType callEndedType) 543e1c44949Sopenharmony_ci{ 544e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 545e1c44949Sopenharmony_ci callEndedType_ = callEndedType; 546e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 547e1c44949Sopenharmony_ci} 548e1c44949Sopenharmony_ci 549e1c44949Sopenharmony_civoid CallBase::SetCallId(int32_t callId) 550e1c44949Sopenharmony_ci{ 551e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 552e1c44949Sopenharmony_ci callId_ = callId; 553e1c44949Sopenharmony_ci} 554e1c44949Sopenharmony_ci 555e1c44949Sopenharmony_civoid CallBase::SetCeliaCallType(int32_t celiaCallType) 556e1c44949Sopenharmony_ci{ 557e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 558e1c44949Sopenharmony_ci celiaCallType_ = celiaCallType; 559e1c44949Sopenharmony_ci} 560e1c44949Sopenharmony_ci 561e1c44949Sopenharmony_cibool CallBase::CheckVoicemailNumber(std::string phoneNumber) 562e1c44949Sopenharmony_ci{ 563e1c44949Sopenharmony_ci return false; 564e1c44949Sopenharmony_ci} 565e1c44949Sopenharmony_ci 566e1c44949Sopenharmony_cibool CallBase::IsSpeakerphoneEnabled() 567e1c44949Sopenharmony_ci{ 568e1c44949Sopenharmony_ci std::shared_ptr<BluetoothCallManager> bluetoothCallManager = std::make_shared<BluetoothCallManager>(); 569e1c44949Sopenharmony_ci // Gets whether the device can be started from the configuration 570e1c44949Sopenharmony_ci if (bluetoothCallManager->IsBtAvailble()) { 571e1c44949Sopenharmony_ci return false; 572e1c44949Sopenharmony_ci } 573e1c44949Sopenharmony_ci return true; 574e1c44949Sopenharmony_ci} 575e1c44949Sopenharmony_ci 576e1c44949Sopenharmony_cibool CallBase::IsCurrentRinging() 577e1c44949Sopenharmony_ci{ 578e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 579e1c44949Sopenharmony_ci return (callRunningState_ == CallRunningState::CALL_RUNNING_STATE_RINGING) ? true : false; 580e1c44949Sopenharmony_ci} 581e1c44949Sopenharmony_ci 582e1c44949Sopenharmony_cistd::string CallBase::GetAccountNumber() 583e1c44949Sopenharmony_ci{ 584e1c44949Sopenharmony_ci return accountNumber_; 585e1c44949Sopenharmony_ci} 586e1c44949Sopenharmony_ci 587e1c44949Sopenharmony_civoid CallBase::SetAccountNumber(const std::string accountNumber) 588e1c44949Sopenharmony_ci{ 589e1c44949Sopenharmony_ci accountNumber_ = accountNumber; 590e1c44949Sopenharmony_ci} 591e1c44949Sopenharmony_ci 592e1c44949Sopenharmony_cibool CallBase::IsAnsweredCall() 593e1c44949Sopenharmony_ci{ 594e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 595e1c44949Sopenharmony_ci return isAnswered_; 596e1c44949Sopenharmony_ci} 597e1c44949Sopenharmony_ci 598e1c44949Sopenharmony_civoid CallBase::SetAnsweredCall(bool isAnswered) 599e1c44949Sopenharmony_ci{ 600e1c44949Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 601e1c44949Sopenharmony_ci isAnswered_ = isAnswered; 602e1c44949Sopenharmony_ci} 603e1c44949Sopenharmony_ci 604e1c44949Sopenharmony_ciint32_t CallBase::SetSpeakerphoneOn(bool speakerphoneOn) 605e1c44949Sopenharmony_ci{ 606e1c44949Sopenharmony_ci isSpeakerphoneOn_ = speakerphoneOn; 607e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 608e1c44949Sopenharmony_ci} 609e1c44949Sopenharmony_ci 610e1c44949Sopenharmony_cibool CallBase::IsSpeakerphoneOn() 611e1c44949Sopenharmony_ci{ 612e1c44949Sopenharmony_ci return isSpeakerphoneOn_; 613e1c44949Sopenharmony_ci} 614e1c44949Sopenharmony_ci 615e1c44949Sopenharmony_cibool CallBase::IsAliveState() 616e1c44949Sopenharmony_ci{ 617e1c44949Sopenharmony_ci return !(callState_ == TelCallState::CALL_STATUS_IDLE || callState_ == TelCallState::CALL_STATUS_DISCONNECTED || 618e1c44949Sopenharmony_ci callState_ == TelCallState::CALL_STATUS_DISCONNECTING); 619e1c44949Sopenharmony_ci} 620e1c44949Sopenharmony_ci 621e1c44949Sopenharmony_civoid CallBase::SetBundleName(const char *bundleName) 622e1c44949Sopenharmony_ci{ 623e1c44949Sopenharmony_ci bundleName_ = bundleName; 624e1c44949Sopenharmony_ci} 625e1c44949Sopenharmony_ci 626e1c44949Sopenharmony_civoid CallBase::SetCallType(CallType callType) 627e1c44949Sopenharmony_ci{ 628e1c44949Sopenharmony_ci callType_ = callType; 629e1c44949Sopenharmony_ci} 630e1c44949Sopenharmony_ci 631e1c44949Sopenharmony_ciint32_t CallBase::SetMicPhoneState(bool isMuted) 632e1c44949Sopenharmony_ci{ 633e1c44949Sopenharmony_ci isMuted_ = isMuted; 634e1c44949Sopenharmony_ci return TELEPHONY_SUCCESS; 635e1c44949Sopenharmony_ci} 636e1c44949Sopenharmony_ci 637e1c44949Sopenharmony_cibool CallBase::IsMuted() 638e1c44949Sopenharmony_ci{ 639e1c44949Sopenharmony_ci return isMuted_; 640e1c44949Sopenharmony_ci} 641e1c44949Sopenharmony_ci 642e1c44949Sopenharmony_civoid CallBase::SetCallDirection(CallDirection direction) 643e1c44949Sopenharmony_ci{ 644e1c44949Sopenharmony_ci direction_ = direction; 645e1c44949Sopenharmony_ci} 646e1c44949Sopenharmony_ci 647e1c44949Sopenharmony_ciCallDirection CallBase::GetCallDirection() 648e1c44949Sopenharmony_ci{ 649e1c44949Sopenharmony_ci return direction_; 650e1c44949Sopenharmony_ci} 651e1c44949Sopenharmony_ci} // namespace Telephony 652e1c44949Sopenharmony_ci} // namespace OHOS 653