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