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