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_LOGD("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 
ObserverOnCallDetailsChange()77 int32_t CallManagerClient::ObserverOnCallDetailsChange()
78 {
79     if (g_callManagerProxy != nullptr) {
80         return g_callManagerProxy->ObserverOnCallDetailsChange();
81     } else {
82         TELEPHONY_LOGE("init first please!");
83         return TELEPHONY_ERR_UNINIT;
84     }
85 }
86 
DialCall(std::u16string number,AppExecFwk::PacMap & extras)87 int32_t CallManagerClient::DialCall(std::u16string number, AppExecFwk::PacMap &extras)
88 {
89     if (g_callManagerProxy != nullptr) {
90         return g_callManagerProxy->DialCall(number, extras);
91     } else {
92         TELEPHONY_LOGE("init first please!");
93         return TELEPHONY_ERR_UNINIT;
94     }
95 }
96 
MakeCall(std::string number)97 int32_t CallManagerClient::MakeCall(std::string number)
98 {
99     if (g_callManagerProxy != nullptr) {
100         return g_callManagerProxy->MakeCall(number);
101     } else {
102         TELEPHONY_LOGE("init first please!");
103         return TELEPHONY_ERR_UNINIT;
104     }
105 }
106 
AnswerCall(int32_t callId,int32_t videoState)107 int32_t CallManagerClient::AnswerCall(int32_t callId, int32_t videoState)
108 {
109     if (g_callManagerProxy != nullptr) {
110         return g_callManagerProxy->AnswerCall(callId, videoState);
111     } else {
112         TELEPHONY_LOGE("init first please!");
113         return TELEPHONY_ERR_UNINIT;
114     }
115 }
116 
RejectCall(int32_t callId,bool isSendSms,std::u16string content)117 int32_t CallManagerClient::RejectCall(int32_t callId, bool isSendSms, std::u16string content)
118 {
119     if (g_callManagerProxy != nullptr) {
120         return g_callManagerProxy->RejectCall(callId, isSendSms, content);
121     } else {
122         TELEPHONY_LOGE("init first please!");
123         return TELEPHONY_ERR_UNINIT;
124     }
125 }
126 
HangUpCall(int32_t callId)127 int32_t CallManagerClient::HangUpCall(int32_t callId)
128 {
129     if (g_callManagerProxy != nullptr) {
130         return g_callManagerProxy->HangUpCall(callId);
131     } else {
132         TELEPHONY_LOGE("init first please!");
133         return TELEPHONY_ERR_UNINIT;
134     }
135 }
136 
GetCallState()137 int32_t CallManagerClient::GetCallState()
138 {
139     if (g_callManagerProxy != nullptr) {
140         return g_callManagerProxy->GetCallState();
141     } else {
142         TELEPHONY_LOGE("init first please!");
143         return TELEPHONY_ERR_UNINIT;
144     }
145 }
146 
RegisterVoipCallManagerCallback()147 int32_t CallManagerClient::RegisterVoipCallManagerCallback()
148 {
149     if (g_callManagerProxy != nullptr) {
150         return g_callManagerProxy->RegisterVoipCallManagerCallback();
151     } else {
152         TELEPHONY_LOGE("init first please!");
153         return TELEPHONY_ERR_UNINIT;
154     }
155 }
156 
UnRegisterVoipCallManagerCallback()157 int32_t CallManagerClient::UnRegisterVoipCallManagerCallback()
158 {
159     if (g_callManagerProxy != nullptr) {
160         return g_callManagerProxy->UnRegisterVoipCallManagerCallback();
161     } else {
162         TELEPHONY_LOGE("init first please!");
163         return TELEPHONY_ERR_UNINIT;
164     }
165 }
166 
HoldCall(int32_t callId)167 int32_t CallManagerClient::HoldCall(int32_t callId)
168 {
169     if (g_callManagerProxy != nullptr) {
170         return g_callManagerProxy->HoldCall(callId);
171     } else {
172         TELEPHONY_LOGE("init first please!");
173         return TELEPHONY_ERR_UNINIT;
174     }
175 }
176 
UnHoldCall(int32_t callId)177 int32_t CallManagerClient::UnHoldCall(int32_t callId)
178 {
179     if (g_callManagerProxy != nullptr) {
180         return g_callManagerProxy->UnHoldCall(callId);
181     } else {
182         TELEPHONY_LOGE("init first please!");
183         return TELEPHONY_ERR_UNINIT;
184     }
185 }
186 
SwitchCall(int32_t callId)187 int32_t CallManagerClient::SwitchCall(int32_t callId)
188 {
189     if (g_callManagerProxy != nullptr) {
190         return g_callManagerProxy->SwitchCall(callId);
191     } else {
192         TELEPHONY_LOGE("init first please!");
193         return TELEPHONY_ERR_UNINIT;
194     }
195 }
196 
CombineConference(int32_t callId)197 int32_t CallManagerClient::CombineConference(int32_t callId)
198 {
199     if (g_callManagerProxy != nullptr) {
200         return g_callManagerProxy->CombineConference(callId);
201     } else {
202         TELEPHONY_LOGE("init first please!");
203         return TELEPHONY_ERR_UNINIT;
204     }
205 }
206 
SeparateConference(int32_t callId)207 int32_t CallManagerClient::SeparateConference(int32_t callId)
208 {
209     if (g_callManagerProxy != nullptr) {
210         return g_callManagerProxy->SeparateConference(callId);
211     } else {
212         TELEPHONY_LOGE("init first please!");
213         return TELEPHONY_ERR_UNINIT;
214     }
215 }
216 
KickOutFromConference(int32_t callId)217 int32_t CallManagerClient::KickOutFromConference(int32_t callId)
218 {
219     if (g_callManagerProxy != nullptr) {
220         return g_callManagerProxy->KickOutFromConference(callId);
221     } else {
222         TELEPHONY_LOGE("init first please!");
223         return TELEPHONY_ERR_UNINIT;
224     }
225 }
226 
GetMainCallId(int32_t & callId,int32_t & mainCallId)227 int32_t CallManagerClient::GetMainCallId(int32_t &callId, int32_t &mainCallId)
228 {
229     if (g_callManagerProxy != nullptr) {
230         return g_callManagerProxy->GetMainCallId(callId, mainCallId);
231     } else {
232         TELEPHONY_LOGE("init first please!");
233         return TELEPHONY_ERR_UNINIT;
234     }
235 }
236 
GetSubCallIdList(int32_t callId,std::vector<std::u16string> & callIdList)237 int32_t CallManagerClient::GetSubCallIdList(int32_t callId, std::vector<std::u16string> &callIdList)
238 {
239     if (g_callManagerProxy != nullptr) {
240         return g_callManagerProxy->GetSubCallIdList(callId, callIdList);
241     } else {
242         TELEPHONY_LOGE("init first please!");
243         callIdList.clear();
244         return TELEPHONY_ERR_UNINIT;
245     }
246 }
247 
GetCallIdListForConference(int32_t callId,std::vector<std::u16string> & callIdList)248 int32_t CallManagerClient::GetCallIdListForConference(int32_t callId, std::vector<std::u16string> &callIdList)
249 {
250     if (g_callManagerProxy != nullptr) {
251         return g_callManagerProxy->GetCallIdListForConference(callId, callIdList);
252     } else {
253         TELEPHONY_LOGE("init first please!");
254         callIdList.clear();
255         return TELEPHONY_ERR_UNINIT;
256     }
257 }
258 
GetCallWaiting(int32_t slotId)259 int32_t CallManagerClient::GetCallWaiting(int32_t slotId)
260 {
261     if (g_callManagerProxy != nullptr) {
262         return g_callManagerProxy->GetCallWaiting(slotId);
263     } else {
264         TELEPHONY_LOGE("[slot%{public}d] init first please!", slotId);
265         return TELEPHONY_ERR_UNINIT;
266     }
267 }
268 
SetCallWaiting(int32_t slotId,bool activate)269 int32_t CallManagerClient::SetCallWaiting(int32_t slotId, bool activate)
270 {
271     if (g_callManagerProxy != nullptr) {
272         return g_callManagerProxy->SetCallWaiting(slotId, activate);
273     } else {
274         TELEPHONY_LOGE("[slot%{public}d] init first please!", slotId);
275         return TELEPHONY_ERR_UNINIT;
276     }
277 }
278 
GetCallRestriction(int32_t slotId,CallRestrictionType type)279 int32_t CallManagerClient::GetCallRestriction(int32_t slotId, CallRestrictionType type)
280 {
281     if (g_callManagerProxy != nullptr) {
282         return g_callManagerProxy->GetCallRestriction(slotId, type);
283     } else {
284         TELEPHONY_LOGE("[slot%{public}d] init first please!", slotId);
285         return TELEPHONY_ERR_UNINIT;
286     }
287 }
288 
SetCallRestriction(int32_t slotId,CallRestrictionInfo & info)289 int32_t CallManagerClient::SetCallRestriction(int32_t slotId, CallRestrictionInfo &info)
290 {
291     if (g_callManagerProxy != nullptr) {
292         return g_callManagerProxy->SetCallRestriction(slotId, info);
293     } else {
294         TELEPHONY_LOGE("[slot%{public}d] init first please!", slotId);
295         return TELEPHONY_ERR_UNINIT;
296     }
297 }
298 
SetCallRestrictionPassword(int32_t slotId,CallRestrictionType fac,const char * oldPassword,const char * newPassword)299 int32_t CallManagerClient::SetCallRestrictionPassword(
300     int32_t slotId, CallRestrictionType fac, const char *oldPassword, const char *newPassword)
301 {
302     if (g_callManagerProxy != nullptr) {
303         return g_callManagerProxy->SetCallRestrictionPassword(slotId, fac, oldPassword, newPassword);
304     } else {
305         TELEPHONY_LOGE("[slot%{public}d] init first please!", slotId);
306         return TELEPHONY_ERR_UNINIT;
307     }
308 }
309 
GetCallTransferInfo(int32_t slotId,CallTransferType type)310 int32_t CallManagerClient::GetCallTransferInfo(int32_t slotId, CallTransferType type)
311 {
312     if (g_callManagerProxy != nullptr) {
313         return g_callManagerProxy->GetCallTransferInfo(slotId, type);
314     } else {
315         TELEPHONY_LOGE("[slot%{public}d] init first please!", slotId);
316         return TELEPHONY_ERR_UNINIT;
317     }
318 }
319 
SetCallTransferInfo(int32_t slotId,CallTransferInfo & info)320 int32_t CallManagerClient::SetCallTransferInfo(int32_t slotId, CallTransferInfo &info)
321 {
322     if (g_callManagerProxy != nullptr) {
323         return g_callManagerProxy->SetCallTransferInfo(slotId, info);
324     } else {
325         TELEPHONY_LOGE("[slot%{public}d] init first please!", slotId);
326         return TELEPHONY_ERR_UNINIT;
327     }
328 }
329 
CanSetCallTransferTime(int32_t slotId,bool & result)330 int32_t CallManagerClient::CanSetCallTransferTime(int32_t slotId, bool &result)
331 {
332     if (g_callManagerProxy != nullptr) {
333         return g_callManagerProxy->CanSetCallTransferTime(slotId, result);
334     } else {
335         TELEPHONY_LOGE("[slot%{public}d] init first please!", slotId);
336         return TELEPHONY_ERR_UNINIT;
337     }
338 }
339 
SetCallPreferenceMode(int32_t slotId,int32_t mode)340 int32_t CallManagerClient::SetCallPreferenceMode(int32_t slotId, int32_t mode)
341 {
342     if (g_callManagerProxy != nullptr) {
343         return g_callManagerProxy->SetCallPreferenceMode(slotId, mode);
344     } else {
345         TELEPHONY_LOGE("[slot%{public}d] init first please!", slotId);
346         return TELEPHONY_ERR_UNINIT;
347     }
348 }
349 
StartDtmf(int32_t callId,char str)350 int32_t CallManagerClient::StartDtmf(int32_t callId, char str)
351 {
352     if (g_callManagerProxy != nullptr) {
353         return g_callManagerProxy->StartDtmf(callId, str);
354     } else {
355         TELEPHONY_LOGE("init first please!");
356         return TELEPHONY_ERR_UNINIT;
357     }
358 }
359 
StopDtmf(int32_t callId)360 int32_t CallManagerClient::StopDtmf(int32_t callId)
361 {
362     if (g_callManagerProxy != nullptr) {
363         return g_callManagerProxy->StopDtmf(callId);
364     } else {
365         TELEPHONY_LOGE("init first please!");
366         return TELEPHONY_ERR_UNINIT;
367     }
368 }
369 
PostDialProceed(int32_t callId,bool proceed)370 int32_t CallManagerClient::PostDialProceed(int32_t callId, bool proceed)
371 {
372     if (g_callManagerProxy != nullptr) {
373         return g_callManagerProxy->PostDialProceed(callId, proceed);
374     } else {
375         TELEPHONY_LOGE("init first please!");
376         return TELEPHONY_ERR_UNINIT;
377     }
378 }
379 
IsRinging(bool & enabled)380 int32_t CallManagerClient::IsRinging(bool &enabled)
381 {
382     if (g_callManagerProxy != nullptr) {
383         return g_callManagerProxy->IsRinging(enabled);
384     } else {
385         TELEPHONY_LOGE("init first please!");
386         return TELEPHONY_ERR_UNINIT;
387     }
388 }
389 
HasCall()390 bool CallManagerClient::HasCall()
391 {
392     if (g_callManagerProxy != nullptr) {
393         return g_callManagerProxy->HasCall();
394     } else {
395         TELEPHONY_LOGE("init first please!");
396         return false;
397     }
398 }
399 
IsNewCallAllowed(bool & enabled)400 int32_t CallManagerClient::IsNewCallAllowed(bool &enabled)
401 {
402     if (g_callManagerProxy != nullptr) {
403         return g_callManagerProxy->IsNewCallAllowed(enabled);
404     } else {
405         TELEPHONY_LOGE("init first please!");
406         return TELEPHONY_ERR_UNINIT;
407     }
408 }
409 
IsInEmergencyCall(bool & enabled)410 int32_t CallManagerClient::IsInEmergencyCall(bool &enabled)
411 {
412     if (g_callManagerProxy != nullptr) {
413         return g_callManagerProxy->IsInEmergencyCall(enabled);
414     } else {
415         TELEPHONY_LOGE("init first please!");
416         return TELEPHONY_ERR_UNINIT;
417     }
418 }
419 
IsEmergencyPhoneNumber(std::u16string & number,int32_t slotId,bool & enabled)420 int32_t CallManagerClient::IsEmergencyPhoneNumber(std::u16string &number, int32_t slotId, bool &enabled)
421 {
422     if (g_callManagerProxy != nullptr) {
423         return g_callManagerProxy->IsEmergencyPhoneNumber(number, slotId, enabled);
424     } else {
425         TELEPHONY_LOGE("[slot%{public}d] init first please!", slotId);
426         return TELEPHONY_ERR_UNINIT;
427     }
428 }
429 
FormatPhoneNumber(std::u16string & number,std::u16string & countryCode,std::u16string & formatNumber)430 int32_t CallManagerClient::FormatPhoneNumber(
431     std::u16string &number, std::u16string &countryCode, std::u16string &formatNumber)
432 {
433     if (g_callManagerProxy != nullptr) {
434         return g_callManagerProxy->FormatPhoneNumber(number, countryCode, formatNumber);
435     } else {
436         TELEPHONY_LOGE("init first please!");
437         return TELEPHONY_ERR_UNINIT;
438     }
439 }
440 
FormatPhoneNumberToE164(std::u16string & number,std::u16string & countryCode,std::u16string & formatNumber)441 int32_t CallManagerClient::FormatPhoneNumberToE164(
442     std::u16string &number, std::u16string &countryCode, std::u16string &formatNumber)
443 {
444     if (g_callManagerProxy != nullptr) {
445         return g_callManagerProxy->FormatPhoneNumberToE164(number, countryCode, formatNumber);
446     } else {
447         TELEPHONY_LOGE("init first please!");
448         return TELEPHONY_ERR_UNINIT;
449     }
450 }
451 
SetMuted(bool isMute)452 int32_t CallManagerClient::SetMuted(bool isMute)
453 {
454     if (g_callManagerProxy != nullptr) {
455         return g_callManagerProxy->SetMuted(isMute);
456     } else {
457         TELEPHONY_LOGE("init first please!");
458         return TELEPHONY_ERR_UNINIT;
459     }
460 }
461 
MuteRinger()462 int32_t CallManagerClient::MuteRinger()
463 {
464     if (g_callManagerProxy != nullptr) {
465         return g_callManagerProxy->MuteRinger();
466     } else {
467         TELEPHONY_LOGE("init first please!");
468         return TELEPHONY_ERR_UNINIT;
469     }
470 }
471 
SetAudioDevice(const AudioDevice & audioDevice)472 int32_t CallManagerClient::SetAudioDevice(const AudioDevice &audioDevice)
473 {
474     if (g_callManagerProxy != nullptr) {
475         return g_callManagerProxy->SetAudioDevice(audioDevice);
476     } else {
477         TELEPHONY_LOGE("init first please!");
478         return TELEPHONY_ERR_UNINIT;
479     }
480 }
481 
ControlCamera(int32_t callId,std::u16string cameraId)482 int32_t CallManagerClient::ControlCamera(int32_t callId, std::u16string cameraId)
483 {
484     if (g_callManagerProxy != nullptr) {
485         return g_callManagerProxy->ControlCamera(callId, cameraId);
486     } else {
487         TELEPHONY_LOGE("init first please!");
488         return TELEPHONY_ERR_UNINIT;
489     }
490 }
491 
SetPreviewWindow(int32_t callId,std::string & surfaceId)492 int32_t CallManagerClient::SetPreviewWindow(int32_t callId, std::string &surfaceId)
493 {
494     if (g_callManagerProxy != nullptr) {
495         return g_callManagerProxy->SetPreviewWindow(callId, surfaceId);
496     } else {
497         TELEPHONY_LOGE("init first please!");
498         return TELEPHONY_ERR_UNINIT;
499     }
500 }
501 
SetDisplayWindow(int32_t callId,std::string & surfaceId)502 int32_t CallManagerClient::SetDisplayWindow(int32_t callId, std::string &surfaceId)
503 {
504     if (g_callManagerProxy != nullptr) {
505         return g_callManagerProxy->SetDisplayWindow(callId, surfaceId);
506     } else {
507         TELEPHONY_LOGE("init first please!");
508         return TELEPHONY_ERR_UNINIT;
509     }
510 }
511 
SetCameraZoom(float zoomRatio)512 int32_t CallManagerClient::SetCameraZoom(float zoomRatio)
513 {
514     if (g_callManagerProxy != nullptr) {
515         return g_callManagerProxy->SetCameraZoom(zoomRatio);
516     } else {
517         TELEPHONY_LOGE("init first please!");
518         return TELEPHONY_ERR_UNINIT;
519     }
520 }
521 
SetPausePicture(int32_t callId,std::u16string path)522 int32_t CallManagerClient::SetPausePicture(int32_t callId, std::u16string path)
523 {
524     if (g_callManagerProxy != nullptr) {
525         return g_callManagerProxy->SetPausePicture(callId, path);
526     } else {
527         TELEPHONY_LOGE("init first please!");
528         return TELEPHONY_ERR_UNINIT;
529     }
530 }
531 
SetDeviceDirection(int32_t callId,int32_t rotation)532 int32_t CallManagerClient::SetDeviceDirection(int32_t callId, int32_t rotation)
533 {
534     if (g_callManagerProxy != nullptr) {
535         return g_callManagerProxy->SetDeviceDirection(callId, rotation);
536     } else {
537         TELEPHONY_LOGE("init first please!");
538         return TELEPHONY_ERR_UNINIT;
539     }
540 }
541 
GetImsConfig(int32_t slotId,ImsConfigItem item)542 int32_t CallManagerClient::GetImsConfig(int32_t slotId, ImsConfigItem item)
543 {
544     if (g_callManagerProxy != nullptr) {
545         return g_callManagerProxy->GetImsConfig(slotId, item);
546     } else {
547         TELEPHONY_LOGE("[slot%{public}d] init first please!", slotId);
548         return TELEPHONY_ERR_UNINIT;
549     }
550 }
551 
SetImsConfig(int32_t slotId,ImsConfigItem item,std::u16string & value)552 int32_t CallManagerClient::SetImsConfig(int32_t slotId, ImsConfigItem item, std::u16string &value)
553 {
554     if (g_callManagerProxy != nullptr) {
555         return g_callManagerProxy->SetImsConfig(slotId, item, value);
556     } else {
557         TELEPHONY_LOGE("[slot%{public}d] init first please!", slotId);
558         return TELEPHONY_ERR_UNINIT;
559     }
560 }
561 
GetImsFeatureValue(int32_t slotId,FeatureType type)562 int32_t CallManagerClient::GetImsFeatureValue(int32_t slotId, FeatureType type)
563 {
564     if (g_callManagerProxy != nullptr) {
565         return g_callManagerProxy->GetImsFeatureValue(slotId, type);
566     } else {
567         TELEPHONY_LOGE("[slot%{public}d] init first please!", slotId);
568         return TELEPHONY_ERR_UNINIT;
569     }
570 }
571 
SetImsFeatureValue(int32_t slotId,FeatureType type,int32_t value)572 int32_t CallManagerClient::SetImsFeatureValue(int32_t slotId, FeatureType type, int32_t value)
573 {
574     if (g_callManagerProxy != nullptr) {
575         return g_callManagerProxy->SetImsFeatureValue(slotId, type, value);
576     } else {
577         TELEPHONY_LOGE("[slot%{public}d] init first please!", slotId);
578         return TELEPHONY_ERR_UNINIT;
579     }
580 }
581 
UpdateImsCallMode(int32_t callId,ImsCallMode mode)582 int32_t CallManagerClient::UpdateImsCallMode(int32_t callId, ImsCallMode mode)
583 {
584     if (g_callManagerProxy != nullptr) {
585         return g_callManagerProxy->UpdateImsCallMode(callId, mode);
586     } else {
587         TELEPHONY_LOGE("init first please!");
588         return TELEPHONY_ERR_UNINIT;
589     }
590 }
591 
EnableImsSwitch(int32_t slotId)592 int32_t CallManagerClient::EnableImsSwitch(int32_t slotId)
593 {
594     if (g_callManagerProxy != nullptr) {
595         return g_callManagerProxy->EnableImsSwitch(slotId);
596     } else {
597         TELEPHONY_LOGE("[slot%{public}d] init first please!", slotId);
598         return TELEPHONY_ERR_UNINIT;
599     }
600 }
601 
DisableImsSwitch(int32_t slotId)602 int32_t CallManagerClient::DisableImsSwitch(int32_t slotId)
603 {
604     if (g_callManagerProxy != nullptr) {
605         return g_callManagerProxy->DisableImsSwitch(slotId);
606     } else {
607         TELEPHONY_LOGE("[slot%{public}d] init first please!", slotId);
608         return TELEPHONY_ERR_UNINIT;
609     }
610 }
611 
IsImsSwitchEnabled(int32_t slotId,bool & enabled)612 int32_t CallManagerClient::IsImsSwitchEnabled(int32_t slotId, bool &enabled)
613 {
614     if (g_callManagerProxy != nullptr) {
615         return g_callManagerProxy->IsImsSwitchEnabled(slotId, enabled);
616     } else {
617         TELEPHONY_LOGE("[slot%{public}d] init first please!", slotId);
618         return TELEPHONY_ERR_UNINIT;
619     }
620 }
621 
SetVoNRState(int32_t slotId,int32_t state)622 int32_t CallManagerClient::SetVoNRState(int32_t slotId, int32_t state)
623 {
624     if (g_callManagerProxy != nullptr) {
625         return g_callManagerProxy->SetVoNRState(slotId, state);
626     } else {
627         TELEPHONY_LOGE("[slot%{public}d] init first please!", slotId);
628         return TELEPHONY_ERR_UNINIT;
629     }
630 }
631 
GetVoNRState(int32_t slotId,int32_t & state)632 int32_t CallManagerClient::GetVoNRState(int32_t slotId, int32_t &state)
633 {
634     if (g_callManagerProxy != nullptr) {
635         return g_callManagerProxy->GetVoNRState(slotId, state);
636     } else {
637         TELEPHONY_LOGE("[slot%{public}d] init first please!", slotId);
638         return TELEPHONY_ERR_UNINIT;
639     }
640 }
641 
StartRtt(int32_t callId,std::u16string & msg)642 int32_t CallManagerClient::StartRtt(int32_t callId, std::u16string &msg)
643 {
644     if (g_callManagerProxy != nullptr) {
645         return g_callManagerProxy->StartRtt(callId, msg);
646     } else {
647         TELEPHONY_LOGE("init first please!");
648         return TELEPHONY_ERR_UNINIT;
649     }
650 }
651 
StopRtt(int32_t callId)652 int32_t CallManagerClient::StopRtt(int32_t callId)
653 {
654     if (g_callManagerProxy != nullptr) {
655         return g_callManagerProxy->StopRtt(callId);
656     } else {
657         TELEPHONY_LOGE("init first please!");
658         return TELEPHONY_ERR_UNINIT;
659     }
660 }
661 
JoinConference(int32_t callId,std::vector<std::u16string> & numberList)662 int32_t CallManagerClient::JoinConference(int32_t callId, std::vector<std::u16string> &numberList)
663 {
664     if (g_callManagerProxy != nullptr) {
665         return g_callManagerProxy->JoinConference(callId, numberList);
666     } else {
667         TELEPHONY_LOGE("init first please!");
668         return TELEPHONY_ERR_UNINIT;
669     }
670 }
671 
ReportOttCallDetailsInfo(std::vector<OttCallDetailsInfo> & ottVec)672 int32_t CallManagerClient::ReportOttCallDetailsInfo(std::vector<OttCallDetailsInfo> &ottVec)
673 {
674     if (g_callManagerProxy != nullptr) {
675         return g_callManagerProxy->ReportOttCallDetailsInfo(ottVec);
676     } else {
677         TELEPHONY_LOGE("init first please!");
678         return TELEPHONY_ERR_UNINIT;
679     }
680 }
681 
ReportOttCallEventInfo(OttCallEventInfo & eventInfo)682 int32_t CallManagerClient::ReportOttCallEventInfo(OttCallEventInfo &eventInfo)
683 {
684     if (g_callManagerProxy != nullptr) {
685         return g_callManagerProxy->ReportOttCallEventInfo(eventInfo);
686     } else {
687         TELEPHONY_LOGE("init first please!");
688         return TELEPHONY_ERR_UNINIT;
689     }
690 }
691 
CloseUnFinishedUssd(int32_t slotId)692 int32_t CallManagerClient::CloseUnFinishedUssd(int32_t slotId)
693 {
694     if (g_callManagerProxy != nullptr) {
695         return g_callManagerProxy->CloseUnFinishedUssd(slotId);
696     } else {
697         TELEPHONY_LOGE("[slot%{public}d] init first please!", slotId);
698         return TELEPHONY_ERR_UNINIT;
699     }
700 }
701 
InputDialerSpecialCode(const std::string & specialCode)702 int32_t CallManagerClient::InputDialerSpecialCode(const std::string &specialCode)
703 {
704     if (g_callManagerProxy == nullptr) {
705         TELEPHONY_LOGE("init first please!");
706         return TELEPHONY_ERR_UNINIT;
707     }
708     return g_callManagerProxy->InputDialerSpecialCode(specialCode);
709 }
710 
RemoveMissedIncomingCallNotification()711 int32_t CallManagerClient::RemoveMissedIncomingCallNotification()
712 {
713     if (g_callManagerProxy == nullptr) {
714         TELEPHONY_LOGE("init first please!");
715         return TELEPHONY_ERR_UNINIT;
716     }
717     return g_callManagerProxy->RemoveMissedIncomingCallNotification();
718 }
719 
SetVoIPCallState(int32_t state)720 int32_t CallManagerClient::SetVoIPCallState(int32_t state)
721 {
722     if (g_callManagerProxy != nullptr) {
723         return g_callManagerProxy->SetVoIPCallState(state);
724     } else {
725         TELEPHONY_LOGE("init first please!");
726         return TELEPHONY_ERR_UNINIT;
727     }
728 }
729 
GetVoIPCallState(int32_t & state)730 int32_t CallManagerClient::GetVoIPCallState(int32_t &state)
731 {
732     if (g_callManagerProxy != nullptr) {
733         return g_callManagerProxy->GetVoIPCallState(state);
734     } else {
735         TELEPHONY_LOGE("init first please!");
736         return TELEPHONY_ERR_UNINIT;
737     }
738 }
739 
HasVoiceCapability()740 bool CallManagerClient::HasVoiceCapability()
741 {
742     char retValue[VOICECALL_CAP_VAL_LEN + 1] = {"true"};
743     int retLen = GetParameter(KEY_VOICECALL_CAP.c_str(), "true", retValue, VOICECALL_CAP_VAL_LEN);
744     TELEPHONY_LOGI("HasVoiceCapability retValue %{public}s, retLen %{public}d", retValue, retLen);
745     if (strcmp(retValue, "false") == 0) {
746         return false;
747     }
748     return true;
749 }
750 
ReportAudioDeviceInfo()751 int32_t CallManagerClient::ReportAudioDeviceInfo()
752 {
753     if (g_callManagerProxy != nullptr) {
754         return g_callManagerProxy->ReportAudioDeviceInfo();
755     } else {
756         TELEPHONY_LOGE("init first please!");
757         return TELEPHONY_ERR_UNINIT;
758     }
759 }
760 
CancelCallUpgrade(int32_t callId)761 int32_t CallManagerClient::CancelCallUpgrade(int32_t callId)
762 {
763     if (g_callManagerProxy != nullptr) {
764         return g_callManagerProxy->CancelCallUpgrade(callId);
765     } else {
766         TELEPHONY_LOGE("init first please!");
767         return TELEPHONY_ERR_UNINIT;
768     }
769 }
770 
RequestCameraCapabilities(int32_t callId)771 int32_t CallManagerClient::RequestCameraCapabilities(int32_t callId)
772 {
773     if (g_callManagerProxy != nullptr) {
774         return g_callManagerProxy->RequestCameraCapabilities(callId);
775     } else {
776         TELEPHONY_LOGE("init first please!");
777         return TELEPHONY_ERR_UNINIT;
778     }
779 }
780 
SendCallUiEvent(int32_t callId,std::string & eventName)781 int32_t CallManagerClient::SendCallUiEvent(int32_t callId, std::string &eventName)
782 {
783     if (g_callManagerProxy != nullptr) {
784         return g_callManagerProxy->SendCallUiEvent(callId, eventName);
785     } else {
786         TELEPHONY_LOGE("init first please!");
787         return TELEPHONY_ERR_UNINIT;
788     }
789 }
790 } // namespace Telephony
791 } // namespace OHOS
792