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 "video_control_manager.h"
37 #include "voip_call_connection.h"
38 #include "distributed_call_manager.h"
39 #include "call_earthquake_alarm_subscriber.h"
40 #include "distributed_communication_manager.h"
41 #include "want_params_wrapper.h"
42 #include "string_wrapper.h"
43 #include "bluetooth_call_connection.h"
44 #include "interoperable_communication_manager.h"
45 #include "voip_call_connection.h"
46 #include "audio_control_manager.h"
47
48 #ifdef SUPPORT_MUTE_BY_DATABASE
49 #include "interoperable_settings_handler.h"
50 #endif
51
52 #ifdef OHOS_BUILD_ENABLE_TELEPHONY_CUST
53 #include "telephony_cust_wrapper.h"
54 #endif
55 #include "core_service_client.h"
56
57 namespace OHOS {
58 namespace Telephony {
59 using namespace Security::AccessToken;
60 static constexpr const char *OHOS_PERMISSION_SET_TELEPHONY_STATE = "ohos.permission.SET_TELEPHONY_STATE";
61 static constexpr const char *OHOS_PERMISSION_GET_TELEPHONY_STATE = "ohos.permission.GET_TELEPHONY_STATE";
62 static constexpr const char *OHOS_PERMISSION_PLACE_CALL = "ohos.permission.PLACE_CALL";
63 static constexpr const char *OHOS_PERMISSION_ANSWER_CALL = "ohos.permission.ANSWER_CALL";
64 static constexpr const char *OHOS_PERMISSION_READ_CALL_LOG = "ohos.permission.READ_CALL_LOG";
65 static constexpr const char *OHOS_PERMISSION_WRITE_CALL_LOG = "ohos.permission.WRITE_CALL_LOG";
66 static constexpr const char *SLOT_ID = "accountId";
67 static constexpr const char *CALL_TYPE = "callType";
68 static constexpr const char *VIDEO_STATE = "videoState";
69 static constexpr int32_t CLEAR_VOICE_MAIL_COUNT = 0;
70 static constexpr int32_t IS_CELIA_CALL = 1;
71 static constexpr int32_t EDM_UID = 3057;
72
73 const bool g_registerResult =
74 SystemAbility::MakeAndRegisterAbility(DelayedSingleton<CallManagerService>::GetInstance().get());
75
CallManagerService()76 CallManagerService::CallManagerService()
77 : SystemAbility(TELEPHONY_CALL_MANAGER_SYS_ABILITY_ID, true), callControlManagerPtr_(nullptr)
78 {}
79
~CallManagerService()80 CallManagerService::~CallManagerService()
81 {}
82
SetCallStatusManager(std::shared_ptr<CallStatusManager> callStatusManager)83 void CallManagerService::SetCallStatusManager(std::shared_ptr<CallStatusManager> callStatusManager)
84 {
85 callStatusManagerPtr_ = callStatusManager;
86 }
87
Init()88 bool CallManagerService::Init()
89 {
90 #ifdef OHOS_BUILD_ENABLE_TELEPHONY_CUST
91 TELEPHONY_CUST_WRAPPER.InitTelephonyCustWrapper();
92 #endif
93 if (!DelayedSingleton<CallControlManager>::GetInstance()->Init()) {
94 TELEPHONY_LOGE("CallControlManager init failed!");
95 return false;
96 }
97 callControlManagerPtr_ = DelayedSingleton<CallControlManager>::GetInstance();
98 if (callControlManagerPtr_ == nullptr) {
99 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
100 return false;
101 }
102 DelayedSingleton<ReportCallInfoHandler>::GetInstance()->Init();
103 DelayedSingleton<CellularCallConnection>::GetInstance()->Init(TELEPHONY_CELLULAR_CALL_SYS_ABILITY_ID);
104 DelayedSingleton<CallRecordsManager>::GetInstance()->Init();
105 DelayedSingleton<BluetoothConnection>::GetInstance()->Init();
106 DelayedSingleton<DistributedCallManager>::GetInstance()->Init();
107 DelayedSingleton<DistributedCommunicationManager>::GetInstance()->Init();
108 AddSystemAbilityListener(AUDIO_POLICY_SERVICE_ID);
109 AddSystemAbilityListener(DISTRIBUTED_HARDWARE_DEVICEMANAGER_SA_ID);
110 return true;
111 }
112
OnAddSystemAbility(int32_t systemAbilityId,const std::string & deviceId)113 void CallManagerService::OnAddSystemAbility(int32_t systemAbilityId, const std::string &deviceId)
114 {
115 TELEPHONY_LOGI("OnAddSystemAbility : %{public}d", systemAbilityId);
116 switch (systemAbilityId) {
117 case AUDIO_POLICY_SERVICE_ID:
118 DelayedSingleton<AudioProxy>::GetInstance()->SetAudioMicStateChangeCallback();
119 DelayedSingleton<AudioProxy>::GetInstance()->SetAudioDeviceChangeCallback();
120 DelayedSingleton<AudioProxy>::GetInstance()->SetAudioPreferDeviceChangeCallback();
121 break;
122 case DISTRIBUTED_HARDWARE_DEVICEMANAGER_SA_ID:
123 DelayedSingleton<InteroperableDeviceObserver>::GetInstance()->Init();
124 break;
125 default:
126 TELEPHONY_LOGE("OnAddSystemAbility unhandle id : %{public}d", systemAbilityId);
127 break;
128 }
129 }
130
UnInit()131 void CallManagerService::UnInit()
132 {
133 DelayedSingleton<CellularCallConnection>::GetInstance()->UnInit();
134 DelayedSingleton<CallControlManager>::GetInstance()->UnInit();
135 callControlManagerPtr_ = nullptr;
136 std::lock_guard<std::mutex> guard(bluetoothCallCallbackLock_);
137 if (bluetoothCallCallbackPtr_ != nullptr) {
138 bluetoothCallCallbackPtr_ = nullptr;
139 }
140 }
141
OnStart()142 void CallManagerService::OnStart()
143 {
144 using namespace std::chrono;
145 time_point<high_resolution_clock> beginTime = high_resolution_clock::now();
146 std::lock_guard<std::mutex> guard(lock_);
147 if (state_ == ServiceRunningState::STATE_RUNNING) {
148 return;
149 }
150
151 if (!Init()) {
152 TELEPHONY_LOGE("Leave, init failed!");
153 return;
154 }
155
156 bool ret = SystemAbility::Publish(DelayedSingleton<CallManagerService>::GetInstance().get());
157 if (!ret) {
158 TELEPHONY_LOGE("Leave, publishing CallManagerService failed!");
159 return;
160 }
161 TELEPHONY_LOGI("Publish CallManagerService SUCCESS");
162
163 state_ = ServiceRunningState::STATE_RUNNING;
164 struct tm *timeNow = nullptr;
165 struct tm nowTime = { 0 };
166 time_t second = time(0);
167 if (second < 0) {
168 return;
169 }
170 timeNow = localtime_r(&second, &nowTime);
171 if (timeNow != nullptr) {
172 spendTime_ = duration_cast<std::chrono::milliseconds>(high_resolution_clock::now() - beginTime).count();
173 TELEPHONY_LOGI(
174 "CallManagerService start time:%{public}d-%{public}d-%{public}d %{public}d:%{public}d:%{public}d",
175 timeNow->tm_year + startTime_, timeNow->tm_mon + extraMonth_, timeNow->tm_mday, timeNow->tm_hour,
176 timeNow->tm_min, timeNow->tm_sec);
177 TELEPHONY_LOGI("CallManagerService start service cost time:%{public}d(milliseconds)", spendTime_);
178 }
179 LocationSubscriber::Subscriber();
180 }
181
OnStop()182 void CallManagerService::OnStop()
183 {
184 std::lock_guard<std::mutex> guard(lock_);
185 struct tm *timeNow = nullptr;
186 struct tm nowTime = { 0 };
187 time_t second = time(0);
188 if (second < 0) {
189 return;
190 }
191 timeNow = localtime_r(&second, &nowTime);
192 if (timeNow != nullptr) {
193 TELEPHONY_LOGI(
194 "CallManagerService dump time:%{public}d-%{public}d-%{public}d %{public}d:%{public}d:%{public}d",
195 timeNow->tm_year + startTime_, timeNow->tm_mon + extraMonth_, timeNow->tm_mday, timeNow->tm_hour,
196 timeNow->tm_min, timeNow->tm_sec);
197 }
198 DelayedSingleton<CellularCallConnection>::GetInstance()->UnInit();
199 state_ = ServiceRunningState::STATE_STOPPED;
200 UnInit();
201 }
202
GetServiceRunningState()203 int32_t CallManagerService::GetServiceRunningState()
204 {
205 return static_cast<int32_t>(state_);
206 }
207
Dump(std::int32_t fd,const std::vector<std::u16string> & args)208 int32_t CallManagerService::Dump(std::int32_t fd, const std::vector<std::u16string> &args)
209 {
210 if (fd < 0) {
211 TELEPHONY_LOGE("dump fd invalid");
212 return TELEPHONY_ERR_ARGUMENT_INVALID;
213 }
214 std::vector<std::string> argsInStr;
215 for (const auto &arg : args) {
216 TELEPHONY_LOGI("Dump args: %s", Str16ToStr8(arg).c_str());
217 argsInStr.emplace_back(Str16ToStr8(arg));
218 }
219 std::string result;
220 CallManagerDumpHelper dumpHelper;
221 if (dumpHelper.Dump(argsInStr, result)) {
222 TELEPHONY_LOGI("%s", result.c_str());
223 std::int32_t ret = dprintf(fd, "%s", result.c_str());
224 if (ret < 0) {
225 TELEPHONY_LOGE("dprintf to dump fd failed");
226 return CALL_ERR_SERVICE_DUMP_FAILED;
227 }
228 return TELEPHONY_SUCCESS;
229 }
230 TELEPHONY_LOGW("dumpHelper failed");
231 return CALL_ERR_SERVICE_DUMP_FAILED;
232 }
233
GetBindTime()234 std::string CallManagerService::GetBindTime()
235 {
236 bindTime_ =
237 std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch())
238 .count();
239 std::ostringstream oss;
240 oss << bindTime_;
241 return oss.str();
242 }
243
GetStartServiceSpent()244 std::string CallManagerService::GetStartServiceSpent()
245 {
246 std::ostringstream oss;
247 oss << spendTime_;
248 return oss.str();
249 }
250
RegisterCallBack(const sptr<ICallAbilityCallback> & callback)251 int32_t CallManagerService::RegisterCallBack(const sptr<ICallAbilityCallback> &callback)
252 {
253 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
254 TELEPHONY_LOGE("Non-system applications use system APIs!");
255 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
256 }
257 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE) &&
258 !TelephonyPermission::CheckPermission(OHOS_PERMISSION_GET_TELEPHONY_STATE)) {
259 TELEPHONY_LOGE("Permission denied.");
260 return TELEPHONY_ERR_PERMISSION_ERR;
261 }
262 return DelayedSingleton<CallAbilityReportProxy>::GetInstance()->RegisterCallBack(callback, GetBundleInfo());
263 }
264
UnRegisterCallBack()265 int32_t CallManagerService::UnRegisterCallBack()
266 {
267 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
268 TELEPHONY_LOGE("Non-system applications use system APIs!");
269 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
270 }
271 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
272 TELEPHONY_LOGE("Permission denied!");
273 return TELEPHONY_ERR_PERMISSION_ERR;
274 }
275 return DelayedSingleton<CallAbilityReportProxy>::GetInstance()->UnRegisterCallBack(GetBundleInfo());
276 }
277
ObserverOnCallDetailsChange()278 int32_t CallManagerService::ObserverOnCallDetailsChange()
279 {
280 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
281 TELEPHONY_LOGE("Non-system applications use system APIs!");
282 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
283 }
284 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE) &&
285 !TelephonyPermission::CheckPermission(OHOS_PERMISSION_GET_TELEPHONY_STATE)) {
286 TELEPHONY_LOGE("Permission denied!");
287 return TELEPHONY_ERR_PERMISSION_ERR;
288 }
289
290 std::vector<CallAttributeInfo> callAttributeInfo = CallObjectManager::GetAllCallInfoList();
291 for (auto info : callAttributeInfo) {
292 DelayedSingleton<CallAbilityReportProxy>::GetInstance()->ReportCallStateInfo(info, GetBundleInfo());
293 }
294 return TELEPHONY_SUCCESS;
295 }
296
DialCall(std::u16string number,AppExecFwk::PacMap & extras)297 int32_t CallManagerService::DialCall(std::u16string number, AppExecFwk::PacMap &extras)
298 {
299 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
300 TELEPHONY_LOGE("Non-system applications use system APIs!");
301 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
302 }
303 DelayedSingleton<CallManagerHisysevent>::GetInstance()->SetDialStartTime();
304 StartAsyncTrace(HITRACE_TAG_OHOS, "DialCall", getpid());
305 int32_t uid = IPCSkeleton::GetCallingUid();
306 std::string bundleName = "";
307 TelephonyPermission::GetBundleNameByUid(uid, bundleName);
308 extras.PutStringValue("bundleName", bundleName);
309 if (extras.GetBooleanValue("btSlotIdUnknown", false)) {
310 BtCallWaitSlotId(extras, number);
311 }
312 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_PLACE_CALL)) {
313 TELEPHONY_LOGE("Permission denied!");
314 CallManagerHisysevent::WriteDialCallFaultEvent(extras.GetIntValue(SLOT_ID), extras.GetIntValue(CALL_TYPE),
315 extras.GetIntValue(VIDEO_STATE), TELEPHONY_ERR_PERMISSION_ERR, OHOS_PERMISSION_PLACE_CALL);
316 FinishAsyncTrace(HITRACE_TAG_OHOS, "DialCall", getpid());
317 return TELEPHONY_ERR_PERMISSION_ERR;
318 }
319 #ifdef OHOS_BUILD_ENABLE_TELEPHONY_CUST
320 if (TELEPHONY_CUST_WRAPPER.isChangeDialNumberToTwEmc_ != nullptr &&
321 TELEPHONY_CUST_WRAPPER.isChangeDialNumberToTwEmc_(number, extras.GetIntValue(SLOT_ID))) {
322 TELEPHONY_LOGI("changed dial num to tw emc");
323 }
324 #endif
325 if (callControlManagerPtr_ != nullptr) {
326 int32_t ret = callControlManagerPtr_->DialCall(number, extras);
327 if (ret == TELEPHONY_SUCCESS) {
328 std::u16string voiceMailNumber;
329 CoreManagerInner::GetInstance().GetVoiceMailNumber(extras.GetIntValue(SLOT_ID), voiceMailNumber);
330 if (voiceMailNumber == number) {
331 CoreManagerInner::GetInstance().SetVoiceMailCount(extras.GetIntValue(SLOT_ID), CLEAR_VOICE_MAIL_COUNT);
332 }
333 } else {
334 std::string errordesc = "";
335 DelayedSingleton<CallManagerHisysevent>::GetInstance()->GetErrorDescription(ret, errordesc);
336 CallManagerHisysevent::WriteDialCallFaultEvent(extras.GetIntValue(SLOT_ID), extras.GetIntValue(CALL_TYPE),
337 extras.GetIntValue(VIDEO_STATE), ret, errordesc);
338 FinishAsyncTrace(HITRACE_TAG_OHOS, "DialCall", getpid());
339 }
340 return ret;
341 } else {
342 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
343 FinishAsyncTrace(HITRACE_TAG_OHOS, "DialCall", getpid());
344 return TELEPHONY_ERR_LOCAL_PTR_NULL;
345 }
346 }
347
BtCallWaitSlotId(AppExecFwk::PacMap & dialInfo,const std::u16string & number)348 void CallManagerService::BtCallWaitSlotId(AppExecFwk::PacMap &dialInfo, const std::u16string &number)
349 {
350 TELEPHONY_LOGE("BtCallWaitSlotId enter");
351 std::string phoneNum(Str16ToStr8(number));
352 auto slotId = DelayedSingleton<InteroperableCommunicationManager>::GetInstance()->GetBtCallSlotId(phoneNum);
353 bool hasSimCard = false;
354 DelayedRefSingleton<CoreServiceClient>::GetInstance().HasSimCard(slotId, hasSimCard);
355 if (hasSimCard) {
356 TELEPHONY_LOGI("bt call, slotId[%{public}d]", slotId);
357 dialInfo.PutIntValue(SLOT_ID, slotId);
358 }
359 }
360
MakeCall(std::string number)361 int32_t CallManagerService::MakeCall(std::string number)
362 {
363 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
364 TELEPHONY_LOGE("Non-system applications use system APIs!");
365 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
366 }
367 std::string identity = IPCSkeleton::ResetCallingIdentity();
368 AAFwk::Want want;
369 AppExecFwk::ElementName element("", "com.ohos.contacts", "com.ohos.contacts.MainAbility");
370 want.SetElement(element);
371 AAFwk::WantParams wantParams;
372 wantParams.SetParam("phoneNumber", AAFwk::String::Box(number));
373 wantParams.SetParam("pageFlag", AAFwk::String::Box("page_flag_edit_before_calling"));
374 want.SetParams(wantParams);
375 ErrCode err = AAFwk::AbilityManagerClient::GetInstance()->StartAbility(want);
376 IPCSkeleton::SetCallingIdentity(identity);
377 if (err != ERR_OK) {
378 TELEPHONY_LOGE("Fail to make call, err:%{public}d", err);
379 return TELEPHONY_ERR_UNINIT;
380 }
381 return TELEPHONY_SUCCESS;
382 }
383
AnswerCall(int32_t callId,int32_t videoState)384 int32_t CallManagerService::AnswerCall(int32_t callId, int32_t videoState)
385 {
386 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
387 TELEPHONY_LOGE("Non-system applications use system APIs!");
388 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
389 }
390 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_ANSWER_CALL)) {
391 TELEPHONY_LOGE("Permission denied!");
392 return TELEPHONY_ERR_PERMISSION_ERR;
393 }
394 DelayedSingleton<CallManagerHisysevent>::GetInstance()->SetAnswerStartTime();
395 if (callControlManagerPtr_ != nullptr) {
396 return callControlManagerPtr_->AnswerCall(callId, videoState);
397 } else {
398 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
399 return TELEPHONY_ERR_LOCAL_PTR_NULL;
400 }
401 }
402
RejectCall(int32_t callId,bool rejectWithMessage,std::u16string textMessage)403 int32_t CallManagerService::RejectCall(int32_t callId, bool rejectWithMessage, std::u16string textMessage)
404 {
405 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
406 TELEPHONY_LOGE("Non-system applications use system APIs!");
407 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
408 }
409 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_ANSWER_CALL) &&
410 !TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
411 TELEPHONY_LOGE("Permission denied!");
412 return TELEPHONY_ERR_PERMISSION_ERR;
413 }
414 if (callControlManagerPtr_ != nullptr) {
415 return callControlManagerPtr_->RejectCall(callId, rejectWithMessage, textMessage);
416 } else {
417 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
418 return TELEPHONY_ERR_LOCAL_PTR_NULL;
419 }
420 }
421
HangUpCall(int32_t callId)422 int32_t CallManagerService::HangUpCall(int32_t callId)
423 {
424 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
425 TELEPHONY_LOGE("Non-system applications use system APIs!");
426 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
427 }
428 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_ANSWER_CALL) &&
429 !TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
430 TELEPHONY_LOGE("Permission denied!");
431 return TELEPHONY_ERR_PERMISSION_ERR;
432 }
433 if (callControlManagerPtr_ != nullptr) {
434 return callControlManagerPtr_->HangUpCall(callId);
435 } else {
436 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
437 return TELEPHONY_ERR_LOCAL_PTR_NULL;
438 }
439 }
440
GetCallState()441 int32_t CallManagerService::GetCallState()
442 {
443 if (callControlManagerPtr_ != nullptr) {
444 return callControlManagerPtr_->GetCallState();
445 } else {
446 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
447 return TELEPHONY_ERR_LOCAL_PTR_NULL;
448 }
449 }
450
HoldCall(int32_t callId)451 int32_t CallManagerService::HoldCall(int32_t callId)
452 {
453 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
454 TELEPHONY_LOGE("Non-system applications use system APIs!");
455 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
456 }
457 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_ANSWER_CALL)) {
458 TELEPHONY_LOGE("Permission denied!");
459 return TELEPHONY_ERR_PERMISSION_ERR;
460 }
461 if (callControlManagerPtr_ != nullptr) {
462 return callControlManagerPtr_->HoldCall(callId);
463 } else {
464 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
465 return TELEPHONY_ERR_LOCAL_PTR_NULL;
466 }
467 }
468
UnHoldCall(int32_t callId)469 int32_t CallManagerService::UnHoldCall(int32_t callId)
470 {
471 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
472 TELEPHONY_LOGE("Non-system applications use system APIs!");
473 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
474 }
475 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_ANSWER_CALL)) {
476 TELEPHONY_LOGE("Permission denied!");
477 return TELEPHONY_ERR_PERMISSION_ERR;
478 }
479 if (callControlManagerPtr_ != nullptr) {
480 return callControlManagerPtr_->UnHoldCall(callId);
481 } else {
482 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
483 return TELEPHONY_ERR_LOCAL_PTR_NULL;
484 }
485 }
486
SwitchCall(int32_t callId)487 int32_t CallManagerService::SwitchCall(int32_t callId)
488 {
489 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
490 TELEPHONY_LOGE("Non-system applications use system APIs!");
491 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
492 }
493 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_ANSWER_CALL)) {
494 TELEPHONY_LOGE("Permission denied!");
495 return TELEPHONY_ERR_PERMISSION_ERR;
496 }
497 if (callControlManagerPtr_ != nullptr) {
498 return callControlManagerPtr_->SwitchCall(callId);
499 } else {
500 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
501 return TELEPHONY_ERR_LOCAL_PTR_NULL;
502 }
503 }
504
HasCall(const bool isInCludeVoipCall)505 bool CallManagerService::HasCall(const bool isInCludeVoipCall)
506 {
507 TELEPHONY_LOGI("isInCludeVoipCall = %{public}d", isInCludeVoipCall);
508 if (callControlManagerPtr_ != nullptr) {
509 if (isInCludeVoipCall) {
510 return callControlManagerPtr_->HasCall();
511 } else {
512 return callControlManagerPtr_->HasCellularCallExist();
513 }
514 } else {
515 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
516 return false;
517 }
518 }
519
IsNewCallAllowed(bool & enabled)520 int32_t CallManagerService::IsNewCallAllowed(bool &enabled)
521 {
522 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
523 TELEPHONY_LOGE("Non-system applications use system APIs!");
524 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
525 }
526 if (callControlManagerPtr_ != nullptr) {
527 return callControlManagerPtr_->IsNewCallAllowed(enabled);
528 } else {
529 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
530 return TELEPHONY_ERR_LOCAL_PTR_NULL;
531 }
532 }
533
RegisterVoipCallManagerCallback()534 int32_t CallManagerService::RegisterVoipCallManagerCallback()
535 {
536 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
537 TELEPHONY_LOGE("Non-system applications use system APIs!");
538 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
539 }
540 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_GET_TELEPHONY_STATE)) {
541 TELEPHONY_LOGE("Permission denied!");
542 return TELEPHONY_ERR_PERMISSION_ERR;
543 }
544 std::lock_guard<std::mutex> guard(lock_);
545 DelayedSingleton<VoipCallConnection>::GetInstance()->Init(TELEPHONY_VOIP_CALL_MANAGER_SYS_ABILITY_ID);
546 sptr<ICallStatusCallback> voipCallCallbackPtr = (std::make_unique<CallStatusCallback>()).release();
547 if (voipCallCallbackPtr == nullptr) {
548 TELEPHONY_LOGE("voipCallCallbackPtr is nullptr!");
549 return TELEPHONY_ERR_LOCAL_PTR_NULL;
550 }
551 DelayedSingleton<VoipCallConnection>::GetInstance()->RegisterCallManagerCallBack(voipCallCallbackPtr);
552 return 0;
553 }
554
UnRegisterVoipCallManagerCallback()555 int32_t CallManagerService::UnRegisterVoipCallManagerCallback()
556 {
557 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
558 TELEPHONY_LOGE("Non-system applications use system APIs!");
559 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
560 }
561 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_GET_TELEPHONY_STATE)) {
562 TELEPHONY_LOGE("Permission denied!");
563 return TELEPHONY_ERR_PERMISSION_ERR;
564 }
565 std::lock_guard<std::mutex> guard(lock_);
566 return DelayedSingleton<VoipCallConnection>::GetInstance()->UnRegisterCallManagerCallBack();
567 }
568
IsRinging(bool & enabled)569 int32_t CallManagerService::IsRinging(bool &enabled)
570 {
571 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
572 TELEPHONY_LOGE("Non-system applications use system APIs!");
573 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
574 }
575 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
576 TELEPHONY_LOGE("Permission denied!");
577 return TELEPHONY_ERR_PERMISSION_ERR;
578 }
579 if (callControlManagerPtr_ != nullptr) {
580 return callControlManagerPtr_->IsRinging(enabled);
581 } else {
582 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
583 return TELEPHONY_ERR_LOCAL_PTR_NULL;
584 }
585 }
586
IsInEmergencyCall(bool & enabled)587 int32_t CallManagerService::IsInEmergencyCall(bool &enabled)
588 {
589 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
590 TELEPHONY_LOGE("Non-system applications use system APIs!");
591 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
592 }
593 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_GET_TELEPHONY_STATE)) {
594 TELEPHONY_LOGE("Permission denied!");
595 return TELEPHONY_ERR_PERMISSION_ERR;
596 }
597 if (callControlManagerPtr_ != nullptr) {
598 return callControlManagerPtr_->HasEmergency(enabled);
599 } else {
600 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
601 return TELEPHONY_ERR_LOCAL_PTR_NULL;
602 }
603 }
604
StartDtmf(int32_t callId,char str)605 int32_t CallManagerService::StartDtmf(int32_t callId, char str)
606 {
607 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
608 TELEPHONY_LOGE("Non-system applications use system APIs!");
609 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
610 }
611 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
612 TELEPHONY_LOGE("Permission denied!");
613 return TELEPHONY_ERR_PERMISSION_ERR;
614 }
615 if (callControlManagerPtr_ != nullptr) {
616 return callControlManagerPtr_->StartDtmf(callId, str);
617 } else {
618 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
619 return TELEPHONY_ERR_LOCAL_PTR_NULL;
620 }
621 }
622
StopDtmf(int32_t callId)623 int32_t CallManagerService::StopDtmf(int32_t callId)
624 {
625 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
626 TELEPHONY_LOGE("Non-system applications use system APIs!");
627 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
628 }
629 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
630 TELEPHONY_LOGE("Permission denied!");
631 return TELEPHONY_ERR_PERMISSION_ERR;
632 }
633 if (callControlManagerPtr_ != nullptr) {
634 return callControlManagerPtr_->StopDtmf(callId);
635 } else {
636 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
637 return TELEPHONY_ERR_LOCAL_PTR_NULL;
638 }
639 }
640
PostDialProceed(int32_t callId,bool proceed)641 int32_t CallManagerService::PostDialProceed(int32_t callId, bool proceed)
642 {
643 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
644 TELEPHONY_LOGE("Non-system applications use system APIs!");
645 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
646 }
647 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
648 TELEPHONY_LOGE("Permission denied!");
649 return TELEPHONY_ERR_PERMISSION_ERR;
650 }
651 if (callControlManagerPtr_ != nullptr) {
652 return callControlManagerPtr_->PostDialProceed(callId, proceed);
653 } else {
654 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
655 return TELEPHONY_ERR_LOCAL_PTR_NULL;
656 }
657 }
658
GetCallWaiting(int32_t slotId)659 int32_t CallManagerService::GetCallWaiting(int32_t slotId)
660 {
661 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
662 TELEPHONY_LOGE("Non-system applications use system APIs!");
663 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
664 }
665 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_GET_TELEPHONY_STATE)) {
666 TELEPHONY_LOGE("Permission denied!");
667 return TELEPHONY_ERR_PERMISSION_ERR;
668 }
669 if (callControlManagerPtr_ != nullptr) {
670 return callControlManagerPtr_->GetCallWaiting(slotId);
671 } else {
672 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
673 return TELEPHONY_ERR_LOCAL_PTR_NULL;
674 }
675 }
676
SetCallWaiting(int32_t slotId,bool activate)677 int32_t CallManagerService::SetCallWaiting(int32_t slotId, bool activate)
678 {
679 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
680 TELEPHONY_LOGE("Non-system applications use system APIs!");
681 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
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_->SetCallWaiting(slotId, activate);
689 } else {
690 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
691 return TELEPHONY_ERR_LOCAL_PTR_NULL;
692 }
693 }
694
GetCallRestriction(int32_t slotId,CallRestrictionType type)695 int32_t CallManagerService::GetCallRestriction(int32_t slotId, CallRestrictionType type)
696 {
697 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
698 TELEPHONY_LOGE("Non-system applications use system APIs!");
699 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
700 }
701 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_GET_TELEPHONY_STATE)) {
702 TELEPHONY_LOGE("Permission denied!");
703 return TELEPHONY_ERR_PERMISSION_ERR;
704 }
705 if (callControlManagerPtr_ != nullptr) {
706 return callControlManagerPtr_->GetCallRestriction(slotId, type);
707 } else {
708 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
709 return TELEPHONY_ERR_LOCAL_PTR_NULL;
710 }
711 }
712
SetCallRestriction(int32_t slotId,CallRestrictionInfo & info)713 int32_t CallManagerService::SetCallRestriction(int32_t slotId, CallRestrictionInfo &info)
714 {
715 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
716 TELEPHONY_LOGE("Non-system applications use system APIs!");
717 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
718 }
719 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
720 TELEPHONY_LOGE("Permission denied!");
721 return TELEPHONY_ERR_PERMISSION_ERR;
722 }
723 if (callControlManagerPtr_ != nullptr) {
724 return callControlManagerPtr_->SetCallRestriction(slotId, info);
725 } else {
726 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
727 return TELEPHONY_ERR_LOCAL_PTR_NULL;
728 }
729 }
730
SetCallRestrictionPassword(int32_t slotId,CallRestrictionType fac,const char * oldPassword,const char * newPassword)731 int32_t CallManagerService::SetCallRestrictionPassword(
732 int32_t slotId, CallRestrictionType fac, const char *oldPassword, const char *newPassword)
733 {
734 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
735 TELEPHONY_LOGE("Non-system applications use system APIs!");
736 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
737 }
738 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
739 TELEPHONY_LOGE("Permission denied!");
740 return TELEPHONY_ERR_PERMISSION_ERR;
741 }
742 if (callControlManagerPtr_ != nullptr) {
743 return callControlManagerPtr_->SetCallRestrictionPassword(slotId, fac, oldPassword, newPassword);
744 } else {
745 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
746 return TELEPHONY_ERR_LOCAL_PTR_NULL;
747 }
748 }
749
GetCallTransferInfo(int32_t slotId,CallTransferType type)750 int32_t CallManagerService::GetCallTransferInfo(int32_t slotId, CallTransferType type)
751 {
752 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
753 TELEPHONY_LOGE("Non-system applications use system APIs!");
754 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
755 }
756 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_GET_TELEPHONY_STATE)) {
757 TELEPHONY_LOGE("Permission denied!");
758 return TELEPHONY_ERR_PERMISSION_ERR;
759 }
760 if (callControlManagerPtr_ != nullptr) {
761 return callControlManagerPtr_->GetCallTransferInfo(slotId, type);
762 } else {
763 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
764 return TELEPHONY_ERR_LOCAL_PTR_NULL;
765 }
766 }
767
SetCallTransferInfo(int32_t slotId,CallTransferInfo & info)768 int32_t CallManagerService::SetCallTransferInfo(int32_t slotId, CallTransferInfo &info)
769 {
770 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
771 TELEPHONY_LOGE("Non-system applications use system APIs!");
772 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
773 }
774 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
775 TELEPHONY_LOGE("Permission denied!");
776 return TELEPHONY_ERR_PERMISSION_ERR;
777 }
778 if (callControlManagerPtr_ != nullptr) {
779 return callControlManagerPtr_->SetCallTransferInfo(slotId, info);
780 } else {
781 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
782 return TELEPHONY_ERR_LOCAL_PTR_NULL;
783 }
784 }
785
CanSetCallTransferTime(int32_t slotId,bool & result)786 int32_t CallManagerService::CanSetCallTransferTime(int32_t slotId, bool &result)
787 {
788 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
789 TELEPHONY_LOGE("Non-system applications use system APIs!");
790 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
791 }
792 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_GET_TELEPHONY_STATE)) {
793 TELEPHONY_LOGE("Permission denied!");
794 return TELEPHONY_ERR_PERMISSION_ERR;
795 }
796 if (callControlManagerPtr_ != nullptr) {
797 return callControlManagerPtr_->CanSetCallTransferTime(slotId, result);
798 } else {
799 TELEPHONY_LOGE("[slot%{public}d] callControlManagerPtr_ is nullptr!", slotId);
800 return TELEPHONY_ERR_LOCAL_PTR_NULL;
801 }
802 }
803
SetCallPreferenceMode(int32_t slotId,int32_t mode)804 int32_t CallManagerService::SetCallPreferenceMode(int32_t slotId, int32_t mode)
805 {
806 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
807 TELEPHONY_LOGE("Permission denied!");
808 return TELEPHONY_ERR_PERMISSION_ERR;
809 }
810 if (callControlManagerPtr_ != nullptr) {
811 return callControlManagerPtr_->SetCallPreferenceMode(slotId, mode);
812 } else {
813 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
814 return TELEPHONY_ERR_LOCAL_PTR_NULL;
815 }
816 }
817
StartRtt(int32_t callId,std::u16string & msg)818 int32_t CallManagerService::StartRtt(int32_t callId, std::u16string &msg)
819 {
820 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
821 TELEPHONY_LOGE("Non-system applications use system APIs!");
822 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
823 }
824 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_PLACE_CALL)) {
825 TELEPHONY_LOGE("Permission denied!");
826 return TELEPHONY_ERR_PERMISSION_ERR;
827 }
828 if (callControlManagerPtr_ != nullptr) {
829 return callControlManagerPtr_->StartRtt(callId, msg);
830 } else {
831 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
832 return TELEPHONY_ERR_LOCAL_PTR_NULL;
833 }
834 }
835
StopRtt(int32_t callId)836 int32_t CallManagerService::StopRtt(int32_t callId)
837 {
838 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
839 TELEPHONY_LOGE("Non-system applications use system APIs!");
840 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
841 }
842 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_PLACE_CALL)) {
843 TELEPHONY_LOGE("Permission denied!");
844 return TELEPHONY_ERR_PERMISSION_ERR;
845 }
846 if (callControlManagerPtr_ != nullptr) {
847 return callControlManagerPtr_->StopRtt(callId);
848 } else {
849 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
850 return TELEPHONY_ERR_LOCAL_PTR_NULL;
851 }
852 }
853
CombineConference(int32_t mainCallId)854 int32_t CallManagerService::CombineConference(int32_t mainCallId)
855 {
856 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
857 TELEPHONY_LOGE("Non-system applications use system APIs!");
858 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
859 }
860 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
861 TELEPHONY_LOGE("Permission denied!");
862 return TELEPHONY_ERR_PERMISSION_ERR;
863 }
864 if (callControlManagerPtr_ != nullptr) {
865 return callControlManagerPtr_->CombineConference(mainCallId);
866 } else {
867 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
868 return TELEPHONY_ERR_LOCAL_PTR_NULL;
869 }
870 }
871
SeparateConference(int32_t callId)872 int32_t CallManagerService::SeparateConference(int32_t callId)
873 {
874 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
875 TELEPHONY_LOGE("Non-system applications use system APIs!");
876 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
877 }
878 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
879 TELEPHONY_LOGE("Permission denied!");
880 return TELEPHONY_ERR_PERMISSION_ERR;
881 }
882 if (callControlManagerPtr_ != nullptr) {
883 return callControlManagerPtr_->SeparateConference(callId);
884 } else {
885 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
886 return TELEPHONY_ERR_LOCAL_PTR_NULL;
887 }
888 }
889
KickOutFromConference(int32_t callId)890 int32_t CallManagerService::KickOutFromConference(int32_t callId)
891 {
892 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
893 TELEPHONY_LOGE("Non-system applications use system APIs!");
894 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
895 }
896 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_PLACE_CALL)) {
897 TELEPHONY_LOGE("Permission denied!");
898 return TELEPHONY_ERR_PERMISSION_ERR;
899 }
900 if (callControlManagerPtr_ != nullptr) {
901 return callControlManagerPtr_->KickOutFromConference(callId);
902 } else {
903 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
904 return TELEPHONY_ERR_LOCAL_PTR_NULL;
905 }
906 }
907
SetMuted(bool isMute)908 int32_t CallManagerService::SetMuted(bool isMute)
909 {
910 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
911 TELEPHONY_LOGE("Non-system applications use system APIs!");
912 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
913 }
914 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
915 TELEPHONY_LOGE("Permission denied!");
916 return TELEPHONY_ERR_PERMISSION_ERR;
917 }
918 if (callControlManagerPtr_ != nullptr) {
919 auto ret = callControlManagerPtr_->SetMuted(isMute);
920 if (ret == TELEPHONY_SUCCESS) {
921 DelayedSingleton<DistributedCommunicationManager>::GetInstance()->SetMuted(isMute);
922 DelayedSingleton<InteroperableCommunicationManager>::GetInstance()->SetMuted(isMute);
923 }
924 return ret;
925 } else {
926 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
927 return TELEPHONY_ERR_LOCAL_PTR_NULL;
928 }
929 }
930
MuteRinger()931 int32_t CallManagerService::MuteRinger()
932 {
933 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
934 TELEPHONY_LOGE("Non-system applications use system APIs!");
935 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
936 }
937 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
938 TELEPHONY_LOGE("Permission denied!");
939 return TELEPHONY_ERR_PERMISSION_ERR;
940 }
941 if (callControlManagerPtr_ != nullptr) {
942 auto ret = callControlManagerPtr_->MuteRinger();
943 if (ret == TELEPHONY_SUCCESS) {
944 DelayedSingleton<DistributedCommunicationManager>::GetInstance()->MuteRinger();
945 DelayedSingleton<InteroperableCommunicationManager>::GetInstance()->MuteRinger();
946 #ifdef SUPPORT_MUTE_BY_DATABASE
947 InteroperableSettingsHandler::SendMuteRinger();
948 #endif
949 }
950 return ret;
951 } else {
952 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
953 return TELEPHONY_ERR_LOCAL_PTR_NULL;
954 }
955 }
956
SetAudioDevice(const AudioDevice & audioDevice)957 int32_t CallManagerService::SetAudioDevice(const AudioDevice &audioDevice)
958 {
959 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
960 TELEPHONY_LOGE("Non-system applications use system APIs!");
961 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
962 }
963 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
964 TELEPHONY_LOGE("Permission denied!");
965 return TELEPHONY_ERR_PERMISSION_ERR;
966 }
967 if (callControlManagerPtr_ != nullptr) {
968 if (callControlManagerPtr_->SetAudioDevice(audioDevice) == TELEPHONY_SUCCESS) {
969 return TELEPHONY_SUCCESS;
970 }
971 TELEPHONY_LOGE("SetAudioDevice failed!");
972 return CALL_ERR_SETTING_AUDIO_DEVICE_FAILED;
973 } else {
974 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
975 return TELEPHONY_ERR_LOCAL_PTR_NULL;
976 }
977 }
978
ControlCamera(int32_t callId,std::u16string & cameraId)979 int32_t CallManagerService::ControlCamera(int32_t callId, std::u16string &cameraId)
980 {
981 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
982 TELEPHONY_LOGE("Non-system applications use system APIs!");
983 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
984 }
985 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
986 TELEPHONY_LOGE("Permission denied!");
987 return TELEPHONY_ERR_PERMISSION_ERR;
988 }
989 auto videoControlManager = DelayedSingleton<VideoControlManager>::GetInstance();
990 if (videoControlManager != nullptr) {
991 return videoControlManager->ControlCamera(
992 callId, cameraId, IPCSkeleton::GetCallingUid(), IPCSkeleton::GetCallingPid());
993 } else {
994 TELEPHONY_LOGE("videoControlManager is nullptr!");
995 return TELEPHONY_ERR_LOCAL_PTR_NULL;
996 }
997 }
998
SetPreviewWindow(int32_t callId,std::string & surfaceId,sptr<Surface> surface)999 int32_t CallManagerService::SetPreviewWindow(int32_t callId, std::string &surfaceId, sptr<Surface> surface)
1000 {
1001 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1002 TELEPHONY_LOGE("Non-system applications use system APIs!");
1003 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1004 }
1005 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
1006 TELEPHONY_LOGE("Permission denied!");
1007 return TELEPHONY_ERR_PERMISSION_ERR;
1008 }
1009 auto videoControlManager = DelayedSingleton<VideoControlManager>::GetInstance();
1010 if (videoControlManager == nullptr) {
1011 TELEPHONY_LOGE("videoControlManager is nullptr!");
1012 return TELEPHONY_ERR_LOCAL_PTR_NULL;
1013 }
1014 uint32_t callerToken = IPCSkeleton::GetCallingTokenID();
1015 int32_t ret = 0;
1016 if (surface == nullptr) {
1017 ret = PrivacyKit::StopUsingPermission(callerToken, "ohos.permission.CAMERA");
1018 if (ret != 0) {
1019 TELEPHONY_LOGE("StopUsingPermission faild!");
1020 }
1021 } else {
1022 sptr<CallBase> call = CallObjectManager::GetOneCallObjectByIndex(callId);
1023 if (call == nullptr || call->GetVideoStateType() != VideoStateType::TYPE_RECEIVE_ONLY) {
1024 ret = PrivacyKit::AddPermissionUsedRecord(callerToken, "ohos.permission.CAMERA", 1, 0);
1025 if (ret != 0) {
1026 TELEPHONY_LOGE("AddPermissionUsedRecord faild!");
1027 }
1028 ret = PrivacyKit::StartUsingPermission(callerToken, "ohos.permission.CAMERA");
1029 if (ret != 0) {
1030 TELEPHONY_LOGE("StartUsingPermission faild!");
1031 }
1032 }
1033 }
1034 return videoControlManager->SetPreviewWindow(callId, surfaceId, surface);
1035 }
1036
SetDisplayWindow(int32_t callId,std::string & surfaceId,sptr<Surface> surface)1037 int32_t CallManagerService::SetDisplayWindow(int32_t callId, std::string &surfaceId, sptr<Surface> surface)
1038 {
1039 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1040 TELEPHONY_LOGE("Non-system applications use system APIs!");
1041 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1042 }
1043 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
1044 TELEPHONY_LOGE("Permission denied!");
1045 return TELEPHONY_ERR_PERMISSION_ERR;
1046 }
1047 auto videoControlManager = DelayedSingleton<VideoControlManager>::GetInstance();
1048 if (videoControlManager != nullptr) {
1049 return videoControlManager->SetDisplayWindow(callId, surfaceId, surface);
1050 } else {
1051 TELEPHONY_LOGE("videoControlManager is nullptr!");
1052 return TELEPHONY_ERR_LOCAL_PTR_NULL;
1053 }
1054 }
1055
SetCameraZoom(float zoomRatio)1056 int32_t CallManagerService::SetCameraZoom(float zoomRatio)
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_SET_TELEPHONY_STATE)) {
1063 TELEPHONY_LOGE("Permission denied!");
1064 return TELEPHONY_ERR_PERMISSION_ERR;
1065 }
1066 if (callControlManagerPtr_ != nullptr) {
1067 return callControlManagerPtr_->SetCameraZoom(zoomRatio);
1068 } else {
1069 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1070 return TELEPHONY_ERR_LOCAL_PTR_NULL;
1071 }
1072 }
1073
SetPausePicture(int32_t callId,std::u16string & path)1074 int32_t CallManagerService::SetPausePicture(int32_t callId, std::u16string &path)
1075 {
1076 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1077 TELEPHONY_LOGE("Non-system applications use system APIs!");
1078 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1079 }
1080 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
1081 TELEPHONY_LOGE("Permission denied!");
1082 return TELEPHONY_ERR_PERMISSION_ERR;
1083 }
1084 auto videoControlManager = DelayedSingleton<VideoControlManager>::GetInstance();
1085 if (videoControlManager != nullptr) {
1086 return videoControlManager->SetPausePicture(callId, path);
1087 } else {
1088 TELEPHONY_LOGE("videoControlManager is nullptr!");
1089 return TELEPHONY_ERR_LOCAL_PTR_NULL;
1090 }
1091 }
1092
SetDeviceDirection(int32_t callId,int32_t rotation)1093 int32_t CallManagerService::SetDeviceDirection(int32_t callId, int32_t rotation)
1094 {
1095 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1096 TELEPHONY_LOGE("Non-system applications use system APIs!");
1097 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1098 }
1099 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
1100 TELEPHONY_LOGE("Permission denied!");
1101 return TELEPHONY_ERR_PERMISSION_ERR;
1102 }
1103 auto videoControlManager = DelayedSingleton<VideoControlManager>::GetInstance();
1104 if (videoControlManager != nullptr) {
1105 return videoControlManager->SetDeviceDirection(callId, rotation);
1106 } else {
1107 TELEPHONY_LOGE("videoControlManager is nullptr!");
1108 return TELEPHONY_ERR_LOCAL_PTR_NULL;
1109 }
1110 }
1111
IsEmergencyPhoneNumber(std::u16string & number,int32_t slotId,bool & enabled)1112 int32_t CallManagerService::IsEmergencyPhoneNumber(std::u16string &number, int32_t slotId, bool &enabled)
1113 {
1114 if (callControlManagerPtr_ != nullptr) {
1115 return callControlManagerPtr_->IsEmergencyPhoneNumber(number, slotId, enabled);
1116 } else {
1117 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1118 return TELEPHONY_ERR_LOCAL_PTR_NULL;
1119 }
1120 }
1121
FormatPhoneNumber(std::u16string & number,std::u16string & countryCode,std::u16string & formatNumber)1122 int32_t CallManagerService::FormatPhoneNumber(
1123 std::u16string &number, std::u16string &countryCode, std::u16string &formatNumber)
1124 {
1125 if (callControlManagerPtr_ != nullptr) {
1126 return callControlManagerPtr_->FormatPhoneNumber(number, countryCode, formatNumber);
1127 } else {
1128 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1129 return TELEPHONY_ERR_LOCAL_PTR_NULL;
1130 }
1131 }
1132
FormatPhoneNumberToE164(std::u16string & number,std::u16string & countryCode,std::u16string & formatNumber)1133 int32_t CallManagerService::FormatPhoneNumberToE164(
1134 std::u16string &number, std::u16string &countryCode, std::u16string &formatNumber)
1135 {
1136 if (callControlManagerPtr_ != nullptr) {
1137 return callControlManagerPtr_->FormatPhoneNumberToE164(number, countryCode, formatNumber);
1138 } else {
1139 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1140 return TELEPHONY_ERR_LOCAL_PTR_NULL;
1141 }
1142 }
1143
GetMainCallId(int32_t callId,int32_t & mainCallId)1144 int32_t CallManagerService::GetMainCallId(int32_t callId, int32_t &mainCallId)
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_->GetMainCallId(callId, mainCallId);
1156 } else {
1157 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1158 return TELEPHONY_ERR_LOCAL_PTR_NULL;
1159 }
1160 }
1161
GetSubCallIdList(int32_t callId,std::vector<std::u16string> & callIdList)1162 int32_t CallManagerService::GetSubCallIdList(int32_t callId, std::vector<std::u16string> &callIdList)
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_GET_TELEPHONY_STATE)) {
1169 TELEPHONY_LOGE("Permission denied!");
1170 return TELEPHONY_ERR_PERMISSION_ERR;
1171 }
1172 if (callControlManagerPtr_ != nullptr) {
1173 return callControlManagerPtr_->GetSubCallIdList(callId, callIdList);
1174 }
1175 callIdList.clear();
1176 return TELEPHONY_ERR_LOCAL_PTR_NULL;
1177 }
1178
GetCallIdListForConference(int32_t callId,std::vector<std::u16string> & callIdList)1179 int32_t CallManagerService::GetCallIdListForConference(int32_t callId, std::vector<std::u16string> &callIdList)
1180 {
1181 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1182 TELEPHONY_LOGE("Non-system applications use system APIs!");
1183 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1184 }
1185 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_GET_TELEPHONY_STATE)) {
1186 TELEPHONY_LOGE("Permission denied!");
1187 return TELEPHONY_ERR_PERMISSION_ERR;
1188 }
1189 if (callControlManagerPtr_ != nullptr) {
1190 return callControlManagerPtr_->GetCallIdListForConference(callId, callIdList);
1191 }
1192 callIdList.clear();
1193 return TELEPHONY_ERR_LOCAL_PTR_NULL;
1194 }
1195
GetImsConfig(int32_t slotId,ImsConfigItem item)1196 int32_t CallManagerService::GetImsConfig(int32_t slotId, ImsConfigItem item)
1197 {
1198 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1199 TELEPHONY_LOGE("Non-system applications use system APIs!");
1200 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1201 }
1202 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_GET_TELEPHONY_STATE)) {
1203 TELEPHONY_LOGE("Permission denied!");
1204 return TELEPHONY_ERR_PERMISSION_ERR;
1205 }
1206 if (callControlManagerPtr_ != nullptr) {
1207 return callControlManagerPtr_->GetImsConfig(slotId, item);
1208 } else {
1209 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1210 return TELEPHONY_ERR_LOCAL_PTR_NULL;
1211 }
1212 }
1213
SetImsConfig(int32_t slotId,ImsConfigItem item,std::u16string & value)1214 int32_t CallManagerService::SetImsConfig(int32_t slotId, ImsConfigItem item, std::u16string &value)
1215 {
1216 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1217 TELEPHONY_LOGE("Non-system applications use system APIs!");
1218 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1219 }
1220 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
1221 TELEPHONY_LOGE("Permission denied!");
1222 return TELEPHONY_ERR_PERMISSION_ERR;
1223 }
1224 if (callControlManagerPtr_ != nullptr) {
1225 return callControlManagerPtr_->SetImsConfig(slotId, item, value);
1226 } else {
1227 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1228 return TELEPHONY_ERR_LOCAL_PTR_NULL;
1229 }
1230 }
1231
GetImsFeatureValue(int32_t slotId,FeatureType type)1232 int32_t CallManagerService::GetImsFeatureValue(int32_t slotId, FeatureType type)
1233 {
1234 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1235 TELEPHONY_LOGE("Non-system applications use system APIs!");
1236 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1237 }
1238 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_GET_TELEPHONY_STATE)) {
1239 TELEPHONY_LOGE("Permission denied!");
1240 return TELEPHONY_ERR_PERMISSION_ERR;
1241 }
1242 if (callControlManagerPtr_ != nullptr) {
1243 return callControlManagerPtr_->GetImsFeatureValue(slotId, type);
1244 } else {
1245 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1246 return TELEPHONY_ERR_LOCAL_PTR_NULL;
1247 }
1248 }
1249
SetImsFeatureValue(int32_t slotId,FeatureType type,int32_t value)1250 int32_t CallManagerService::SetImsFeatureValue(int32_t slotId, FeatureType type, int32_t value)
1251 {
1252 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1253 TELEPHONY_LOGE("Non-system applications use system APIs!");
1254 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1255 }
1256 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
1257 TELEPHONY_LOGE("Permission denied!");
1258 return TELEPHONY_ERR_PERMISSION_ERR;
1259 }
1260 if (callControlManagerPtr_ != nullptr) {
1261 return callControlManagerPtr_->SetImsFeatureValue(slotId, type, value);
1262 } else {
1263 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1264 return TELEPHONY_ERR_LOCAL_PTR_NULL;
1265 }
1266 }
1267
UpdateImsCallMode(int32_t callId,ImsCallMode mode)1268 int32_t CallManagerService::UpdateImsCallMode(int32_t callId, ImsCallMode mode)
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 TELEPHONY_LOGE("Permission denied!");
1276 return TELEPHONY_ERR_PERMISSION_ERR;
1277 }
1278 auto videoControlManager = DelayedSingleton<VideoControlManager>::GetInstance();
1279 if (videoControlManager != nullptr) {
1280 return videoControlManager->UpdateImsCallMode(callId, mode);
1281 } else {
1282 TELEPHONY_LOGE("videoControlManager is nullptr!");
1283 return TELEPHONY_ERR_LOCAL_PTR_NULL;
1284 }
1285 }
1286
EnableImsSwitch(int32_t slotId)1287 int32_t CallManagerService::EnableImsSwitch(int32_t slotId)
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 TELEPHONY_LOGE("Permission denied!");
1295 return TELEPHONY_ERR_PERMISSION_ERR;
1296 }
1297 if (callControlManagerPtr_ != nullptr) {
1298 return callControlManagerPtr_->EnableImsSwitch(slotId);
1299 } else {
1300 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1301 return TELEPHONY_ERR_LOCAL_PTR_NULL;
1302 }
1303 }
1304
DisableImsSwitch(int32_t slotId)1305 int32_t CallManagerService::DisableImsSwitch(int32_t slotId)
1306 {
1307 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1308 TELEPHONY_LOGE("Non-system applications use system APIs!");
1309 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1310 }
1311 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
1312 TELEPHONY_LOGE("Permission denied!");
1313 return TELEPHONY_ERR_PERMISSION_ERR;
1314 }
1315 if (callControlManagerPtr_ != nullptr) {
1316 return callControlManagerPtr_->DisableImsSwitch(slotId);
1317 } else {
1318 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1319 return TELEPHONY_ERR_LOCAL_PTR_NULL;
1320 }
1321 }
1322
IsImsSwitchEnabled(int32_t slotId,bool & enabled)1323 int32_t CallManagerService::IsImsSwitchEnabled(int32_t slotId, bool &enabled)
1324 {
1325 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1326 TELEPHONY_LOGE("Non-system applications use system APIs!");
1327 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1328 }
1329 if (callControlManagerPtr_ != nullptr) {
1330 return callControlManagerPtr_->IsImsSwitchEnabled(slotId, enabled);
1331 } else {
1332 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1333 return TELEPHONY_ERR_LOCAL_PTR_NULL;
1334 }
1335 }
1336
SetVoNRState(int32_t slotId,int32_t state)1337 int32_t CallManagerService::SetVoNRState(int32_t slotId, int32_t state)
1338 {
1339 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1340 TELEPHONY_LOGE("Non-system applications use system APIs!");
1341 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1342 }
1343 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
1344 TELEPHONY_LOGE("Permission denied!");
1345 return TELEPHONY_ERR_PERMISSION_ERR;
1346 }
1347 if (callControlManagerPtr_ != nullptr) {
1348 return callControlManagerPtr_->SetVoNRState(slotId, state);
1349 } else {
1350 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1351 return TELEPHONY_ERR_LOCAL_PTR_NULL;
1352 }
1353 }
1354
GetVoNRState(int32_t slotId,int32_t & state)1355 int32_t CallManagerService::GetVoNRState(int32_t slotId, int32_t &state)
1356 {
1357 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1358 TELEPHONY_LOGE("Non-system applications use system APIs!");
1359 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1360 }
1361 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_GET_TELEPHONY_STATE)) {
1362 TELEPHONY_LOGE("Permission denied!");
1363 return TELEPHONY_ERR_PERMISSION_ERR;
1364 }
1365 if (callControlManagerPtr_ != nullptr) {
1366 return callControlManagerPtr_->GetVoNRState(slotId, state);
1367 } else {
1368 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1369 return TELEPHONY_ERR_LOCAL_PTR_NULL;
1370 }
1371 }
1372
JoinConference(int32_t callId,std::vector<std::u16string> & numberList)1373 int32_t CallManagerService::JoinConference(int32_t callId, std::vector<std::u16string> &numberList)
1374 {
1375 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1376 TELEPHONY_LOGE("Non-system applications use system APIs!");
1377 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1378 }
1379 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_PLACE_CALL)) {
1380 TELEPHONY_LOGE("Permission denied!");
1381 return TELEPHONY_ERR_PERMISSION_ERR;
1382 }
1383 if (callControlManagerPtr_ != nullptr) {
1384 return callControlManagerPtr_->JoinConference(callId, numberList);
1385 }
1386 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1387 return TELEPHONY_ERR_LOCAL_PTR_NULL;
1388 }
1389
ReportOttCallDetailsInfo(std::vector<OttCallDetailsInfo> & ottVec)1390 int32_t CallManagerService::ReportOttCallDetailsInfo(std::vector<OttCallDetailsInfo> &ottVec)
1391 {
1392 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1393 TELEPHONY_LOGE("Non-system applications use system APIs!");
1394 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1395 }
1396 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_GET_TELEPHONY_STATE)) {
1397 TELEPHONY_LOGE("Permission denied!");
1398 return TELEPHONY_ERR_PERMISSION_ERR;
1399 }
1400 if (ottVec.empty()) {
1401 TELEPHONY_LOGE("ottVec is empty!");
1402 return TELEPHONY_ERR_ARGUMENT_INVALID;
1403 }
1404 CallDetailsInfo detailsInfo;
1405 CallDetailInfo detailInfo;
1406 detailsInfo.slotId = ERR_ID;
1407 (void)memcpy_s(detailsInfo.bundleName, kMaxBundleNameLen, ottVec[0].bundleName, kMaxBundleNameLen);
1408 detailInfo.callType = CallType::TYPE_OTT;
1409 detailInfo.accountId = ERR_ID;
1410 detailInfo.index = ERR_ID;
1411 detailInfo.voiceDomain = ERR_ID;
1412 std::vector<OttCallDetailsInfo>::iterator it = ottVec.begin();
1413 for (; it != ottVec.end(); ++it) {
1414 detailInfo.callMode = (*it).videoState;
1415 detailInfo.state = (*it).callState;
1416 (void)memcpy_s(detailInfo.phoneNum, kMaxNumberLen, (*it).phoneNum, kMaxNumberLen);
1417 (void)memcpy_s(detailInfo.bundleName, kMaxBundleNameLen, (*it).bundleName, kMaxBundleNameLen);
1418 detailsInfo.callVec.push_back(detailInfo);
1419 }
1420 int32_t ret = DelayedSingleton<ReportCallInfoHandler>::GetInstance()->UpdateCallsReportInfo(detailsInfo);
1421 if (ret != TELEPHONY_SUCCESS) {
1422 TELEPHONY_LOGE("UpdateCallsReportInfo failed! errCode:%{public}d", ret);
1423 } else {
1424 TELEPHONY_LOGI("UpdateCallsReportInfo success!");
1425 }
1426 return ret;
1427 }
1428
ReportOttCallEventInfo(OttCallEventInfo & eventInfo)1429 int32_t CallManagerService::ReportOttCallEventInfo(OttCallEventInfo &eventInfo)
1430 {
1431 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1432 TELEPHONY_LOGE("Non-system applications use system APIs!");
1433 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1434 }
1435 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_GET_TELEPHONY_STATE)) {
1436 TELEPHONY_LOGE("Permission denied!");
1437 return TELEPHONY_ERR_PERMISSION_ERR;
1438 }
1439 int32_t ret = DelayedSingleton<ReportCallInfoHandler>::GetInstance()->UpdateOttEventInfo(eventInfo);
1440 if (ret != TELEPHONY_SUCCESS) {
1441 TELEPHONY_LOGE("UpdateOttEventInfo failed! errCode:%{public}d", ret);
1442 } else {
1443 TELEPHONY_LOGI("UpdateOttEventInfo success!");
1444 }
1445 return ret;
1446 }
1447
CloseUnFinishedUssd(int32_t slotId)1448 int32_t CallManagerService::CloseUnFinishedUssd(int32_t slotId)
1449 {
1450 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1451 TELEPHONY_LOGE("Non system applications use system APIs!");
1452 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1453 }
1454 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
1455 TELEPHONY_LOGE("Permission denied!");
1456 return TELEPHONY_ERR_PERMISSION_ERR;
1457 }
1458 if (callControlManagerPtr_ != nullptr) {
1459 return callControlManagerPtr_->CloseUnFinishedUssd(slotId);
1460 } else {
1461 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1462 return TELEPHONY_ERR_LOCAL_PTR_NULL;
1463 }
1464 }
1465
InputDialerSpecialCode(const std::string & specialCode)1466 int32_t CallManagerService::InputDialerSpecialCode(const std::string &specialCode)
1467 {
1468 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1469 TELEPHONY_LOGE("Non system applications use system APIs!");
1470 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1471 }
1472 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_PLACE_CALL)) {
1473 TELEPHONY_LOGE("Permission denied!");
1474 return TELEPHONY_ERR_PERMISSION_ERR;
1475 }
1476
1477 auto it = find(supportSpecialCode_.begin(), supportSpecialCode_.end(), specialCode);
1478 if (it == supportSpecialCode_.end()) {
1479 TELEPHONY_LOGE("specialCode is not support");
1480 return TELEPHONY_ERR_ARGUMENT_INVALID;
1481 }
1482 AAFwk::Want want;
1483 want.SetAction(EventFwk::CommonEventSupport::COMMON_EVENT_SPECIAL_CODE);
1484 EventFwk::CommonEventData commonEventData;
1485 commonEventData.SetWant(want);
1486 commonEventData.SetData(specialCode);
1487 EventFwk::CommonEventPublishInfo publishInfo;
1488 if (!EventFwk::CommonEventManager::PublishCommonEvent(commonEventData, publishInfo, nullptr)) {
1489 TELEPHONY_LOGE("PublishCommonEvent fail");
1490 return TELEPHONY_ERR_PUBLISH_BROADCAST_FAIL;
1491 }
1492 return TELEPHONY_SUCCESS;
1493 }
1494
RemoveMissedIncomingCallNotification()1495 int32_t CallManagerService::RemoveMissedIncomingCallNotification()
1496 {
1497 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1498 TELEPHONY_LOGE("Non-system applications use system APIs!");
1499 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1500 }
1501 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE) ||
1502 !TelephonyPermission::CheckPermission(OHOS_PERMISSION_READ_CALL_LOG) ||
1503 !TelephonyPermission::CheckPermission(OHOS_PERMISSION_WRITE_CALL_LOG)) {
1504 TELEPHONY_LOGE("Permission denied!");
1505 return TELEPHONY_ERR_PERMISSION_ERR;
1506 }
1507 if (callControlManagerPtr_ == nullptr) {
1508 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1509 return TELEPHONY_ERR_LOCAL_PTR_NULL;
1510 }
1511 return callControlManagerPtr_->RemoveMissedIncomingCallNotification();
1512 }
1513
SetVoIPCallState(int32_t state)1514 int32_t CallManagerService::SetVoIPCallState(int32_t state)
1515 {
1516 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1517 TELEPHONY_LOGE("Non-system applications use system APIs!");
1518 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1519 }
1520 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE) &&
1521 !TelephonyPermission::CheckPermission(OHOS_PERMISSION_GET_TELEPHONY_STATE)) {
1522 TELEPHONY_LOGE("Permission denied!");
1523 return TELEPHONY_ERR_PERMISSION_ERR;
1524 }
1525 if (callControlManagerPtr_ != nullptr) {
1526 return callControlManagerPtr_->SetVoIPCallState(state);
1527 } else {
1528 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1529 return TELEPHONY_ERR_LOCAL_PTR_NULL;
1530 }
1531 }
1532
GetVoIPCallState(int32_t & state)1533 int32_t CallManagerService::GetVoIPCallState(int32_t &state)
1534 {
1535 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1536 TELEPHONY_LOGE("Non-system applications use system APIs!");
1537 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1538 }
1539 if (callControlManagerPtr_ != nullptr) {
1540 return callControlManagerPtr_->GetVoIPCallState(state);
1541 } else {
1542 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1543 return TELEPHONY_ERR_LOCAL_PTR_NULL;
1544 }
1545 }
1546
SetVoIPCallInfo(int32_t callId,int32_t state,std::string phoneNumber)1547 int32_t CallManagerService::SetVoIPCallInfo(int32_t callId, int32_t state, std::string phoneNumber)
1548 {
1549 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1550 TELEPHONY_LOGE("Non-system applications use system APIs!");
1551 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1552 }
1553 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE) &&
1554 !TelephonyPermission::CheckPermission(OHOS_PERMISSION_GET_TELEPHONY_STATE)) {
1555 TELEPHONY_LOGE("Permission denied!");
1556 return TELEPHONY_ERR_PERMISSION_ERR;
1557 }
1558 if (callControlManagerPtr_ == nullptr) {
1559 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1560 return TELEPHONY_ERR_LOCAL_PTR_NULL;
1561 }
1562 return callControlManagerPtr_->SetVoIPCallInfo(callId, state, phoneNumber);
1563 }
1564
GetVoIPCallInfo(int32_t & callId,int32_t & state,std::string & phoneNumber)1565 int32_t CallManagerService::GetVoIPCallInfo(int32_t &callId, int32_t &state, std::string &phoneNumber)
1566 {
1567 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1568 TELEPHONY_LOGE("Non-system applications use system APIs!");
1569 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1570 }
1571 if (callControlManagerPtr_ != nullptr) {
1572 return callControlManagerPtr_->GetVoIPCallInfo(callId, state, phoneNumber);
1573 } else {
1574 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1575 return TELEPHONY_ERR_LOCAL_PTR_NULL;
1576 }
1577 }
1578
GetProxyObjectPtr(CallManagerProxyType proxyType)1579 sptr<IRemoteObject> CallManagerService::GetProxyObjectPtr(CallManagerProxyType proxyType)
1580 {
1581 std::lock_guard<std::mutex> guard(lock_);
1582 auto it = proxyObjectPtrMap_.find(static_cast<uint32_t>(proxyType));
1583 if (it != proxyObjectPtrMap_.end()) {
1584 TELEPHONY_LOGI("GetProxyObjectPtr success! proxyType:%{public}d", proxyType);
1585 return it->second;
1586 } else {
1587 switch (proxyType) {
1588 case PROXY_BLUETOOTH_CALL: {
1589 sptr<BluetoothCallService> ptr = new (std::nothrow) BluetoothCallService();
1590 if (ptr == nullptr) {
1591 TELEPHONY_LOGE("create BluetoothCallService object failed!");
1592 return nullptr;
1593 }
1594 proxyObjectPtrMap_[proxyType] = ptr->AsObject().GetRefPtr();
1595 TELEPHONY_LOGI("create BluetoothCallService object success! proxyType:%{public}d", proxyType);
1596 return ptr->AsObject().GetRefPtr();
1597 }
1598 default:
1599 TELEPHONY_LOGE("invalid proxyType!");
1600 break;
1601 }
1602 }
1603 TELEPHONY_LOGE("GetProxyObjectPtr failed! proxyType:%{public}d", proxyType);
1604 return nullptr;
1605 }
1606
GetBundleInfo()1607 std::string CallManagerService::GetBundleInfo()
1608 {
1609 int32_t uid = IPCSkeleton::GetCallingUid();
1610 std::string bundleName = "";
1611 TelephonyPermission::GetBundleNameByUid(uid, bundleName);
1612 if (bundleName.empty()) {
1613 bundleName.append(std::to_string(uid));
1614 bundleName.append(std::to_string(IPCSkeleton::GetCallingPid()));
1615 }
1616 std::string bundleInfo = "";
1617 bundleInfo.append(bundleName);
1618 bundleInfo.append(":");
1619 bundleInfo.append(std::to_string(IPCSkeleton::GetCallingPid()));
1620 return bundleInfo;
1621 }
1622
ReportAudioDeviceInfo()1623 int32_t CallManagerService::ReportAudioDeviceInfo()
1624 {
1625 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
1626 TELEPHONY_LOGE("Permission denied!");
1627 return TELEPHONY_ERR_PERMISSION_ERR;
1628 }
1629 AudioDevice device = {
1630 .deviceType = AudioDeviceType::DEVICE_UNKNOWN,
1631 .address = { 0 },
1632 };
1633 return DelayedSingleton<AudioDeviceManager>::GetInstance()->ReportAudioDeviceChange(device);
1634 }
1635
CancelCallUpgrade(int32_t callId)1636 int32_t CallManagerService::CancelCallUpgrade(int32_t callId)
1637 {
1638 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1639 TELEPHONY_LOGE("Non-system applications use system APIs!");
1640 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1641 }
1642 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_PLACE_CALL)) {
1643 TELEPHONY_LOGE("Permission denied!");
1644 return TELEPHONY_ERR_PERMISSION_ERR;
1645 }
1646 auto videoControlManager = DelayedSingleton<VideoControlManager>::GetInstance();
1647 if (videoControlManager != nullptr) {
1648 return DelayedSingleton<VideoControlManager>::GetInstance()->CancelCallUpgrade(callId);
1649 } else {
1650 TELEPHONY_LOGE("videoControlManager is nullptr!");
1651 return TELEPHONY_ERR_LOCAL_PTR_NULL;
1652 }
1653 }
1654
RequestCameraCapabilities(int32_t callId)1655 int32_t CallManagerService::RequestCameraCapabilities(int32_t callId)
1656 {
1657 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1658 TELEPHONY_LOGE("Non-system applications use system APIs!");
1659 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1660 }
1661 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_GET_TELEPHONY_STATE)) {
1662 TELEPHONY_LOGE("Permission denied!");
1663 return TELEPHONY_ERR_PERMISSION_ERR;
1664 }
1665 auto videoControlManager = DelayedSingleton<VideoControlManager>::GetInstance();
1666 if (videoControlManager != nullptr) {
1667 return DelayedSingleton<VideoControlManager>::GetInstance()->RequestCameraCapabilities(callId);
1668 } else {
1669 TELEPHONY_LOGE("videoControlManager is nullptr!");
1670 return TELEPHONY_ERR_LOCAL_PTR_NULL;
1671 }
1672 }
1673
dealCeliaCallEvent(int32_t callId)1674 int32_t CallManagerService::dealCeliaCallEvent(int32_t callId)
1675 {
1676 sptr<CallBase> callPtr = CallObjectManager::GetOneCallObject(callId);
1677 if (callPtr == nullptr) {
1678 TELEPHONY_LOGI("the call object is nullptr!");
1679 return TELEPHONY_ERR_LOCAL_PTR_NULL;
1680 }
1681 if (callStatusManagerPtr_ != nullptr) {
1682 callStatusManagerPtr_->HandleCeliaCall(callPtr);
1683 }
1684 callPtr->SetCeliaCallType(IS_CELIA_CALL);
1685 TELEPHONY_LOGI("set selia call type!");
1686 if (DelayedSingleton<DistributedCallManager>::GetInstance()->IsDCallDeviceSwitchedOn()) {
1687 TELEPHONY_LOGI("switch device to local.");
1688 DelayedSingleton<DistributedCallManager>::GetInstance()->SwitchOffDCallDeviceSync();
1689 DelayedSingleton<DistributedCallManager>::GetInstance()->ReportDistributedDeviceInfoForSwitchOff();
1690 }
1691 return TELEPHONY_SUCCESS;
1692 }
1693
SendCallUiEvent(int32_t callId,std::string & eventName)1694 int32_t CallManagerService::SendCallUiEvent(int32_t callId, std::string &eventName)
1695 {
1696 TELEPHONY_LOGI("SendCallUiEvent eventName=%{public}s", eventName.c_str());
1697 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
1698 TELEPHONY_LOGE("Permission denied!");
1699 return TELEPHONY_ERR_PERMISSION_ERR;
1700 }
1701 if (eventName == "EVENT_IS_CELIA_CALL") {
1702 return dealCeliaCallEvent(callId);
1703 } else if (eventName == "EVENT_SPEAKER_OFF") {
1704 if (!DelayedSingleton<AudioProxy>::GetInstance()->SetSpeakerDevActive(false)) {
1705 return TELEPHONY_ERR_FAIL;
1706 }
1707 } else if (eventName == "DISPLAY_SPECIFIED_CALL_PAGE_BY_CALL_ID") {
1708 return HandleDisplaySpecifiedCallPage(callId);
1709 } else if (eventName == "EVENT_BLUETOOTH_SCO_STATE_OFF") {
1710 return DelayedSingleton<BluetoothCallConnection>::GetInstance()->DisConnectBtSco();
1711 } else if (eventName == "EVENT_BLUETOOTH_SCO_STATE_ON") {
1712 return DelayedSingleton<BluetoothCallConnection>::GetInstance()->ConnectBtSco();
1713 } else if (eventName == "EVENT_SUPPORT_BLUETOOTH_CALL") {
1714 if (DelayedSingleton<BluetoothCallConnection>::GetInstance()->GetSupportBtCall()) {
1715 return TELEPHONY_SUCCESS;
1716 }
1717 return TELEPHONY_ERR_FAIL;
1718 } else if (eventName == "EVENT_NOT_SUPPORT_BLUETOOTH_CALL") {
1719 if (!DelayedSingleton<BluetoothCallConnection>::GetInstance()->GetSupportBtCall()) {
1720 return TELEPHONY_SUCCESS;
1721 }
1722 return TELEPHONY_ERR_FAIL;
1723 } else if (eventName == "EVENT_CELIA_AUTO_ANSWER_CALL_ON" || eventName == "EVENT_CELIA_AUTO_ANSWER_CALL_OFF") {
1724 return HandleCeliaAutoAnswerCall(callId, eventName == "EVENT_CELIA_AUTO_ANSWER_CALL_ON");
1725 } else if (eventName == "EVENT_VOIP_CALL_SUCCESS" || eventName == "EVENT_VOIP_CALL_FAILED") {
1726 HandleVoIPCallEvent(callId, eventName);
1727 } else if (eventName == "EVENT_INVALID_VIDEO_FD") {
1728 if (callControlManagerPtr_ != nullptr) {
1729 callControlManagerPtr_->HandleVideoRingPlayFail();
1730 } else {
1731 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1732 return TELEPHONY_ERR_LOCAL_PTR_NULL;
1733 }
1734 }
1735 return TELEPHONY_SUCCESS;
1736 }
1737
HandleVoIPCallEvent(int32_t callId,std::string & eventName)1738 int32_t CallManagerService::HandleVoIPCallEvent(int32_t callId, std::string &eventName)
1739 {
1740 AppExecFwk::PacMap mPacMap;
1741 sptr<CallBase> call = CallObjectManager::GetOneCallObject(callId);
1742 if (call == nullptr) {
1743 return TELEPHONY_ERR_LOCAL_PTR_NULL;
1744 }
1745 if (call->GetCallType() == CallType::TYPE_VOIP) {
1746 CallAttributeInfo info;
1747 call->GetCallAttributeInfo(info);
1748 mPacMap.PutStringValue("callId", info.voipCallInfo.voipCallId);
1749 }
1750 mPacMap.PutStringValue("eventName", eventName);
1751 mPacMap.PutLongValue("publishTime", std::chrono::duration_cast<std::chrono::milliseconds>(
1752 std::chrono::system_clock::now().time_since_epoch()).count());
1753 return DelayedSingleton<VoipCallConnection>::GetInstance()->SendCallUiEventForWindow(mPacMap);
1754 }
1755
HandleDisplaySpecifiedCallPage(int32_t callId)1756 int32_t CallManagerService::HandleDisplaySpecifiedCallPage(int32_t callId)
1757 {
1758 sptr<CallBase> callPtr = CallObjectManager::GetOneCallObject(callId);
1759 if (callPtr == nullptr) {
1760 TELEPHONY_LOGI("the call object is nullptr!");
1761 return TELEPHONY_ERR_LOCAL_PTR_NULL;
1762 }
1763 CallAttributeInfo info;
1764 callPtr->GetCallAttributeInfo(info);
1765 AAFwk::WantParams object = AAFwk::WantParamWrapper::ParseWantParamsWithBrackets(info.extraParamsString);
1766 object.SetParam("sosWithOutCallUiAbility", AAFwk::String::Box(SOS_PULL_CALL_PAGE));
1767 info.extraParamsString = AAFwk::WantParamWrapper(object).ToString();
1768 object.Remove("sosWithOutCallUiAbility");
1769 callPtr->SetExtraParams(object);
1770 DelayedSingleton<CallAbilityReportProxy>::GetInstance()->ReportCallStateInfo(info);
1771 return TELEPHONY_SUCCESS;
1772 }
1773
HandleCeliaAutoAnswerCall(int32_t callId,bool enable)1774 int32_t CallManagerService::HandleCeliaAutoAnswerCall(int32_t callId, bool enable)
1775 {
1776 sptr<CallBase> callPtr = CallObjectManager::GetOneCallObject(callId);
1777 if (callPtr == nullptr) {
1778 TELEPHONY_LOGI("the call object is nullptr!");
1779 return TELEPHONY_ERR_LOCAL_PTR_NULL;
1780 }
1781 callPtr->SetAiAutoAnswer(enable);
1782 return TELEPHONY_SUCCESS;
1783 }
1784
RegisterBluetoothCallManagerCallbackPtr(std::string & macAddress)1785 sptr<ICallStatusCallback> CallManagerService::RegisterBluetoothCallManagerCallbackPtr(std::string &macAddress)
1786 {
1787 if (!TelephonyPermission::CheckPermission(Permission::GET_TELEPHONY_STATE)) {
1788 TELEPHONY_LOGE("CallManagerService RegisterBluetoothCallManagerCallbackPtr, Permission denied!");
1789 return nullptr;
1790 }
1791 std::lock_guard<std::mutex> guard(bluetoothCallCallbackLock_);
1792 if (bluetoothCallCallbackPtr_ == nullptr) {
1793 bluetoothCallCallbackPtr_ = new (std::nothrow) CallStatusCallback();
1794 if (bluetoothCallCallbackPtr_ == nullptr) {
1795 TELEPHONY_LOGE("create CallStatusCallback object failed!");
1796 return nullptr;
1797 }
1798 }
1799 if (macAddress.empty()) {
1800 TELEPHONY_LOGE("macAddress is empty!");
1801 }
1802 Bluetooth::HandsFreeUnit *profile = Bluetooth::HandsFreeUnit::GetProfile();
1803 if (profile != nullptr) {
1804 if (bluetoothCallObserver_ == nullptr) {
1805 bluetoothCallObserver_ = std::make_shared<BluetoothCallState>();
1806 }
1807 profile->RegisterObserver(bluetoothCallObserver_);
1808 } else {
1809 TELEPHONY_LOGE("profile is nullptr");
1810 }
1811 DelayedSingleton<BluetoothCallConnection>::GetInstance()->SetMacAddress(macAddress);
1812 return bluetoothCallCallbackPtr_;
1813 }
1814
SendUssdResponse(int32_t slotId,const std::string & content)1815 int32_t CallManagerService::SendUssdResponse(int32_t slotId, const std::string &content)
1816 {
1817 if (!TelephonyPermission::CheckCallerIsSystemApp()) {
1818 TELEPHONY_LOGE("Non-system applications use system APIs!");
1819 return TELEPHONY_ERR_ILLEGAL_USE_OF_SYSTEM_API;
1820 }
1821 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
1822 TELEPHONY_LOGE("Permission denied!");
1823 return TELEPHONY_ERR_PERMISSION_ERR;
1824 }
1825 DelayedSingleton<CellularCallConnection>::GetInstance()->SendUssdResponse(slotId, content);
1826 return TELEPHONY_SUCCESS;
1827 }
1828
SetCallPolicyInfo(bool isDialingTrustlist,const std::vector<std::string> & dialingList,bool isIncomingTrustlist,const std::vector<std::string> & incomingList)1829 int32_t CallManagerService::SetCallPolicyInfo(bool isDialingTrustlist, const std::vector<std::string> &dialingList,
1830 bool isIncomingTrustlist, const std::vector<std::string> &incomingList)
1831 {
1832 TELEPHONY_LOGI("SetCallPolicyInfo isDialingTrustlist:%{public}d, dialingList size:%{public}zu, "
1833 "isIncomingTrustlist:%{public}d, incomingList size:%{public}zu", isDialingTrustlist, dialingList.size(),
1834 isIncomingTrustlist, incomingList.size());
1835 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
1836 TELEPHONY_LOGE("Permission denied!");
1837 return TELEPHONY_ERR_PERMISSION_ERR;
1838 }
1839 if (callControlManagerPtr_ == nullptr) {
1840 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
1841 return TELEPHONY_ERR_LOCAL_PTR_NULL;
1842 }
1843 int32_t uid = IPCSkeleton::GetCallingUid();
1844 if (uid == EDM_UID) {
1845 return callControlManagerPtr_->SetEdmPolicy(isDialingTrustlist, dialingList,
1846 isIncomingTrustlist, incomingList);
1847 } else {
1848 return TELEPHONY_ERR_PERMISSION_ERR;
1849 }
1850 }
1851 } // namespace Telephony
1852 } // namespace OHOS
1853