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