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