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