• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021-2023 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_service.h"
17 
18 #include "audio_device_manager.h"
19 #include "bluetooth_call_service.h"
20 #include "call_ability_report_proxy.h"
21 #include "call_manager_dump_helper.h"
22 #include "call_manager_errors.h"
23 #include "call_manager_hisysevent.h"
24 #include "call_records_manager.h"
25 #include "cellular_call_connection.h"
26 #include "common_type.h"
27 #include "core_manager_inner.h"
28 #include "hitrace_meter.h"
29 #include "ipc_skeleton.h"
30 #include "report_call_info_handler.h"
31 #include "telephony_log_wrapper.h"
32 #include "telephony_permission.h"
33 #include "video_control_manager.h"
34 #include "voip_call_connection.h"
35 #include "distributed_call_manager.h"
36 
37 namespace OHOS {
38 namespace Telephony {
39 static constexpr const char *OHOS_PERMISSION_SET_TELEPHONY_STATE = "ohos.permission.SET_TELEPHONY_STATE";
40 static constexpr const char *OHOS_PERMISSION_GET_TELEPHONY_STATE = "ohos.permission.GET_TELEPHONY_STATE";
41 static constexpr const char *OHOS_PERMISSION_PLACE_CALL = "ohos.permission.PLACE_CALL";
42 static constexpr const char *OHOS_PERMISSION_ANSWER_CALL = "ohos.permission.ANSWER_CALL";
43 static constexpr const char *OHOS_PERMISSION_READ_CALL_LOG = "ohos.permission.READ_CALL_LOG";
44 static constexpr const char *OHOS_PERMISSION_WRITE_CALL_LOG = "ohos.permission.WRITE_CALL_LOG";
45 static constexpr const char *SLOT_ID = "accountId";
46 static constexpr const char *CALL_TYPE = "callType";
47 static constexpr const char *VIDEO_STATE = "videoState";
48 static constexpr int32_t CLEAR_VOICE_MAIL_COUNT = 0;
49 
50 const bool g_registerResult =
51     SystemAbility::MakeAndRegisterAbility(DelayedSingleton<CallManagerService>::GetInstance().get());
52 
CallManagerService()53 CallManagerService::CallManagerService()
54     : SystemAbility(TELEPHONY_CALL_MANAGER_SYS_ABILITY_ID, true), callControlManagerPtr_(nullptr)
55 {}
56 
~CallManagerService()57 CallManagerService::~CallManagerService()
58 {
59     UnInit();
60 }
61 
Init()62 bool CallManagerService::Init()
63 {
64     if (!DelayedSingleton<CallControlManager>::GetInstance()->Init()) {
65         TELEPHONY_LOGE("CallControlManager init failed!");
66         return false;
67     }
68     callControlManagerPtr_ = DelayedSingleton<CallControlManager>::GetInstance();
69     if (callControlManagerPtr_ == nullptr) {
70         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
71         return false;
72     }
73     DelayedSingleton<ReportCallInfoHandler>::GetInstance()->Init();
74     DelayedSingleton<CellularCallConnection>::GetInstance()->Init(TELEPHONY_CELLULAR_CALL_SYS_ABILITY_ID);
75     DelayedSingleton<CallRecordsManager>::GetInstance()->Init();
76     DelayedSingleton<BluetoothConnection>::GetInstance()->Init();
77     DelayedSingleton<DistributedCallManager>::GetInstance()->Init();
78     return true;
79 }
80 
UnInit()81 void CallManagerService::UnInit()
82 {
83     DelayedSingleton<CellularCallConnection>::GetInstance()->UnInit();
84     callControlManagerPtr_ = nullptr;
85 }
86 
OnStart()87 void CallManagerService::OnStart()
88 {
89     using namespace std::chrono;
90     time_point<high_resolution_clock> beginTime = high_resolution_clock::now();
91     std::lock_guard<std::mutex> guard(lock_);
92     if (state_ == ServiceRunningState::STATE_RUNNING) {
93         return;
94     }
95 
96     if (!Init()) {
97         TELEPHONY_LOGE("Leave, init failed!");
98         return;
99     }
100 
101     bool ret = SystemAbility::Publish(DelayedSingleton<CallManagerService>::GetInstance().get());
102     if (!ret) {
103         TELEPHONY_LOGE("Leave, publishing CallManagerService failed!");
104         return;
105     }
106     TELEPHONY_LOGI("Publish CallManagerService SUCCESS");
107 
108     state_ = ServiceRunningState::STATE_RUNNING;
109     struct tm *timeNow = nullptr;
110     struct tm nowTime = { 0 };
111     time_t second = time(0);
112     if (second < 0) {
113         return;
114     }
115     timeNow = localtime_r(&second, &nowTime);
116     if (timeNow != nullptr) {
117         spendTime_ = duration_cast<std::chrono::milliseconds>(high_resolution_clock::now() - beginTime).count();
118         TELEPHONY_LOGI(
119             "CallManagerService start time:%{public}d-%{public}d-%{public}d %{public}d:%{public}d:%{public}d",
120             timeNow->tm_year + startTime_, timeNow->tm_mon + extraMonth_, timeNow->tm_mday, timeNow->tm_hour,
121             timeNow->tm_min, timeNow->tm_sec);
122         TELEPHONY_LOGI("CallManagerService start service cost time:%{public}d(milliseconds)", spendTime_);
123     }
124 }
125 
OnStop()126 void CallManagerService::OnStop()
127 {
128     std::lock_guard<std::mutex> guard(lock_);
129     struct tm *timeNow = nullptr;
130     struct tm nowTime = { 0 };
131     time_t second = time(0);
132     if (second < 0) {
133         return;
134     }
135     timeNow = localtime_r(&second, &nowTime);
136     if (timeNow != nullptr) {
137         TELEPHONY_LOGI(
138             "CallManagerService dump time:%{public}d-%{public}d-%{public}d %{public}d:%{public}d:%{public}d",
139             timeNow->tm_year + startTime_, timeNow->tm_mon + extraMonth_, timeNow->tm_mday, timeNow->tm_hour,
140             timeNow->tm_min, timeNow->tm_sec);
141     }
142     DelayedSingleton<CellularCallConnection>::GetInstance()->UnInit();
143     state_ = ServiceRunningState::STATE_STOPPED;
144 }
145 
GetServiceRunningState()146 int32_t CallManagerService::GetServiceRunningState()
147 {
148     return static_cast<int32_t>(state_);
149 }
150 
Dump(std::int32_t fd,const std::vector<std::u16string> & args)151 int32_t CallManagerService::Dump(std::int32_t fd, const std::vector<std::u16string> &args)
152 {
153     if (fd < 0) {
154         TELEPHONY_LOGE("dump fd invalid");
155         return TELEPHONY_ERR_ARGUMENT_INVALID;
156     }
157     std::vector<std::string> argsInStr;
158     for (const auto &arg : args) {
159         TELEPHONY_LOGI("Dump args: %s", Str16ToStr8(arg).c_str());
160         argsInStr.emplace_back(Str16ToStr8(arg));
161     }
162     std::string result;
163     CallManagerDumpHelper dumpHelper;
164     if (dumpHelper.Dump(argsInStr, result)) {
165         TELEPHONY_LOGI("%s", result.c_str());
166         std::int32_t ret = dprintf(fd, "%s", result.c_str());
167         if (ret < 0) {
168             TELEPHONY_LOGE("dprintf to dump fd failed");
169             return CALL_ERR_SERVICE_DUMP_FAILED;
170         }
171         return TELEPHONY_SUCCESS;
172     }
173     TELEPHONY_LOGW("dumpHelper failed");
174     return CALL_ERR_SERVICE_DUMP_FAILED;
175 }
176 
GetBindTime()177 std::string CallManagerService::GetBindTime()
178 {
179     bindTime_ =
180         std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch())
181             .count();
182     std::ostringstream oss;
183     oss << bindTime_;
184     return oss.str();
185 }
186 
GetStartServiceSpent()187 std::string CallManagerService::GetStartServiceSpent()
188 {
189     std::ostringstream oss;
190     oss << spendTime_;
191     return oss.str();
192 }
193 
RegisterCallBack(const sptr<ICallAbilityCallback> & callback)194 int32_t CallManagerService::RegisterCallBack(const sptr<ICallAbilityCallback> &callback)
195 {
196     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
197         TELEPHONY_LOGE("Non-system applications use system APIs!");
198         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
199     }
200     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE) &&
201         !TelephonyPermission::CheckPermission(OHOS_PERMISSION_GET_TELEPHONY_STATE)) {
202         TELEPHONY_LOGE("Permission denied!");
203         return TELEPHONY_ERR_PERMISSION_ERR;
204     }
205     return DelayedSingleton<CallAbilityReportProxy>::GetInstance()->RegisterCallBack(callback, GetBundleName());
206 }
207 
UnRegisterCallBack()208 int32_t CallManagerService::UnRegisterCallBack()
209 {
210     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
211         TELEPHONY_LOGE("Non-system applications use system APIs!");
212         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
213     }
214     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
215         TELEPHONY_LOGE("Permission denied!");
216         return TELEPHONY_ERR_PERMISSION_ERR;
217     }
218     return DelayedSingleton<CallAbilityReportProxy>::GetInstance()->UnRegisterCallBack(GetBundleName());
219 }
220 
ObserverOnCallDetailsChange()221 int32_t CallManagerService::ObserverOnCallDetailsChange()
222 {
223     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
224         TELEPHONY_LOGE("Non-system applications use system APIs!");
225         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
226     }
227     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE) &&
228         !TelephonyPermission::CheckPermission(OHOS_PERMISSION_GET_TELEPHONY_STATE)) {
229         TELEPHONY_LOGE("Permission denied!");
230         return TELEPHONY_ERR_PERMISSION_ERR;
231     }
232 
233     std::vector<CallAttributeInfo> callAttributeInfo = CallObjectManager::GetAllCallInfoList();
234     for (auto info : callAttributeInfo) {
235         DelayedSingleton<CallAbilityReportProxy>::GetInstance()->ReportCallStateInfo(info, GetBundleName());
236     }
237     return TELEPHONY_SUCCESS;
238 }
239 
DialCall(std::u16string number,AppExecFwk::PacMap & extras)240 int32_t CallManagerService::DialCall(std::u16string number, AppExecFwk::PacMap &extras)
241 {
242     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
243         TELEPHONY_LOGE("Non-system applications use system APIs!");
244         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
245     }
246     DelayedSingleton<CallManagerHisysevent>::GetInstance()->SetDialStartTime();
247     StartAsyncTrace(HITRACE_TAG_OHOS, "DialCall", getpid());
248     int32_t uid = IPCSkeleton::GetCallingUid();
249     std::string bundleName = "";
250     TelephonyPermission::GetBundleNameByUid(uid, bundleName);
251     extras.PutStringValue("bundleName", bundleName);
252     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_PLACE_CALL)) {
253         TELEPHONY_LOGE("Permission denied!");
254         CallManagerHisysevent::WriteDialCallFaultEvent(extras.GetIntValue(SLOT_ID), extras.GetIntValue(CALL_TYPE),
255             extras.GetIntValue(VIDEO_STATE), TELEPHONY_ERR_PERMISSION_ERR, OHOS_PERMISSION_PLACE_CALL);
256         FinishAsyncTrace(HITRACE_TAG_OHOS, "DialCall", getpid());
257         return TELEPHONY_ERR_PERMISSION_ERR;
258     }
259     if (callControlManagerPtr_ != nullptr) {
260         int32_t ret = callControlManagerPtr_->DialCall(number, extras);
261         if (ret == TELEPHONY_SUCCESS) {
262             std::u16string voiceMailNumber;
263             CoreManagerInner::GetInstance().GetVoiceMailNumber(extras.GetIntValue(SLOT_ID), voiceMailNumber);
264             if (voiceMailNumber == number) {
265                 CoreManagerInner::GetInstance().SetVoiceMailCount(extras.GetIntValue(SLOT_ID), CLEAR_VOICE_MAIL_COUNT);
266             }
267         } else {
268             std::string errordesc = "";
269             DelayedSingleton<CallManagerHisysevent>::GetInstance()->GetErrorDescription(ret, errordesc);
270             CallManagerHisysevent::WriteDialCallFaultEvent(extras.GetIntValue(SLOT_ID), extras.GetIntValue(CALL_TYPE),
271                 extras.GetIntValue(VIDEO_STATE), ret, errordesc);
272             FinishAsyncTrace(HITRACE_TAG_OHOS, "DialCall", getpid());
273         }
274         return ret;
275     } else {
276         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
277         FinishAsyncTrace(HITRACE_TAG_OHOS, "DialCall", getpid());
278         return TELEPHONY_ERR_LOCAL_PTR_NULL;
279     }
280 }
281 
AnswerCall(int32_t callId,int32_t videoState)282 int32_t CallManagerService::AnswerCall(int32_t callId, int32_t videoState)
283 {
284     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
285         TELEPHONY_LOGE("Non-system applications use system APIs!");
286         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
287     }
288     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_ANSWER_CALL)) {
289         TELEPHONY_LOGE("Permission denied!");
290         return TELEPHONY_ERR_PERMISSION_ERR;
291     }
292     DelayedSingleton<CallManagerHisysevent>::GetInstance()->SetAnswerStartTime();
293     if (callControlManagerPtr_ != nullptr) {
294         return callControlManagerPtr_->AnswerCall(callId, videoState);
295     } else {
296         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
297         return TELEPHONY_ERR_LOCAL_PTR_NULL;
298     }
299 }
300 
RejectCall(int32_t callId,bool rejectWithMessage,std::u16string textMessage)301 int32_t CallManagerService::RejectCall(int32_t callId, bool rejectWithMessage, std::u16string textMessage)
302 {
303     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
304         TELEPHONY_LOGE("Non-system applications use system APIs!");
305         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
306     }
307     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_ANSWER_CALL)) {
308         TELEPHONY_LOGE("Permission denied!");
309         return TELEPHONY_ERR_PERMISSION_ERR;
310     }
311     if (callControlManagerPtr_ != nullptr) {
312         return callControlManagerPtr_->RejectCall(callId, rejectWithMessage, textMessage);
313     } else {
314         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
315         return TELEPHONY_ERR_LOCAL_PTR_NULL;
316     }
317 }
318 
HangUpCall(int32_t callId)319 int32_t CallManagerService::HangUpCall(int32_t callId)
320 {
321     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
322         TELEPHONY_LOGE("Non-system applications use system APIs!");
323         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
324     }
325     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_ANSWER_CALL)) {
326         TELEPHONY_LOGE("Permission denied!");
327         return TELEPHONY_ERR_PERMISSION_ERR;
328     }
329     if (callControlManagerPtr_ != nullptr) {
330         return callControlManagerPtr_->HangUpCall(callId);
331     } else {
332         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
333         return TELEPHONY_ERR_LOCAL_PTR_NULL;
334     }
335 }
336 
GetCallState()337 int32_t CallManagerService::GetCallState()
338 {
339     if (callControlManagerPtr_ != nullptr) {
340         return callControlManagerPtr_->GetCallState();
341     } else {
342         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
343         return TELEPHONY_ERR_LOCAL_PTR_NULL;
344     }
345 }
346 
HoldCall(int32_t callId)347 int32_t CallManagerService::HoldCall(int32_t callId)
348 {
349     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
350         TELEPHONY_LOGE("Non-system applications use system APIs!");
351         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
352     }
353     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_ANSWER_CALL)) {
354         TELEPHONY_LOGE("Permission denied!");
355         return TELEPHONY_ERR_PERMISSION_ERR;
356     }
357     if (callControlManagerPtr_ != nullptr) {
358         return callControlManagerPtr_->HoldCall(callId);
359     } else {
360         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
361         return TELEPHONY_ERR_LOCAL_PTR_NULL;
362     }
363 }
364 
UnHoldCall(int32_t callId)365 int32_t CallManagerService::UnHoldCall(int32_t callId)
366 {
367     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
368         TELEPHONY_LOGE("Non-system applications use system APIs!");
369         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
370     }
371     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_ANSWER_CALL)) {
372         TELEPHONY_LOGE("Permission denied!");
373         return TELEPHONY_ERR_PERMISSION_ERR;
374     }
375     if (callControlManagerPtr_ != nullptr) {
376         return callControlManagerPtr_->UnHoldCall(callId);
377     } else {
378         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
379         return TELEPHONY_ERR_LOCAL_PTR_NULL;
380     }
381 }
382 
SwitchCall(int32_t callId)383 int32_t CallManagerService::SwitchCall(int32_t callId)
384 {
385     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
386         TELEPHONY_LOGE("Non-system applications use system APIs!");
387         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
388     }
389     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_ANSWER_CALL)) {
390         TELEPHONY_LOGE("Permission denied!");
391         return TELEPHONY_ERR_PERMISSION_ERR;
392     }
393     if (callControlManagerPtr_ != nullptr) {
394         return callControlManagerPtr_->SwitchCall(callId);
395     } else {
396         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
397         return TELEPHONY_ERR_LOCAL_PTR_NULL;
398     }
399 }
400 
HasCall()401 bool CallManagerService::HasCall()
402 {
403     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_GET_TELEPHONY_STATE)) {
404         TELEPHONY_LOGE("Permission denied!");
405         return false;
406     }
407     if (callControlManagerPtr_ != nullptr) {
408         return callControlManagerPtr_->HasCall();
409     } else {
410         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
411         return false;
412     }
413 }
414 
IsNewCallAllowed(bool & enabled)415 int32_t CallManagerService::IsNewCallAllowed(bool &enabled)
416 {
417     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
418         TELEPHONY_LOGE("Non-system applications use system APIs!");
419         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
420     }
421     if (callControlManagerPtr_ != nullptr) {
422         return callControlManagerPtr_->IsNewCallAllowed(enabled);
423     } else {
424         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
425         return TELEPHONY_ERR_LOCAL_PTR_NULL;
426     }
427 }
428 
RegisterVoipCallManagerCallback()429 int32_t CallManagerService::RegisterVoipCallManagerCallback()
430 {
431     DelayedSingleton<VoipCallConnection>::GetInstance()->Init(TELEPHONY_VOIP_CALL_MANAGER_SYS_ABILITY_ID);
432     voipCallCallbackPtr_ = (std::make_unique<CallStatusCallback>()).release();
433     if (voipCallCallbackPtr_ == nullptr) {
434         TELEPHONY_LOGE("voipCallCallbackPtr_ is nullptr!");
435         return TELEPHONY_ERR_LOCAL_PTR_NULL;
436     }
437     DelayedSingleton<VoipCallConnection>::GetInstance()->RegisterCallManagerCallBack(voipCallCallbackPtr_);
438     return 0;
439 }
440 
UnRegisterVoipCallManagerCallback()441 int32_t CallManagerService::UnRegisterVoipCallManagerCallback()
442 {
443     return DelayedSingleton<VoipCallConnection>::GetInstance()->UnRegisterCallManagerCallBack();
444 }
445 
IsRinging(bool & enabled)446 int32_t CallManagerService::IsRinging(bool &enabled)
447 {
448     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
449         TELEPHONY_LOGE("Non-system applications use system APIs!");
450         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
451     }
452     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
453         TELEPHONY_LOGE("Permission denied!");
454         return TELEPHONY_ERR_PERMISSION_ERR;
455     }
456     if (callControlManagerPtr_ != nullptr) {
457         return callControlManagerPtr_->IsRinging(enabled);
458     } else {
459         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
460         return TELEPHONY_ERR_LOCAL_PTR_NULL;
461     }
462 }
463 
IsInEmergencyCall(bool & enabled)464 int32_t CallManagerService::IsInEmergencyCall(bool &enabled)
465 {
466     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
467         TELEPHONY_LOGE("Non-system applications use system APIs!");
468         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
469     }
470     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
471         TELEPHONY_LOGE("Permission denied!");
472         return TELEPHONY_ERR_PERMISSION_ERR;
473     }
474     if (callControlManagerPtr_ != nullptr) {
475         return callControlManagerPtr_->HasEmergency(enabled);
476     } else {
477         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
478         return TELEPHONY_ERR_LOCAL_PTR_NULL;
479     }
480 }
481 
StartDtmf(int32_t callId,char str)482 int32_t CallManagerService::StartDtmf(int32_t callId, char str)
483 {
484     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
485         TELEPHONY_LOGE("Non-system applications use system APIs!");
486         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
487     }
488     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
489         TELEPHONY_LOGE("Permission denied!");
490         return TELEPHONY_ERR_PERMISSION_ERR;
491     }
492     if (callControlManagerPtr_ != nullptr) {
493         return callControlManagerPtr_->StartDtmf(callId, str);
494     } else {
495         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
496         return TELEPHONY_ERR_LOCAL_PTR_NULL;
497     }
498 }
499 
StopDtmf(int32_t callId)500 int32_t CallManagerService::StopDtmf(int32_t callId)
501 {
502     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
503         TELEPHONY_LOGE("Non-system applications use system APIs!");
504         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
505     }
506     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
507         TELEPHONY_LOGE("Permission denied!");
508         return TELEPHONY_ERR_PERMISSION_ERR;
509     }
510     if (callControlManagerPtr_ != nullptr) {
511         return callControlManagerPtr_->StopDtmf(callId);
512     } else {
513         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
514         return TELEPHONY_ERR_LOCAL_PTR_NULL;
515     }
516 }
517 
PostDialProceed(int32_t callId,bool proceed)518 int32_t CallManagerService::PostDialProceed(int32_t callId, bool proceed)
519 {
520     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
521         TELEPHONY_LOGE("Non-system applications use system APIs!");
522         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
523     }
524     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
525         TELEPHONY_LOGE("Permission denied!");
526         return TELEPHONY_ERR_PERMISSION_ERR;
527     }
528     if (callControlManagerPtr_ != nullptr) {
529         return callControlManagerPtr_->PostDialProceed(callId, proceed);
530     } else {
531         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
532         return TELEPHONY_ERR_LOCAL_PTR_NULL;
533     }
534 }
535 
GetCallWaiting(int32_t slotId)536 int32_t CallManagerService::GetCallWaiting(int32_t slotId)
537 {
538     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
539         TELEPHONY_LOGE("Non-system applications use system APIs!");
540         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
541     }
542     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_GET_TELEPHONY_STATE)) {
543         TELEPHONY_LOGE("Permission denied!");
544         return TELEPHONY_ERR_PERMISSION_ERR;
545     }
546     if (callControlManagerPtr_ != nullptr) {
547         return callControlManagerPtr_->GetCallWaiting(slotId);
548     } else {
549         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
550         return TELEPHONY_ERR_LOCAL_PTR_NULL;
551     }
552 }
553 
SetCallWaiting(int32_t slotId,bool activate)554 int32_t CallManagerService::SetCallWaiting(int32_t slotId, bool activate)
555 {
556     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
557         TELEPHONY_LOGE("Non-system applications use system APIs!");
558         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
559     }
560     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
561         TELEPHONY_LOGE("Permission denied!");
562         return TELEPHONY_ERR_PERMISSION_ERR;
563     }
564     if (callControlManagerPtr_ != nullptr) {
565         return callControlManagerPtr_->SetCallWaiting(slotId, activate);
566     } else {
567         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
568         return TELEPHONY_ERR_LOCAL_PTR_NULL;
569     }
570 }
571 
GetCallRestriction(int32_t slotId,CallRestrictionType type)572 int32_t CallManagerService::GetCallRestriction(int32_t slotId, CallRestrictionType type)
573 {
574     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
575         TELEPHONY_LOGE("Non-system applications use system APIs!");
576         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
577     }
578     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_GET_TELEPHONY_STATE)) {
579         TELEPHONY_LOGE("Permission denied!");
580         return TELEPHONY_ERR_PERMISSION_ERR;
581     }
582     if (callControlManagerPtr_ != nullptr) {
583         return callControlManagerPtr_->GetCallRestriction(slotId, type);
584     } else {
585         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
586         return TELEPHONY_ERR_LOCAL_PTR_NULL;
587     }
588 }
589 
SetCallRestriction(int32_t slotId,CallRestrictionInfo & info)590 int32_t CallManagerService::SetCallRestriction(int32_t slotId, CallRestrictionInfo &info)
591 {
592     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
593         TELEPHONY_LOGE("Non-system applications use system APIs!");
594         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
595     }
596     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
597         TELEPHONY_LOGE("Permission denied!");
598         return TELEPHONY_ERR_PERMISSION_ERR;
599     }
600     if (callControlManagerPtr_ != nullptr) {
601         return callControlManagerPtr_->SetCallRestriction(slotId, info);
602     } else {
603         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
604         return TELEPHONY_ERR_LOCAL_PTR_NULL;
605     }
606 }
607 
SetCallRestrictionPassword(int32_t slotId,CallRestrictionType fac,const char * oldPassword,const char * newPassword)608 int32_t CallManagerService::SetCallRestrictionPassword(
609     int32_t slotId, CallRestrictionType fac, const char *oldPassword, const char *newPassword)
610 {
611     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
612         TELEPHONY_LOGE("Non-system applications use system APIs!");
613         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
614     }
615     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
616         TELEPHONY_LOGE("Permission denied!");
617         return TELEPHONY_ERR_PERMISSION_ERR;
618     }
619     if (callControlManagerPtr_ != nullptr) {
620         return callControlManagerPtr_->SetCallRestrictionPassword(slotId, fac, oldPassword, newPassword);
621     } else {
622         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
623         return TELEPHONY_ERR_LOCAL_PTR_NULL;
624     }
625 }
626 
GetCallTransferInfo(int32_t slotId,CallTransferType type)627 int32_t CallManagerService::GetCallTransferInfo(int32_t slotId, CallTransferType type)
628 {
629     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
630         TELEPHONY_LOGE("Non-system applications use system APIs!");
631         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
632     }
633     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_GET_TELEPHONY_STATE)) {
634         TELEPHONY_LOGE("Permission denied!");
635         return TELEPHONY_ERR_PERMISSION_ERR;
636     }
637     if (callControlManagerPtr_ != nullptr) {
638         return callControlManagerPtr_->GetCallTransferInfo(slotId, type);
639     } else {
640         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
641         return TELEPHONY_ERR_LOCAL_PTR_NULL;
642     }
643 }
644 
SetCallTransferInfo(int32_t slotId,CallTransferInfo & info)645 int32_t CallManagerService::SetCallTransferInfo(int32_t slotId, CallTransferInfo &info)
646 {
647     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
648         TELEPHONY_LOGE("Non-system applications use system APIs!");
649         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
650     }
651     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
652         TELEPHONY_LOGE("Permission denied!");
653         return TELEPHONY_ERR_PERMISSION_ERR;
654     }
655     if (callControlManagerPtr_ != nullptr) {
656         return callControlManagerPtr_->SetCallTransferInfo(slotId, info);
657     } else {
658         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
659         return TELEPHONY_ERR_LOCAL_PTR_NULL;
660     }
661 }
662 
CanSetCallTransferTime(int32_t slotId,bool & result)663 int32_t CallManagerService::CanSetCallTransferTime(int32_t slotId, bool &result)
664 {
665     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
666         TELEPHONY_LOGE("Non-system applications use system APIs!");
667         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
668     }
669     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_GET_TELEPHONY_STATE)) {
670         TELEPHONY_LOGE("Permission denied!");
671         return TELEPHONY_ERR_PERMISSION_ERR;
672     }
673     if (callControlManagerPtr_ != nullptr) {
674         return callControlManagerPtr_->CanSetCallTransferTime(slotId, result);
675     } else {
676         TELEPHONY_LOGE("[slot%{public}d] callControlManagerPtr_ is nullptr!", slotId);
677         return TELEPHONY_ERR_LOCAL_PTR_NULL;
678     }
679 }
680 
SetCallPreferenceMode(int32_t slotId,int32_t mode)681 int32_t CallManagerService::SetCallPreferenceMode(int32_t slotId, int32_t mode)
682 {
683     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
684         TELEPHONY_LOGE("Permission denied!");
685         return TELEPHONY_ERR_PERMISSION_ERR;
686     }
687     if (callControlManagerPtr_ != nullptr) {
688         return callControlManagerPtr_->SetCallPreferenceMode(slotId, mode);
689     } else {
690         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
691         return TELEPHONY_ERR_LOCAL_PTR_NULL;
692     }
693 }
694 
StartRtt(int32_t callId,std::u16string & msg)695 int32_t CallManagerService::StartRtt(int32_t callId, std::u16string &msg)
696 {
697     if (callControlManagerPtr_ != nullptr) {
698         return callControlManagerPtr_->StartRtt(callId, msg);
699     } else {
700         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
701         return TELEPHONY_ERR_LOCAL_PTR_NULL;
702     }
703 }
704 
StopRtt(int32_t callId)705 int32_t CallManagerService::StopRtt(int32_t callId)
706 {
707     if (callControlManagerPtr_ != nullptr) {
708         return callControlManagerPtr_->StopRtt(callId);
709     } else {
710         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
711         return TELEPHONY_ERR_LOCAL_PTR_NULL;
712     }
713 }
714 
CombineConference(int32_t mainCallId)715 int32_t CallManagerService::CombineConference(int32_t mainCallId)
716 {
717     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
718         TELEPHONY_LOGE("Non-system applications use system APIs!");
719         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
720     }
721     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
722         TELEPHONY_LOGE("Permission denied!");
723         return TELEPHONY_ERR_PERMISSION_ERR;
724     }
725     if (callControlManagerPtr_ != nullptr) {
726         return callControlManagerPtr_->CombineConference(mainCallId);
727     } else {
728         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
729         return TELEPHONY_ERR_LOCAL_PTR_NULL;
730     }
731 }
732 
SeparateConference(int32_t callId)733 int32_t CallManagerService::SeparateConference(int32_t callId)
734 {
735     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
736         TELEPHONY_LOGE("Non-system applications use system APIs!");
737         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
738     }
739     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
740         TELEPHONY_LOGE("Permission denied!");
741         return TELEPHONY_ERR_PERMISSION_ERR;
742     }
743     if (callControlManagerPtr_ != nullptr) {
744         return callControlManagerPtr_->SeparateConference(callId);
745     } else {
746         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
747         return TELEPHONY_ERR_LOCAL_PTR_NULL;
748     }
749 }
750 
KickOutFromConference(int32_t callId)751 int32_t CallManagerService::KickOutFromConference(int32_t callId)
752 {
753     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
754         TELEPHONY_LOGE("Non-system applications use system APIs!");
755         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
756     }
757     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_PLACE_CALL)) {
758         TELEPHONY_LOGE("Permission denied!");
759         return TELEPHONY_ERR_PERMISSION_ERR;
760     }
761     if (callControlManagerPtr_ != nullptr) {
762         return callControlManagerPtr_->KickOutFromConference(callId);
763     } else {
764         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
765         return TELEPHONY_ERR_LOCAL_PTR_NULL;
766     }
767 }
768 
SetMuted(bool isMute)769 int32_t CallManagerService::SetMuted(bool isMute)
770 {
771     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
772         TELEPHONY_LOGE("Non-system applications use system APIs!");
773         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
774     }
775     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
776         TELEPHONY_LOGE("Permission denied!");
777         return TELEPHONY_ERR_PERMISSION_ERR;
778     }
779     if (callControlManagerPtr_ != nullptr) {
780         return callControlManagerPtr_->SetMuted(isMute);
781     } else {
782         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
783         return TELEPHONY_ERR_LOCAL_PTR_NULL;
784     }
785 }
786 
MuteRinger()787 int32_t CallManagerService::MuteRinger()
788 {
789     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
790         TELEPHONY_LOGE("Non-system applications use system APIs!");
791         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
792     }
793     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
794         TELEPHONY_LOGE("Permission denied!");
795         return TELEPHONY_ERR_PERMISSION_ERR;
796     }
797     if (callControlManagerPtr_ != nullptr) {
798         return callControlManagerPtr_->MuteRinger();
799     } else {
800         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
801         return TELEPHONY_ERR_LOCAL_PTR_NULL;
802     }
803 }
804 
SetAudioDevice(const AudioDevice & audioDevice)805 int32_t CallManagerService::SetAudioDevice(const AudioDevice &audioDevice)
806 {
807     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
808         TELEPHONY_LOGE("Non-system applications use system APIs!");
809         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
810     }
811     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
812         TELEPHONY_LOGE("Permission denied!");
813         return TELEPHONY_ERR_PERMISSION_ERR;
814     }
815     if (callControlManagerPtr_ != nullptr) {
816         if (callControlManagerPtr_->SetAudioDevice(audioDevice) == TELEPHONY_SUCCESS) {
817             return TELEPHONY_SUCCESS;
818         }
819         TELEPHONY_LOGE("SetAudioDevice failed!");
820         return CALL_ERR_SETTING_AUDIO_DEVICE_FAILED;
821     } else {
822         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
823         return TELEPHONY_ERR_LOCAL_PTR_NULL;
824     }
825 }
826 
ControlCamera(int32_t callId,std::u16string & cameraId)827 int32_t CallManagerService::ControlCamera(int32_t callId, std::u16string &cameraId)
828 {
829     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
830         TELEPHONY_LOGE("Non-system applications use system APIs!");
831         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
832     }
833     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
834         TELEPHONY_LOGE("Permission denied!");
835         return TELEPHONY_ERR_PERMISSION_ERR;
836     }
837     auto videoControlManager = DelayedSingleton<VideoControlManager>::GetInstance();
838     if (videoControlManager != nullptr) {
839         return videoControlManager->ControlCamera(
840             callId, cameraId, IPCSkeleton::GetCallingUid(), IPCSkeleton::GetCallingPid());
841     }  else {
842         TELEPHONY_LOGE("videoControlManager is nullptr!");
843         return TELEPHONY_ERR_LOCAL_PTR_NULL;
844     }
845 }
846 
SetPreviewWindow(int32_t callId,std::string & surfaceId,sptr<Surface> surface)847 int32_t CallManagerService::SetPreviewWindow(int32_t callId, std::string &surfaceId, sptr<Surface> surface)
848 {
849     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
850         TELEPHONY_LOGE("Non-system applications use system APIs!");
851         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
852     }
853     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
854         TELEPHONY_LOGE("Permission denied!");
855         return TELEPHONY_ERR_PERMISSION_ERR;
856     }
857     auto videoControlManager = DelayedSingleton<VideoControlManager>::GetInstance();
858     if (videoControlManager != nullptr) {
859         return videoControlManager->SetPreviewWindow(callId, surfaceId, surface);
860     } else {
861         TELEPHONY_LOGE("videoControlManager is nullptr!");
862         return TELEPHONY_ERR_LOCAL_PTR_NULL;
863     }
864 }
865 
SetDisplayWindow(int32_t callId,std::string & surfaceId,sptr<Surface> surface)866 int32_t CallManagerService::SetDisplayWindow(int32_t callId, std::string &surfaceId, sptr<Surface> surface)
867 {
868     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
869         TELEPHONY_LOGE("Non-system applications use system APIs!");
870         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
871     }
872     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
873         TELEPHONY_LOGE("Permission denied!");
874         return TELEPHONY_ERR_PERMISSION_ERR;
875     }
876     auto videoControlManager = DelayedSingleton<VideoControlManager>::GetInstance();
877     if (videoControlManager != nullptr) {
878         return videoControlManager->SetDisplayWindow(callId, surfaceId, surface);
879     } else {
880         TELEPHONY_LOGE("videoControlManager is nullptr!");
881         return TELEPHONY_ERR_LOCAL_PTR_NULL;
882     }
883 }
884 
SetCameraZoom(float zoomRatio)885 int32_t CallManagerService::SetCameraZoom(float zoomRatio)
886 {
887     if (callControlManagerPtr_ != nullptr) {
888         return callControlManagerPtr_->SetCameraZoom(zoomRatio);
889     } else {
890         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
891         return TELEPHONY_ERR_LOCAL_PTR_NULL;
892     }
893 }
894 
SetPausePicture(int32_t callId,std::u16string & path)895 int32_t CallManagerService::SetPausePicture(int32_t callId, std::u16string &path)
896 {
897     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
898         TELEPHONY_LOGE("Non-system applications use system APIs!");
899         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
900     }
901     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
902         TELEPHONY_LOGE("Permission denied!");
903         return TELEPHONY_ERR_PERMISSION_ERR;
904     }
905     auto videoControlManager = DelayedSingleton<VideoControlManager>::GetInstance();
906     if (videoControlManager != nullptr) {
907         return videoControlManager->SetPausePicture(callId, path);
908     } else {
909         TELEPHONY_LOGE("videoControlManager is nullptr!");
910         return TELEPHONY_ERR_LOCAL_PTR_NULL;
911     }
912 }
913 
SetDeviceDirection(int32_t callId,int32_t rotation)914 int32_t CallManagerService::SetDeviceDirection(int32_t callId, int32_t rotation)
915 {
916     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
917         TELEPHONY_LOGE("Non-system applications use system APIs!");
918         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
919     }
920     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
921         TELEPHONY_LOGE("Permission denied!");
922         return TELEPHONY_ERR_PERMISSION_ERR;
923     }
924     auto videoControlManager = DelayedSingleton<VideoControlManager>::GetInstance();
925     if (videoControlManager != nullptr) {
926         return videoControlManager->SetDeviceDirection(callId, rotation);
927     } else {
928         TELEPHONY_LOGE("videoControlManager is nullptr!");
929         return TELEPHONY_ERR_LOCAL_PTR_NULL;
930     }
931 }
932 
IsEmergencyPhoneNumber(std::u16string & number,int32_t slotId,bool & enabled)933 int32_t CallManagerService::IsEmergencyPhoneNumber(std::u16string &number, int32_t slotId, bool &enabled)
934 {
935     if (callControlManagerPtr_ != nullptr) {
936         return callControlManagerPtr_->IsEmergencyPhoneNumber(number, slotId, enabled);
937     } else {
938         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
939         return TELEPHONY_ERR_LOCAL_PTR_NULL;
940     }
941 }
942 
FormatPhoneNumber(std::u16string & number,std::u16string & countryCode,std::u16string & formatNumber)943 int32_t CallManagerService::FormatPhoneNumber(
944     std::u16string &number, std::u16string &countryCode, std::u16string &formatNumber)
945 {
946     if (callControlManagerPtr_ != nullptr) {
947         return callControlManagerPtr_->FormatPhoneNumber(number, countryCode, formatNumber);
948     } else {
949         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
950         return TELEPHONY_ERR_LOCAL_PTR_NULL;
951     }
952 }
953 
FormatPhoneNumberToE164(std::u16string & number,std::u16string & countryCode,std::u16string & formatNumber)954 int32_t CallManagerService::FormatPhoneNumberToE164(
955     std::u16string &number, std::u16string &countryCode, std::u16string &formatNumber)
956 {
957     if (callControlManagerPtr_ != nullptr) {
958         return callControlManagerPtr_->FormatPhoneNumberToE164(number, countryCode, formatNumber);
959     } else {
960         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
961         return TELEPHONY_ERR_LOCAL_PTR_NULL;
962     }
963 }
964 
GetMainCallId(int32_t callId,int32_t & mainCallId)965 int32_t CallManagerService::GetMainCallId(int32_t callId, int32_t &mainCallId)
966 {
967     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
968         TELEPHONY_LOGE("Non-system applications use system APIs!");
969         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
970     }
971     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_GET_TELEPHONY_STATE)) {
972         TELEPHONY_LOGE("Permission denied!");
973         return TELEPHONY_ERR_PERMISSION_ERR;
974     }
975     if (callControlManagerPtr_ != nullptr) {
976         return callControlManagerPtr_->GetMainCallId(callId, mainCallId);
977     } else {
978         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
979         return TELEPHONY_ERR_LOCAL_PTR_NULL;
980     }
981 }
982 
GetSubCallIdList(int32_t callId,std::vector<std::u16string> & callIdList)983 int32_t CallManagerService::GetSubCallIdList(int32_t callId, std::vector<std::u16string> &callIdList)
984 {
985     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
986         TELEPHONY_LOGE("Non-system applications use system APIs!");
987         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
988     }
989     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_GET_TELEPHONY_STATE)) {
990         TELEPHONY_LOGE("Permission denied!");
991         return TELEPHONY_ERR_PERMISSION_ERR;
992     }
993     if (callControlManagerPtr_ != nullptr) {
994         return callControlManagerPtr_->GetSubCallIdList(callId, callIdList);
995     }
996     callIdList.clear();
997     return TELEPHONY_ERR_LOCAL_PTR_NULL;
998 }
999 
GetCallIdListForConference(int32_t callId,std::vector<std::u16string> & callIdList)1000 int32_t CallManagerService::GetCallIdListForConference(int32_t callId, std::vector<std::u16string> &callIdList)
1001 {
1002     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1003         TELEPHONY_LOGE("Non-system applications use system APIs!");
1004         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1005     }
1006     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_GET_TELEPHONY_STATE)) {
1007         TELEPHONY_LOGE("Permission denied!");
1008         return TELEPHONY_ERR_PERMISSION_ERR;
1009     }
1010     if (callControlManagerPtr_ != nullptr) {
1011         return callControlManagerPtr_->GetCallIdListForConference(callId, callIdList);
1012     }
1013     callIdList.clear();
1014     return TELEPHONY_ERR_LOCAL_PTR_NULL;
1015 }
1016 
GetImsConfig(int32_t slotId,ImsConfigItem item)1017 int32_t CallManagerService::GetImsConfig(int32_t slotId, ImsConfigItem item)
1018 {
1019     if (callControlManagerPtr_ != nullptr) {
1020         return callControlManagerPtr_->GetImsConfig(slotId, item);
1021     } else {
1022         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1023         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1024     }
1025 }
1026 
SetImsConfig(int32_t slotId,ImsConfigItem item,std::u16string & value)1027 int32_t CallManagerService::SetImsConfig(int32_t slotId, ImsConfigItem item, std::u16string &value)
1028 {
1029     if (callControlManagerPtr_ != nullptr) {
1030         return callControlManagerPtr_->SetImsConfig(slotId, item, value);
1031     } else {
1032         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1033         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1034     }
1035 }
1036 
GetImsFeatureValue(int32_t slotId,FeatureType type)1037 int32_t CallManagerService::GetImsFeatureValue(int32_t slotId, FeatureType type)
1038 {
1039     if (callControlManagerPtr_ != nullptr) {
1040         return callControlManagerPtr_->GetImsFeatureValue(slotId, type);
1041     } else {
1042         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1043         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1044     }
1045 }
1046 
SetImsFeatureValue(int32_t slotId,FeatureType type,int32_t value)1047 int32_t CallManagerService::SetImsFeatureValue(int32_t slotId, FeatureType type, int32_t value)
1048 {
1049     if (callControlManagerPtr_ != nullptr) {
1050         return callControlManagerPtr_->SetImsFeatureValue(slotId, type, value);
1051     } else {
1052         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1053         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1054     }
1055 }
1056 
UpdateImsCallMode(int32_t callId,ImsCallMode mode)1057 int32_t CallManagerService::UpdateImsCallMode(int32_t callId, ImsCallMode mode)
1058 {
1059     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1060         TELEPHONY_LOGE("Non-system applications use system APIs!");
1061         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1062     }
1063     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
1064         TELEPHONY_LOGE("Permission denied!");
1065         return TELEPHONY_ERR_PERMISSION_ERR;
1066     }
1067     auto videoControlManager = DelayedSingleton<VideoControlManager>::GetInstance();
1068     if (videoControlManager != nullptr) {
1069         return videoControlManager->UpdateImsCallMode(callId, mode);
1070     } else {
1071         TELEPHONY_LOGE("videoControlManager is nullptr!");
1072         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1073     }
1074 }
1075 
EnableImsSwitch(int32_t slotId)1076 int32_t CallManagerService::EnableImsSwitch(int32_t slotId)
1077 {
1078     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1079         TELEPHONY_LOGE("Non-system applications use system APIs!");
1080         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1081     }
1082     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
1083         TELEPHONY_LOGE("Permission denied!");
1084         return TELEPHONY_ERR_PERMISSION_ERR;
1085     }
1086     if (callControlManagerPtr_ != nullptr) {
1087         return callControlManagerPtr_->EnableImsSwitch(slotId);
1088     } else {
1089         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1090         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1091     }
1092 }
1093 
DisableImsSwitch(int32_t slotId)1094 int32_t CallManagerService::DisableImsSwitch(int32_t slotId)
1095 {
1096     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1097         TELEPHONY_LOGE("Non-system applications use system APIs!");
1098         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1099     }
1100     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
1101         TELEPHONY_LOGE("Permission denied!");
1102         return TELEPHONY_ERR_PERMISSION_ERR;
1103     }
1104     if (callControlManagerPtr_ != nullptr) {
1105         return callControlManagerPtr_->DisableImsSwitch(slotId);
1106     } else {
1107         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1108         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1109     }
1110 }
1111 
IsImsSwitchEnabled(int32_t slotId,bool & enabled)1112 int32_t CallManagerService::IsImsSwitchEnabled(int32_t slotId, bool &enabled)
1113 {
1114     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1115         TELEPHONY_LOGE("Non-system applications use system APIs!");
1116         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1117     }
1118     if (callControlManagerPtr_ != nullptr) {
1119         return callControlManagerPtr_->IsImsSwitchEnabled(slotId, enabled);
1120     } else {
1121         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1122         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1123     }
1124 }
1125 
SetVoNRState(int32_t slotId,int32_t state)1126 int32_t CallManagerService::SetVoNRState(int32_t slotId, int32_t state)
1127 {
1128     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1129         TELEPHONY_LOGE("Non-system applications use system APIs!");
1130         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1131     }
1132     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
1133         TELEPHONY_LOGE("Permission denied!");
1134         return TELEPHONY_ERR_PERMISSION_ERR;
1135     }
1136     if (callControlManagerPtr_ != nullptr) {
1137         return callControlManagerPtr_->SetVoNRState(slotId, state);
1138     } else {
1139         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1140         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1141     }
1142 }
1143 
GetVoNRState(int32_t slotId,int32_t & state)1144 int32_t CallManagerService::GetVoNRState(int32_t slotId, int32_t &state)
1145 {
1146     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1147         TELEPHONY_LOGE("Non-system applications use system APIs!");
1148         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1149     }
1150     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_GET_TELEPHONY_STATE)) {
1151         TELEPHONY_LOGE("Permission denied!");
1152         return TELEPHONY_ERR_PERMISSION_ERR;
1153     }
1154     if (callControlManagerPtr_ != nullptr) {
1155         return callControlManagerPtr_->GetVoNRState(slotId, state);
1156     } else {
1157         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1158         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1159     }
1160 }
1161 
JoinConference(int32_t callId,std::vector<std::u16string> & numberList)1162 int32_t CallManagerService::JoinConference(int32_t callId, std::vector<std::u16string> &numberList)
1163 {
1164     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1165         TELEPHONY_LOGE("Non-system applications use system APIs!");
1166         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1167     }
1168     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_PLACE_CALL)) {
1169         TELEPHONY_LOGE("Permission denied!");
1170         return TELEPHONY_ERR_PERMISSION_ERR;
1171     }
1172     if (callControlManagerPtr_ != nullptr) {
1173         return callControlManagerPtr_->JoinConference(callId, numberList);
1174     }
1175     TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1176     return TELEPHONY_ERR_LOCAL_PTR_NULL;
1177 }
1178 
ReportOttCallDetailsInfo(std::vector<OttCallDetailsInfo> & ottVec)1179 int32_t CallManagerService::ReportOttCallDetailsInfo(std::vector<OttCallDetailsInfo> &ottVec)
1180 {
1181     if (ottVec.empty()) {
1182         TELEPHONY_LOGE("ottVec is empty!");
1183         return TELEPHONY_ERR_ARGUMENT_INVALID;
1184     }
1185     CallDetailsInfo detailsInfo;
1186     CallDetailInfo detailInfo;
1187     detailsInfo.slotId = ERR_ID;
1188     (void)memcpy_s(detailsInfo.bundleName, kMaxBundleNameLen, ottVec[0].bundleName, kMaxBundleNameLen);
1189     detailInfo.callType = CallType::TYPE_OTT;
1190     detailInfo.accountId = ERR_ID;
1191     detailInfo.index = ERR_ID;
1192     detailInfo.voiceDomain = ERR_ID;
1193     std::vector<OttCallDetailsInfo>::iterator it = ottVec.begin();
1194     for (; it != ottVec.end(); ++it) {
1195         detailInfo.callMode = (*it).videoState;
1196         detailInfo.state = (*it).callState;
1197         (void)memcpy_s(detailInfo.phoneNum, kMaxNumberLen, (*it).phoneNum, kMaxNumberLen);
1198         (void)memcpy_s(detailInfo.bundleName, kMaxBundleNameLen, (*it).bundleName, kMaxBundleNameLen);
1199         detailsInfo.callVec.push_back(detailInfo);
1200     }
1201     int32_t ret = DelayedSingleton<ReportCallInfoHandler>::GetInstance()->UpdateCallsReportInfo(detailsInfo);
1202     if (ret != TELEPHONY_SUCCESS) {
1203         TELEPHONY_LOGE("UpdateCallsReportInfo failed! errCode:%{public}d", ret);
1204     } else {
1205         TELEPHONY_LOGI("UpdateCallsReportInfo success!");
1206     }
1207     return ret;
1208 }
1209 
ReportOttCallEventInfo(OttCallEventInfo & eventInfo)1210 int32_t CallManagerService::ReportOttCallEventInfo(OttCallEventInfo &eventInfo)
1211 {
1212     int32_t ret = DelayedSingleton<ReportCallInfoHandler>::GetInstance()->UpdateOttEventInfo(eventInfo);
1213     if (ret != TELEPHONY_SUCCESS) {
1214         TELEPHONY_LOGE("UpdateOttEventInfo failed! errCode:%{public}d", ret);
1215     } else {
1216         TELEPHONY_LOGI("UpdateOttEventInfo success!");
1217     }
1218     return ret;
1219 }
1220 
CloseUnFinishedUssd(int32_t slotId)1221 int32_t CallManagerService::CloseUnFinishedUssd(int32_t slotId)
1222 {
1223     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1224         TELEPHONY_LOGE("Non system applications use system APIs!");
1225         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1226     }
1227     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
1228         TELEPHONY_LOGE("Permission denied!");
1229         return TELEPHONY_ERR_PERMISSION_ERR;
1230     }
1231     if (callControlManagerPtr_ != nullptr) {
1232         return callControlManagerPtr_->CloseUnFinishedUssd(slotId);
1233     } else {
1234         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1235         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1236     }
1237 }
1238 
InputDialerSpecialCode(const std::string & specialCode)1239 int32_t CallManagerService::InputDialerSpecialCode(const std::string &specialCode)
1240 {
1241     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1242         TELEPHONY_LOGE("Non system applications use system APIs!");
1243         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1244     }
1245     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_PLACE_CALL)) {
1246         TELEPHONY_LOGE("Permission denied!");
1247         return TELEPHONY_ERR_PERMISSION_ERR;
1248     }
1249 
1250     auto it = find(supportSpecialCode_.begin(), supportSpecialCode_.end(), specialCode);
1251     if (it == supportSpecialCode_.end()) {
1252         TELEPHONY_LOGE("specialCode is not support");
1253         return TELEPHONY_ERR_ARGUMENT_INVALID;
1254     }
1255     AAFwk::Want want;
1256     want.SetAction(EventFwk::CommonEventSupport::COMMON_EVENT_SPECIAL_CODE);
1257     EventFwk::CommonEventData commonEventData;
1258     commonEventData.SetWant(want);
1259     commonEventData.SetData(specialCode);
1260     EventFwk::CommonEventPublishInfo publishInfo;
1261     if (!EventFwk::CommonEventManager::PublishCommonEvent(commonEventData, publishInfo, nullptr)) {
1262         TELEPHONY_LOGE("PublishCommonEvent fail");
1263         return TELEPHONY_ERR_PUBLISH_BROADCAST_FAIL;
1264     }
1265     return TELEPHONY_SUCCESS;
1266 }
1267 
RemoveMissedIncomingCallNotification()1268 int32_t CallManagerService::RemoveMissedIncomingCallNotification()
1269 {
1270     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1271         TELEPHONY_LOGE("Non-system applications use system APIs!");
1272         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1273     }
1274     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE) ||
1275         !TelephonyPermission::CheckPermission(OHOS_PERMISSION_READ_CALL_LOG) ||
1276         !TelephonyPermission::CheckPermission(OHOS_PERMISSION_WRITE_CALL_LOG)) {
1277         TELEPHONY_LOGE("Permission denied!");
1278         return TELEPHONY_ERR_PERMISSION_ERR;
1279     }
1280     if (callControlManagerPtr_ == nullptr) {
1281         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1282         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1283     }
1284     return callControlManagerPtr_->RemoveMissedIncomingCallNotification();
1285 }
1286 
SetVoIPCallState(int32_t state)1287 int32_t CallManagerService::SetVoIPCallState(int32_t state)
1288 {
1289     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1290         TELEPHONY_LOGE("Non-system applications use system APIs!");
1291         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1292     }
1293     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE) &&
1294         !TelephonyPermission::CheckPermission(OHOS_PERMISSION_GET_TELEPHONY_STATE)) {
1295         TELEPHONY_LOGE("Permission denied!");
1296         return TELEPHONY_ERR_PERMISSION_ERR;
1297     }
1298     if (callControlManagerPtr_ != nullptr) {
1299         return callControlManagerPtr_->SetVoIPCallState(state);
1300     } else {
1301         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1302         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1303     }
1304 }
1305 
GetVoIPCallState(int32_t & state)1306 int32_t CallManagerService::GetVoIPCallState(int32_t &state)
1307 {
1308     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1309         TELEPHONY_LOGE("Non-system applications use system APIs!");
1310         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1311     }
1312     if (callControlManagerPtr_ != nullptr) {
1313         return callControlManagerPtr_->GetVoIPCallState(state);
1314     } else {
1315         TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1316         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1317     }
1318 }
1319 
GetProxyObjectPtr(CallManagerProxyType proxyType)1320 sptr<IRemoteObject> CallManagerService::GetProxyObjectPtr(CallManagerProxyType proxyType)
1321 {
1322     std::lock_guard<std::mutex> guard(lock_);
1323     auto it = proxyObjectPtrMap_.find(static_cast<uint32_t>(proxyType));
1324     if (it != proxyObjectPtrMap_.end()) {
1325         TELEPHONY_LOGI("GetProxyObjectPtr success! proxyType:%{public}d", proxyType);
1326         return it->second;
1327     } else {
1328         switch (proxyType) {
1329             case PROXY_BLUETOOTH_CALL: {
1330                 sptr<BluetoothCallService> ptr = new (std::nothrow) BluetoothCallService();
1331                 if (ptr == nullptr) {
1332                     TELEPHONY_LOGE("create BluetoothCallService object failed!");
1333                     return nullptr;
1334                 }
1335                 proxyObjectPtrMap_[proxyType] = ptr->AsObject().GetRefPtr();
1336                 TELEPHONY_LOGI("create BluetoothCallService object success! proxyType:%{public}d", proxyType);
1337                 return ptr->AsObject().GetRefPtr();
1338             }
1339             default:
1340                 TELEPHONY_LOGE("invalid proxyType!");
1341                 break;
1342         }
1343     }
1344     TELEPHONY_LOGE("GetProxyObjectPtr failed! proxyType:%{public}d", proxyType);
1345     return nullptr;
1346 }
1347 
GetBundleName()1348 std::string CallManagerService::GetBundleName()
1349 {
1350     int32_t uid = IPCSkeleton::GetCallingUid();
1351     std::string bundleName = "";
1352     TelephonyPermission::GetBundleNameByUid(uid, bundleName);
1353     if (bundleName.empty()) {
1354         bundleName.append(std::to_string(uid));
1355         bundleName.append(std::to_string(IPCSkeleton::GetCallingPid()));
1356     }
1357     return bundleName;
1358 }
1359 
ReportAudioDeviceInfo()1360 int32_t CallManagerService::ReportAudioDeviceInfo()
1361 {
1362     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
1363         TELEPHONY_LOGE("Permission denied!");
1364         return TELEPHONY_ERR_PERMISSION_ERR;
1365     }
1366     return DelayedSingleton<AudioDeviceManager>::GetInstance()->ReportAudioDeviceChange();
1367 }
1368 
CancelCallUpgrade(int32_t callId)1369 int32_t CallManagerService::CancelCallUpgrade(int32_t callId)
1370 {
1371     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1372         TELEPHONY_LOGE("Non-system applications use system APIs!");
1373         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1374     }
1375     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_PLACE_CALL)) {
1376         TELEPHONY_LOGE("Permission denied!");
1377         return TELEPHONY_ERR_PERMISSION_ERR;
1378     }
1379     auto videoControlManager = DelayedSingleton<VideoControlManager>::GetInstance();
1380     if (videoControlManager != nullptr) {
1381         return DelayedSingleton<VideoControlManager>::GetInstance()->CancelCallUpgrade(callId);
1382     } else {
1383         TELEPHONY_LOGE("videoControlManager is nullptr!");
1384         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1385     }
1386 }
1387 
RequestCameraCapabilities(int32_t callId)1388 int32_t CallManagerService::RequestCameraCapabilities(int32_t callId)
1389 {
1390     if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1391         TELEPHONY_LOGE("Non-system applications use system APIs!");
1392         return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1393     }
1394     if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_GET_TELEPHONY_STATE)) {
1395         TELEPHONY_LOGE("Permission denied!");
1396         return TELEPHONY_ERR_PERMISSION_ERR;
1397     }
1398     auto videoControlManager = DelayedSingleton<VideoControlManager>::GetInstance();
1399     if (videoControlManager != nullptr) {
1400         return DelayedSingleton<VideoControlManager>::GetInstance()->RequestCameraCapabilities(callId);
1401     } else {
1402         TELEPHONY_LOGE("videoControlManager is nullptr!");
1403         return TELEPHONY_ERR_LOCAL_PTR_NULL;
1404     }
1405 }
1406 } // namespace Telephony
1407 } // namespace OHOS
1408