• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_manager_client.h"
17 
18 #include <memory>
19 
20 #include "ability_manager_client.h"
21 #include "string_wrapper.h"
22 #include "telephony_errors.h"
23 
24 #include "call_manager_proxy.h"
25 
26 #include "parameter.h"
27 
28 namespace OHOS {
29 namespace Telephony {
30 std::shared_ptr<CallManagerProxy> g_callManagerProxy = nullptr;
31 
32 const std::string KEY_VOICECALL_CAP = "const.telephony.voice.capable";
33 const int32_t VOICECALL_CAP_VAL_LEN = 6;
34 
CallManagerClient()35 CallManagerClient::CallManagerClient() {}
36 
~CallManagerClient()37 CallManagerClient::~CallManagerClient() {}
38 
Init(int32_t systemAbilityId)39 void CallManagerClient::Init(int32_t systemAbilityId)
40 {
41     if (g_callManagerProxy == nullptr) {
42         g_callManagerProxy = DelayedSingleton<CallManagerProxy>::GetInstance();
43         if (g_callManagerProxy == nullptr) {
44             TELEPHONY_LOGE("g_callManagerProxy is nullptr");
45             return;
46         }
47         g_callManagerProxy->Init(systemAbilityId);
48     }
49     TELEPHONY_LOGI("CallManagerClient init success!");
50 }
51 
UnInit()52 void CallManagerClient::UnInit()
53 {
54     if (g_callManagerProxy != nullptr) {
55         g_callManagerProxy->UnInit();
56     } else {
57         TELEPHONY_LOGE("init first please!");
58     }
59 }
60 
RegisterCallBack(std::unique_ptr<CallManagerCallback> callback)61 int32_t CallManagerClient::RegisterCallBack(std::unique_ptr<CallManagerCallback> callback)
62 {
63     if (g_callManagerProxy != nullptr) {
64         return g_callManagerProxy->RegisterCallBack(std::move(callback));
65     } else {
66         TELEPHONY_LOGE("init first please!");
67         return TELEPHONY_ERR_UNINIT;
68     }
69 }
70 
UnRegisterCallBack()71 int32_t CallManagerClient::UnRegisterCallBack()
72 {
73     if (g_callManagerProxy != nullptr) {
74         return g_callManagerProxy->UnRegisterCallBack();
75     } else {
76         TELEPHONY_LOGE("init first please!");
77         return TELEPHONY_ERR_UNINIT;
78     }
79 }
80 
DialCall(std::u16string number,AppExecFwk::PacMap & extras)81 int32_t CallManagerClient::DialCall(std::u16string number, AppExecFwk::PacMap &extras)
82 {
83     if (g_callManagerProxy != nullptr) {
84         return g_callManagerProxy->DialCall(number, extras);
85     } else {
86         TELEPHONY_LOGE("init first please!");
87         return TELEPHONY_ERR_UNINIT;
88     }
89 }
90 
MakeCall(std::string number)91 int32_t CallManagerClient::MakeCall(std::string number)
92 {
93     AAFwk::Want want;
94     AppExecFwk::ElementName element("", "com.ohos.contacts", "com.ohos.contacts.MainAbility");
95     want.SetElement(element);
96     AAFwk::WantParams wantParams;
97     wantParams.SetParam("phoneNumber", AAFwk::String::Box(number));
98     wantParams.SetParam("pageFlag", AAFwk::String::Box("page_flag_edit_before_calling"));
99     want.SetParams(wantParams);
100     ErrCode err = AAFwk::AbilityManagerClient::GetInstance()->StartAbility(want);
101     if (err != ERR_OK) {
102         TELEPHONY_LOGE("Fail to make call, err:%{public}d", err);
103         return TELEPHONY_ERR_FAIL;
104     }
105     return TELEPHONY_SUCCESS;
106 }
107 
AnswerCall(int32_t callId,int32_t videoState)108 int32_t CallManagerClient::AnswerCall(int32_t callId, int32_t videoState)
109 {
110     if (g_callManagerProxy != nullptr) {
111         return g_callManagerProxy->AnswerCall(callId, videoState);
112     } else {
113         TELEPHONY_LOGE("init first please!");
114         return TELEPHONY_ERR_UNINIT;
115     }
116 }
117 
RejectCall(int32_t callId,bool isSendSms,std::u16string content)118 int32_t CallManagerClient::RejectCall(int32_t callId, bool isSendSms, std::u16string content)
119 {
120     if (g_callManagerProxy != nullptr) {
121         return g_callManagerProxy->RejectCall(callId, isSendSms, content);
122     } else {
123         TELEPHONY_LOGE("init first please!");
124         return TELEPHONY_ERR_UNINIT;
125     }
126 }
127 
HangUpCall(int32_t callId)128 int32_t CallManagerClient::HangUpCall(int32_t callId)
129 {
130     if (g_callManagerProxy != nullptr) {
131         return g_callManagerProxy->HangUpCall(callId);
132     } else {
133         TELEPHONY_LOGE("init first please!");
134         return TELEPHONY_ERR_UNINIT;
135     }
136 }
137 
GetCallState()138 int32_t CallManagerClient::GetCallState()
139 {
140     if (g_callManagerProxy != nullptr) {
141         return g_callManagerProxy->GetCallState();
142     } else {
143         TELEPHONY_LOGE("init first please!");
144         return TELEPHONY_ERR_UNINIT;
145     }
146 }
147 
HoldCall(int32_t callId)148 int32_t CallManagerClient::HoldCall(int32_t callId)
149 {
150     if (g_callManagerProxy != nullptr) {
151         return g_callManagerProxy->HoldCall(callId);
152     } else {
153         TELEPHONY_LOGE("init first please!");
154         return TELEPHONY_ERR_UNINIT;
155     }
156 }
157 
UnHoldCall(int32_t callId)158 int32_t CallManagerClient::UnHoldCall(int32_t callId)
159 {
160     if (g_callManagerProxy != nullptr) {
161         return g_callManagerProxy->UnHoldCall(callId);
162     } else {
163         TELEPHONY_LOGE("init first please!");
164         return TELEPHONY_ERR_UNINIT;
165     }
166 }
167 
SwitchCall(int32_t callId)168 int32_t CallManagerClient::SwitchCall(int32_t callId)
169 {
170     if (g_callManagerProxy != nullptr) {
171         return g_callManagerProxy->SwitchCall(callId);
172     } else {
173         TELEPHONY_LOGE("init first please!");
174         return TELEPHONY_ERR_UNINIT;
175     }
176 }
177 
CombineConference(int32_t callId)178 int32_t CallManagerClient::CombineConference(int32_t callId)
179 {
180     if (g_callManagerProxy != nullptr) {
181         return g_callManagerProxy->CombineConference(callId);
182     } else {
183         TELEPHONY_LOGE("init first please!");
184         return TELEPHONY_ERR_UNINIT;
185     }
186 }
187 
SeparateConference(int32_t callId)188 int32_t CallManagerClient::SeparateConference(int32_t callId)
189 {
190     if (g_callManagerProxy != nullptr) {
191         return g_callManagerProxy->SeparateConference(callId);
192     } else {
193         TELEPHONY_LOGE("init first please!");
194         return TELEPHONY_ERR_UNINIT;
195     }
196 }
197 
GetMainCallId(int32_t & callId)198 int32_t CallManagerClient::GetMainCallId(int32_t &callId)
199 {
200     if (g_callManagerProxy != nullptr) {
201         return g_callManagerProxy->GetMainCallId(callId);
202     } else {
203         TELEPHONY_LOGE("init first please!");
204         return TELEPHONY_ERR_UNINIT;
205     }
206 }
207 
GetSubCallIdList(int32_t callId)208 std::vector<std::u16string> CallManagerClient::GetSubCallIdList(int32_t callId)
209 {
210     if (g_callManagerProxy != nullptr) {
211         return g_callManagerProxy->GetSubCallIdList(callId);
212     } else {
213         TELEPHONY_LOGE("init first please!");
214         std::vector<std::u16string> vec;
215         vec.clear();
216         return vec;
217     }
218 }
219 
GetCallIdListForConference(int32_t callId)220 std::vector<std::u16string> CallManagerClient::GetCallIdListForConference(int32_t callId)
221 {
222     if (g_callManagerProxy != nullptr) {
223         return g_callManagerProxy->GetCallIdListForConference(callId);
224     } else {
225         TELEPHONY_LOGE("init first please!");
226         std::vector<std::u16string> vec;
227         vec.clear();
228         return vec;
229     }
230 }
231 
GetCallWaiting(int32_t slotId)232 int32_t CallManagerClient::GetCallWaiting(int32_t slotId)
233 {
234     if (g_callManagerProxy != nullptr) {
235         return g_callManagerProxy->GetCallWaiting(slotId);
236     } else {
237         TELEPHONY_LOGE("init first please!");
238         return TELEPHONY_ERR_UNINIT;
239     }
240 }
241 
SetCallWaiting(int32_t slotId,bool activate)242 int32_t CallManagerClient::SetCallWaiting(int32_t slotId, bool activate)
243 {
244     if (g_callManagerProxy != nullptr) {
245         return g_callManagerProxy->SetCallWaiting(slotId, activate);
246     } else {
247         TELEPHONY_LOGE("init first please!");
248         return TELEPHONY_ERR_UNINIT;
249     }
250 }
251 
GetCallRestriction(int32_t slotId,CallRestrictionType type)252 int32_t CallManagerClient::GetCallRestriction(int32_t slotId, CallRestrictionType type)
253 {
254     if (g_callManagerProxy != nullptr) {
255         return g_callManagerProxy->GetCallRestriction(slotId, type);
256     } else {
257         TELEPHONY_LOGE("init first please!");
258         return TELEPHONY_ERR_UNINIT;
259     }
260 }
261 
SetCallRestriction(int32_t slotId,CallRestrictionInfo & info)262 int32_t CallManagerClient::SetCallRestriction(int32_t slotId, CallRestrictionInfo &info)
263 {
264     if (g_callManagerProxy != nullptr) {
265         return g_callManagerProxy->SetCallRestriction(slotId, info);
266     } else {
267         TELEPHONY_LOGE("init first please!");
268         return TELEPHONY_ERR_UNINIT;
269     }
270 }
271 
GetCallTransferInfo(int32_t slotId,CallTransferType type)272 int32_t CallManagerClient::GetCallTransferInfo(int32_t slotId, CallTransferType type)
273 {
274     if (g_callManagerProxy != nullptr) {
275         return g_callManagerProxy->GetCallTransferInfo(slotId, type);
276     } else {
277         TELEPHONY_LOGE("init first please!");
278         return TELEPHONY_ERR_UNINIT;
279     }
280 }
281 
SetCallTransferInfo(int32_t slotId,CallTransferInfo & info)282 int32_t CallManagerClient::SetCallTransferInfo(int32_t slotId, CallTransferInfo &info)
283 {
284     if (g_callManagerProxy != nullptr) {
285         return g_callManagerProxy->SetCallTransferInfo(slotId, info);
286     } else {
287         TELEPHONY_LOGE("init first please!");
288         return TELEPHONY_ERR_UNINIT;
289     }
290 }
291 
SetCallPreferenceMode(int32_t slotId,int32_t mode)292 int32_t CallManagerClient::SetCallPreferenceMode(int32_t slotId, int32_t mode)
293 {
294     if (g_callManagerProxy != nullptr) {
295         return g_callManagerProxy->SetCallPreferenceMode(slotId, mode);
296     } else {
297         TELEPHONY_LOGE("init first please!");
298         return TELEPHONY_ERR_UNINIT;
299     }
300 }
301 
StartDtmf(int32_t callId,char str)302 int32_t CallManagerClient::StartDtmf(int32_t callId, char str)
303 {
304     if (g_callManagerProxy != nullptr) {
305         return g_callManagerProxy->StartDtmf(callId, str);
306     } else {
307         TELEPHONY_LOGE("init first please!");
308         return TELEPHONY_ERR_UNINIT;
309     }
310 }
311 
StopDtmf(int32_t callId)312 int32_t CallManagerClient::StopDtmf(int32_t callId)
313 {
314     if (g_callManagerProxy != nullptr) {
315         return g_callManagerProxy->StopDtmf(callId);
316     } else {
317         TELEPHONY_LOGE("init first please!");
318         return TELEPHONY_ERR_UNINIT;
319     }
320 }
321 
IsRinging()322 bool CallManagerClient::IsRinging()
323 {
324     if (g_callManagerProxy != nullptr) {
325         return g_callManagerProxy->IsRinging();
326     } else {
327         TELEPHONY_LOGE("init first please!");
328         return false;
329     }
330 }
331 
HasCall()332 bool CallManagerClient::HasCall()
333 {
334     if (g_callManagerProxy != nullptr) {
335         return g_callManagerProxy->HasCall();
336     } else {
337         TELEPHONY_LOGE("init first please!");
338         return false;
339     }
340 }
341 
IsNewCallAllowed()342 bool CallManagerClient::IsNewCallAllowed()
343 {
344     if (g_callManagerProxy != nullptr) {
345         return g_callManagerProxy->IsNewCallAllowed();
346     } else {
347         TELEPHONY_LOGE("init first please!");
348         return false;
349     }
350 }
351 
IsInEmergencyCall()352 bool CallManagerClient::IsInEmergencyCall()
353 {
354     if (g_callManagerProxy != nullptr) {
355         return g_callManagerProxy->IsInEmergencyCall();
356     } else {
357         TELEPHONY_LOGE("init first please!");
358         return false;
359     }
360 }
361 
IsEmergencyPhoneNumber(std::u16string & number,int32_t slotId,int32_t & errorCode)362 bool CallManagerClient::IsEmergencyPhoneNumber(std::u16string &number, int32_t slotId, int32_t &errorCode)
363 {
364     if (g_callManagerProxy != nullptr) {
365         return g_callManagerProxy->IsEmergencyPhoneNumber(number, slotId, errorCode);
366     } else {
367         TELEPHONY_LOGE("init first please!");
368         return false;
369     }
370 }
371 
FormatPhoneNumber(std::u16string & number,std::u16string & countryCode,std::u16string & formatNumber)372 int32_t CallManagerClient::FormatPhoneNumber(
373     std::u16string &number, std::u16string &countryCode, std::u16string &formatNumber)
374 {
375     if (g_callManagerProxy != nullptr) {
376         return g_callManagerProxy->FormatPhoneNumber(number, countryCode, formatNumber);
377     } else {
378         TELEPHONY_LOGE("init first please!");
379         return TELEPHONY_ERR_UNINIT;
380     }
381 }
382 
FormatPhoneNumberToE164(std::u16string & number,std::u16string & countryCode,std::u16string & formatNumber)383 int32_t CallManagerClient::FormatPhoneNumberToE164(
384     std::u16string &number, std::u16string &countryCode, std::u16string &formatNumber)
385 {
386     if (g_callManagerProxy != nullptr) {
387         return g_callManagerProxy->FormatPhoneNumberToE164(number, countryCode, formatNumber);
388     } else {
389         TELEPHONY_LOGE("init first please!");
390         return TELEPHONY_ERR_UNINIT;
391     }
392 }
393 
SetMuted(bool isMute)394 int32_t CallManagerClient::SetMuted(bool isMute)
395 {
396     if (g_callManagerProxy != nullptr) {
397         return g_callManagerProxy->SetMuted(isMute);
398     } else {
399         TELEPHONY_LOGE("init first please!");
400         return TELEPHONY_ERR_UNINIT;
401     }
402 }
403 
MuteRinger()404 int32_t CallManagerClient::MuteRinger()
405 {
406     if (g_callManagerProxy != nullptr) {
407         return g_callManagerProxy->MuteRinger();
408     } else {
409         TELEPHONY_LOGE("init first please!");
410         return TELEPHONY_ERR_UNINIT;
411     }
412 }
413 
SetAudioDevice(AudioDevice deviceType)414 int32_t CallManagerClient::SetAudioDevice(AudioDevice deviceType)
415 {
416     if (g_callManagerProxy != nullptr) {
417         return g_callManagerProxy->SetAudioDevice(deviceType);
418     } else {
419         TELEPHONY_LOGE("init first please!");
420         return TELEPHONY_ERR_UNINIT;
421     }
422 }
423 
ControlCamera(std::u16string cameraId)424 int32_t CallManagerClient::ControlCamera(std::u16string cameraId)
425 {
426     if (g_callManagerProxy != nullptr) {
427         return g_callManagerProxy->ControlCamera(cameraId);
428     } else {
429         TELEPHONY_LOGE("init first please!");
430         return TELEPHONY_ERR_UNINIT;
431     }
432 }
433 
SetPreviewWindow(VideoWindow & window)434 int32_t CallManagerClient::SetPreviewWindow(VideoWindow &window)
435 {
436     if (g_callManagerProxy != nullptr) {
437         return g_callManagerProxy->SetPreviewWindow(window);
438     } else {
439         TELEPHONY_LOGE("init first please!");
440         return TELEPHONY_ERR_UNINIT;
441     }
442 }
443 
SetDisplayWindow(VideoWindow & window)444 int32_t CallManagerClient::SetDisplayWindow(VideoWindow &window)
445 {
446     if (g_callManagerProxy != nullptr) {
447         return g_callManagerProxy->SetDisplayWindow(window);
448     } else {
449         TELEPHONY_LOGE("init first please!");
450         return TELEPHONY_ERR_UNINIT;
451     }
452 }
453 
SetCameraZoom(float zoomRatio)454 int32_t CallManagerClient::SetCameraZoom(float zoomRatio)
455 {
456     if (g_callManagerProxy != nullptr) {
457         return g_callManagerProxy->SetCameraZoom(zoomRatio);
458     } else {
459         TELEPHONY_LOGE("init first please!");
460         return TELEPHONY_ERR_UNINIT;
461     }
462 }
463 
SetPausePicture(std::u16string path)464 int32_t CallManagerClient::SetPausePicture(std::u16string path)
465 {
466     if (g_callManagerProxy != nullptr) {
467         return g_callManagerProxy->SetPausePicture(path);
468     } else {
469         TELEPHONY_LOGE("init first please!");
470         return TELEPHONY_ERR_UNINIT;
471     }
472 }
473 
SetDeviceDirection(int32_t rotation)474 int32_t CallManagerClient::SetDeviceDirection(int32_t rotation)
475 {
476     if (g_callManagerProxy != nullptr) {
477         return g_callManagerProxy->SetDeviceDirection(rotation);
478     } else {
479         TELEPHONY_LOGE("init first please!");
480         return TELEPHONY_ERR_UNINIT;
481     }
482 }
483 
GetImsConfig(int32_t slotId,ImsConfigItem item)484 int32_t CallManagerClient::GetImsConfig(int32_t slotId, ImsConfigItem item)
485 {
486     if (g_callManagerProxy != nullptr) {
487         return g_callManagerProxy->GetImsConfig(slotId, item);
488     } else {
489         TELEPHONY_LOGE("init first please!");
490         return TELEPHONY_ERR_UNINIT;
491     }
492 }
493 
SetImsConfig(int32_t slotId,ImsConfigItem item,std::u16string & value)494 int32_t CallManagerClient::SetImsConfig(int32_t slotId, ImsConfigItem item, std::u16string &value)
495 {
496     if (g_callManagerProxy != nullptr) {
497         return g_callManagerProxy->SetImsConfig(slotId, item, value);
498     } else {
499         TELEPHONY_LOGE("init first please!");
500         return TELEPHONY_ERR_UNINIT;
501     }
502 }
503 
GetImsFeatureValue(int32_t slotId,FeatureType type)504 int32_t CallManagerClient::GetImsFeatureValue(int32_t slotId, FeatureType type)
505 {
506     if (g_callManagerProxy != nullptr) {
507         return g_callManagerProxy->GetImsFeatureValue(slotId, type);
508     } else {
509         TELEPHONY_LOGE("init first please!");
510         return TELEPHONY_ERR_UNINIT;
511     }
512 }
513 
SetImsFeatureValue(int32_t slotId,FeatureType type,int32_t value)514 int32_t CallManagerClient::SetImsFeatureValue(int32_t slotId, FeatureType type, int32_t value)
515 {
516     if (g_callManagerProxy != nullptr) {
517         return g_callManagerProxy->SetImsFeatureValue(slotId, type, value);
518     } else {
519         TELEPHONY_LOGE("init first please!");
520         return TELEPHONY_ERR_UNINIT;
521     }
522 }
523 
UpdateImsCallMode(int32_t callId,ImsCallMode mode)524 int32_t CallManagerClient::UpdateImsCallMode(int32_t callId, ImsCallMode mode)
525 {
526     if (g_callManagerProxy != nullptr) {
527         return g_callManagerProxy->UpdateImsCallMode(callId, mode);
528     } else {
529         TELEPHONY_LOGE("init first please!");
530         return TELEPHONY_ERR_UNINIT;
531     }
532 }
533 
EnableImsSwitch(int32_t slotId)534 int32_t CallManagerClient::EnableImsSwitch(int32_t slotId)
535 {
536     if (g_callManagerProxy != nullptr) {
537         return g_callManagerProxy->EnableImsSwitch(slotId);
538     } else {
539         TELEPHONY_LOGE("init first please!");
540         return TELEPHONY_ERR_UNINIT;
541     }
542 }
543 
DisableImsSwitch(int32_t slotId)544 int32_t CallManagerClient::DisableImsSwitch(int32_t slotId)
545 {
546     if (g_callManagerProxy != nullptr) {
547         return g_callManagerProxy->DisableImsSwitch(slotId);
548     } else {
549         TELEPHONY_LOGE("init first please!");
550         return TELEPHONY_ERR_UNINIT;
551     }
552 }
553 
IsImsSwitchEnabled(int32_t slotId)554 int32_t CallManagerClient::IsImsSwitchEnabled(int32_t slotId)
555 {
556     if (g_callManagerProxy != nullptr) {
557         return g_callManagerProxy->IsImsSwitchEnabled(slotId);
558     } else {
559         TELEPHONY_LOGE("init first please!");
560         return TELEPHONY_ERR_UNINIT;
561     }
562 }
563 
EnableLteEnhanceMode(int32_t slotId)564 int32_t CallManagerClient::EnableLteEnhanceMode(int32_t slotId)
565 {
566     if (g_callManagerProxy != nullptr) {
567         return g_callManagerProxy->EnableLteEnhanceMode(slotId);
568     } else {
569         TELEPHONY_LOGE("init first please!");
570         return TELEPHONY_ERR_UNINIT;
571     }
572 }
573 
DisableLteEnhanceMode(int32_t slotId)574 int32_t CallManagerClient::DisableLteEnhanceMode(int32_t slotId)
575 {
576     if (g_callManagerProxy != nullptr) {
577         return g_callManagerProxy->DisableLteEnhanceMode(slotId);
578     } else {
579         TELEPHONY_LOGE("init first please!");
580         return TELEPHONY_ERR_UNINIT;
581     }
582 }
583 
IsLteEnhanceModeEnabled(int32_t slotId)584 int32_t CallManagerClient::IsLteEnhanceModeEnabled(int32_t slotId)
585 {
586     if (g_callManagerProxy != nullptr) {
587         return g_callManagerProxy->IsLteEnhanceModeEnabled(slotId);
588     } else {
589         TELEPHONY_LOGE("init first please!");
590         return TELEPHONY_ERR_UNINIT;
591     }
592 }
593 
StartRtt(int32_t callId,std::u16string & msg)594 int32_t CallManagerClient::StartRtt(int32_t callId, std::u16string &msg)
595 {
596     if (g_callManagerProxy != nullptr) {
597         return g_callManagerProxy->StartRtt(callId, msg);
598     } else {
599         TELEPHONY_LOGE("init first please!");
600         return TELEPHONY_ERR_UNINIT;
601     }
602 }
603 
StopRtt(int32_t callId)604 int32_t CallManagerClient::StopRtt(int32_t callId)
605 {
606     if (g_callManagerProxy != nullptr) {
607         return g_callManagerProxy->StopRtt(callId);
608     } else {
609         TELEPHONY_LOGE("init first please!");
610         return TELEPHONY_ERR_UNINIT;
611     }
612 }
613 
JoinConference(int32_t callId,std::vector<std::u16string> & numberList)614 int32_t CallManagerClient::JoinConference(int32_t callId, std::vector<std::u16string> &numberList)
615 {
616     if (g_callManagerProxy != nullptr) {
617         return g_callManagerProxy->JoinConference(callId, numberList);
618     } else {
619         TELEPHONY_LOGE("init first please!");
620         return TELEPHONY_ERR_UNINIT;
621     }
622 }
623 
ReportOttCallDetailsInfo(std::vector<OttCallDetailsInfo> & ottVec)624 int32_t CallManagerClient::ReportOttCallDetailsInfo(std::vector<OttCallDetailsInfo> &ottVec)
625 {
626     if (g_callManagerProxy != nullptr) {
627         return g_callManagerProxy->ReportOttCallDetailsInfo(ottVec);
628     } else {
629         TELEPHONY_LOGE("init first please!");
630         return TELEPHONY_ERR_UNINIT;
631     }
632 }
633 
ReportOttCallEventInfo(OttCallEventInfo & eventInfo)634 int32_t CallManagerClient::ReportOttCallEventInfo(OttCallEventInfo &eventInfo)
635 {
636     if (g_callManagerProxy != nullptr) {
637         return g_callManagerProxy->ReportOttCallEventInfo(eventInfo);
638     } else {
639         TELEPHONY_LOGE("init first please!");
640         return TELEPHONY_ERR_UNINIT;
641     }
642 }
643 
HasVoiceCapability()644 bool CallManagerClient::HasVoiceCapability()
645 {
646     char retValue[VOICECALL_CAP_VAL_LEN + 1] = {"true"};
647     int retLen = GetParameter(KEY_VOICECALL_CAP.c_str(), "true", retValue, VOICECALL_CAP_VAL_LEN);
648     TELEPHONY_LOGI("HasVoiceCapability retValue %{public}s, retLen %{public}d", retValue, retLen);
649     if (strcmp(retValue, "false") == 0) {
650         return false;
651     }
652     return true;
653 }
654 } // namespace Telephony
655 } // namespace OHOS
656