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