• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021-2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "call_manager_service.h"
17 
18 #include "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