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