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