1 /*
2 * Copyright (C) 2021-2022 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 "bluetooth_call_service.h"
19 #include "call_ability_report_proxy.h"
20 #include "call_manager_dump_helper.h"
21 #include "call_manager_errors.h"
22 #include "call_manager_hisysevent.h"
23 #include "call_records_manager.h"
24 #include "cellular_call_connection.h"
25 #include "common_type.h"
26 #include "hitrace_meter.h"
27 #include "ipc_skeleton.h"
28 #include "report_call_info_handler.h"
29 #include "telephony_log_wrapper.h"
30 #include "telephony_permission.h"
31
32 namespace OHOS {
33 namespace Telephony {
34 static constexpr const char *OHOS_PERMISSION_SET_TELEPHONY_STATE = "ohos.permission.SET_TELEPHONY_STATE";
35 static constexpr const char *OHOS_PERMISSION_GET_TELEPHONY_STATE = "ohos.permission.GET_TELEPHONY_STATE";
36 static constexpr const char *OHOS_PERMISSION_PLACE_CALL = "ohos.permission.PLACE_CALL";
37 static constexpr const char *OHOS_PERMISSION_ANSWER_CALL = "ohos.permission.ANSWER_CALL";
38 static constexpr const char *SLOT_ID = "accountId";
39 static constexpr const char *CALL_TYPE = "callType";
40 static constexpr const char *VIDEO_STATE = "videoState";
41
42 const bool g_registerResult =
43 SystemAbility::MakeAndRegisterAbility(DelayedSingleton<CallManagerService>::GetInstance().get());
44
CallManagerService()45 CallManagerService::CallManagerService()
46 : SystemAbility(TELEPHONY_CALL_MANAGER_SYS_ABILITY_ID, true), callControlManagerPtr_(nullptr)
47 {}
48
~CallManagerService()49 CallManagerService::~CallManagerService()
50 {
51 UnInit();
52 }
53
Init()54 bool CallManagerService::Init()
55 {
56 if (!DelayedSingleton<CallControlManager>::GetInstance()->Init()) {
57 TELEPHONY_LOGE("CallControlManager init failed!");
58 return false;
59 }
60 callControlManagerPtr_ = DelayedSingleton<CallControlManager>::GetInstance();
61 if (callControlManagerPtr_ == nullptr) {
62 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
63 return false;
64 }
65 DelayedSingleton<ReportCallInfoHandlerService>::GetInstance()->Start();
66 DelayedSingleton<CellularCallConnection>::GetInstance()->Init(TELEPHONY_CELLULAR_CALL_SYS_ABILITY_ID);
67 DelayedSingleton<CallRecordsManager>::GetInstance()->Init();
68 DelayedSingleton<BluetoothConnection>::GetInstance()->Init();
69 return true;
70 }
71
UnInit()72 void CallManagerService::UnInit()
73 {
74 callControlManagerPtr_ = nullptr;
75 }
76
OnStart()77 void CallManagerService::OnStart()
78 {
79 using namespace std::chrono;
80 time_point<high_resolution_clock> beginTime = high_resolution_clock::now();
81 std::lock_guard<std::mutex> guard(lock_);
82 if (state_ == ServiceRunningState::STATE_RUNNING) {
83 return;
84 }
85
86 if (!Init()) {
87 TELEPHONY_LOGE("Leave, init failed!");
88 return;
89 }
90
91 bool ret = SystemAbility::Publish(DelayedSingleton<CallManagerService>::GetInstance().get());
92 if (!ret) {
93 TELEPHONY_LOGE("Leave, publishing CallManagerService failed!");
94 return;
95 }
96 TELEPHONY_LOGI("Publish CallManagerService SUCCESS");
97
98 state_ = ServiceRunningState::STATE_RUNNING;
99 struct tm *timeNow = nullptr;
100 struct tm nowTime = { 0 };
101 time_t second = time(0);
102 if (second < 0) {
103 return;
104 }
105 timeNow = localtime_r(&second, &nowTime);
106 if (timeNow != nullptr) {
107 spendTime_ = duration_cast<std::chrono::milliseconds>(high_resolution_clock::now() - beginTime).count();
108 TELEPHONY_LOGI(
109 "CallManagerService start time:%{public}d-%{public}d-%{public}d %{public}d:%{public}d:%{public}d",
110 timeNow->tm_year + startTime_, timeNow->tm_mon + extraMonth_, timeNow->tm_mday, timeNow->tm_hour,
111 timeNow->tm_min, timeNow->tm_sec);
112 TELEPHONY_LOGI("CallManagerService start service cost time:%{public}d(milliseconds)", spendTime_);
113 }
114 }
115
OnStop()116 void CallManagerService::OnStop()
117 {
118 std::lock_guard<std::mutex> guard(lock_);
119 struct tm *timeNow = nullptr;
120 struct tm nowTime = { 0 };
121 time_t second = time(0);
122 if (second < 0) {
123 return;
124 }
125 timeNow = localtime_r(&second, &nowTime);
126 if (timeNow != nullptr) {
127 TELEPHONY_LOGI(
128 "CallManagerService dump time:%{public}d-%{public}d-%{public}d %{public}d:%{public}d:%{public}d",
129 timeNow->tm_year + startTime_, timeNow->tm_mon + extraMonth_, timeNow->tm_mday, timeNow->tm_hour,
130 timeNow->tm_min, timeNow->tm_sec);
131 }
132 DelayedSingleton<CellularCallConnection>::GetInstance()->UnInit();
133 state_ = ServiceRunningState::STATE_STOPPED;
134 }
135
GetServiceRunningState()136 int32_t CallManagerService::GetServiceRunningState()
137 {
138 return static_cast<int32_t>(state_);
139 }
140
Dump(std::int32_t fd,const std::vector<std::u16string> & args)141 int32_t CallManagerService::Dump(std::int32_t fd, const std::vector<std::u16string> &args)
142 {
143 if (fd < 0) {
144 TELEPHONY_LOGE("dump fd invalid");
145 return TELEPHONY_ERR_ARGUMENT_INVALID;
146 }
147 std::vector<std::string> argsInStr;
148 for (const auto &arg : args) {
149 TELEPHONY_LOGI("Dump args: %s", Str16ToStr8(arg).c_str());
150 argsInStr.emplace_back(Str16ToStr8(arg));
151 }
152 std::string result;
153 CallManagerDumpHelper dumpHelper;
154 if (dumpHelper.Dump(argsInStr, result)) {
155 TELEPHONY_LOGI("%s", result.c_str());
156 std::int32_t ret = dprintf(fd, "%s", result.c_str());
157 if (ret < 0) {
158 TELEPHONY_LOGE("dprintf to dump fd failed");
159 return CALL_ERR_SERVICE_DUMP_FAILED;
160 }
161 return TELEPHONY_SUCCESS;
162 }
163 TELEPHONY_LOGW("dumpHelper failed");
164 return CALL_ERR_SERVICE_DUMP_FAILED;
165 }
166
GetBindTime()167 std::string CallManagerService::GetBindTime()
168 {
169 bindTime_ =
170 std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch())
171 .count();
172 std::ostringstream oss;
173 oss << bindTime_;
174 return oss.str();
175 }
176
GetStartServiceSpent()177 std::string CallManagerService::GetStartServiceSpent()
178 {
179 std::ostringstream oss;
180 oss << spendTime_;
181 return oss.str();
182 }
183
RegisterCallBack(const sptr<ICallAbilityCallback> & callback)184 int32_t CallManagerService::RegisterCallBack(const sptr<ICallAbilityCallback> &callback)
185 {
186 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
187 TELEPHONY_LOGE("Permission denied!");
188 return TELEPHONY_ERR_PERMISSION_ERR;
189 }
190 return DelayedSingleton<CallAbilityReportProxy>::GetInstance()->RegisterCallBack(callback, GetBundleName());
191 }
192
UnRegisterCallBack()193 int32_t CallManagerService::UnRegisterCallBack()
194 {
195 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
196 TELEPHONY_LOGE("Permission denied!");
197 return TELEPHONY_ERR_PERMISSION_ERR;
198 }
199 return DelayedSingleton<CallAbilityReportProxy>::GetInstance()->UnRegisterCallBack(GetBundleName());
200 }
201
DialCall(std::u16string number,AppExecFwk::PacMap & extras)202 int32_t CallManagerService::DialCall(std::u16string number, AppExecFwk::PacMap &extras)
203 {
204 DelayedSingleton<CallManagerHisysevent>::GetInstance()->SetDialStartTime();
205 StartAsyncTrace(HITRACE_TAG_OHOS, "DialCall", getpid());
206 int32_t uid = IPCSkeleton::GetCallingUid();
207 std::string bundleName = "";
208 TelephonyPermission::GetBundleNameByUid(uid, bundleName);
209 extras.PutStringValue("bundleName", bundleName);
210 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_PLACE_CALL)) {
211 TELEPHONY_LOGE("Permission denied!");
212 CallManagerHisysevent::WriteDialCallFaultEvent(extras.GetIntValue(SLOT_ID), extras.GetIntValue(CALL_TYPE),
213 extras.GetIntValue(VIDEO_STATE), TELEPHONY_ERR_PERMISSION_ERR, OHOS_PERMISSION_PLACE_CALL);
214 FinishAsyncTrace(HITRACE_TAG_OHOS, "DialCall", getpid());
215 return TELEPHONY_ERR_PERMISSION_ERR;
216 }
217 if (callControlManagerPtr_ != nullptr) {
218 int32_t ret = callControlManagerPtr_->DialCall(number, extras);
219 if (ret != TELEPHONY_SUCCESS) {
220 std::string errordesc = "";
221 DelayedSingleton<CallManagerHisysevent>::GetInstance()->GetErrorDescription(ret, errordesc);
222 CallManagerHisysevent::WriteDialCallFaultEvent(extras.GetIntValue(SLOT_ID),
223 extras.GetIntValue(CALL_TYPE), extras.GetIntValue(VIDEO_STATE), ret, errordesc);
224 FinishAsyncTrace(HITRACE_TAG_OHOS, "DialCall", getpid());
225 }
226 return ret;
227 } else {
228 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
229 FinishAsyncTrace(HITRACE_TAG_OHOS, "DialCall", getpid());
230 return TELEPHONY_ERR_LOCAL_PTR_NULL;
231 }
232 }
233
AnswerCall(int32_t callId,int32_t videoState)234 int32_t CallManagerService::AnswerCall(int32_t callId, int32_t videoState)
235 {
236 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_ANSWER_CALL)) {
237 TELEPHONY_LOGE("Permission denied!");
238 return TELEPHONY_ERR_PERMISSION_ERR;
239 }
240 DelayedSingleton<CallManagerHisysevent>::GetInstance()->SetAnswerStartTime();
241 if (callControlManagerPtr_ != nullptr) {
242 return callControlManagerPtr_->AnswerCall(callId, videoState);
243 } else {
244 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
245 return TELEPHONY_ERR_LOCAL_PTR_NULL;
246 }
247 }
248
RejectCall(int32_t callId,bool rejectWithMessage,std::u16string textMessage)249 int32_t CallManagerService::RejectCall(int32_t callId, bool rejectWithMessage, std::u16string textMessage)
250 {
251 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_ANSWER_CALL)) {
252 TELEPHONY_LOGE("Permission denied!");
253 return TELEPHONY_ERR_PERMISSION_ERR;
254 }
255 if (callControlManagerPtr_ != nullptr) {
256 return callControlManagerPtr_->RejectCall(callId, rejectWithMessage, textMessage);
257 } else {
258 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
259 return TELEPHONY_ERR_LOCAL_PTR_NULL;
260 }
261 }
262
HangUpCall(int32_t callId)263 int32_t CallManagerService::HangUpCall(int32_t callId)
264 {
265 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_ANSWER_CALL)) {
266 TELEPHONY_LOGE("Permission denied!");
267 return TELEPHONY_ERR_PERMISSION_ERR;
268 }
269 if (callControlManagerPtr_ != nullptr) {
270 return callControlManagerPtr_->HangUpCall(callId);
271 } else {
272 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
273 return TELEPHONY_ERR_LOCAL_PTR_NULL;
274 }
275 }
276
GetCallState()277 int32_t CallManagerService::GetCallState()
278 {
279 if (callControlManagerPtr_ != nullptr) {
280 return callControlManagerPtr_->GetCallState();
281 } else {
282 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
283 return TELEPHONY_ERR_LOCAL_PTR_NULL;
284 }
285 }
286
HoldCall(int32_t callId)287 int32_t CallManagerService::HoldCall(int32_t callId)
288 {
289 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_ANSWER_CALL)) {
290 TELEPHONY_LOGE("Permission denied!");
291 return TELEPHONY_ERR_PERMISSION_ERR;
292 }
293 if (callControlManagerPtr_ != nullptr) {
294 return callControlManagerPtr_->HoldCall(callId);
295 } else {
296 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
297 return TELEPHONY_ERR_LOCAL_PTR_NULL;
298 }
299 }
300
UnHoldCall(int32_t callId)301 int32_t CallManagerService::UnHoldCall(int32_t callId)
302 {
303 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_ANSWER_CALL)) {
304 TELEPHONY_LOGE("Permission denied!");
305 return TELEPHONY_ERR_PERMISSION_ERR;
306 }
307 if (callControlManagerPtr_ != nullptr) {
308 return callControlManagerPtr_->UnHoldCall(callId);
309 } else {
310 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
311 return TELEPHONY_ERR_LOCAL_PTR_NULL;
312 }
313 }
314
SwitchCall(int32_t callId)315 int32_t CallManagerService::SwitchCall(int32_t callId)
316 {
317 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_ANSWER_CALL)) {
318 TELEPHONY_LOGE("Permission denied!");
319 return TELEPHONY_ERR_PERMISSION_ERR;
320 }
321 if (callControlManagerPtr_ != nullptr) {
322 return callControlManagerPtr_->SwitchCall(callId);
323 } else {
324 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
325 return TELEPHONY_ERR_LOCAL_PTR_NULL;
326 }
327 }
328
HasCall()329 bool CallManagerService::HasCall()
330 {
331 if (callControlManagerPtr_ != nullptr) {
332 return callControlManagerPtr_->HasCall();
333 } else {
334 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
335 return false;
336 }
337 }
338
IsNewCallAllowed(bool & enabled)339 int32_t CallManagerService::IsNewCallAllowed(bool &enabled)
340 {
341 if (callControlManagerPtr_ != nullptr) {
342 return callControlManagerPtr_->IsNewCallAllowed(enabled);
343 } else {
344 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
345 return TELEPHONY_ERR_LOCAL_PTR_NULL;
346 }
347 }
348
IsRinging(bool & enabled)349 int32_t CallManagerService::IsRinging(bool &enabled)
350 {
351 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
352 TELEPHONY_LOGE("Permission denied!");
353 return TELEPHONY_ERR_PERMISSION_ERR;
354 }
355 if (callControlManagerPtr_ != nullptr) {
356 return callControlManagerPtr_->IsRinging(enabled);
357 } else {
358 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
359 return TELEPHONY_ERR_LOCAL_PTR_NULL;
360 }
361 }
362
IsInEmergencyCall(bool & enabled)363 int32_t CallManagerService::IsInEmergencyCall(bool &enabled)
364 {
365 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
366 TELEPHONY_LOGE("Permission denied!");
367 return TELEPHONY_ERR_PERMISSION_ERR;
368 }
369 if (callControlManagerPtr_ != nullptr) {
370 return callControlManagerPtr_->HasEmergency(enabled);
371 } else {
372 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
373 return TELEPHONY_ERR_LOCAL_PTR_NULL;
374 }
375 }
376
StartDtmf(int32_t callId,char str)377 int32_t CallManagerService::StartDtmf(int32_t callId, char str)
378 {
379 if (callControlManagerPtr_ != nullptr) {
380 return callControlManagerPtr_->StartDtmf(callId, str);
381 } else {
382 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
383 return TELEPHONY_ERR_LOCAL_PTR_NULL;
384 }
385 }
386
StopDtmf(int32_t callId)387 int32_t CallManagerService::StopDtmf(int32_t callId)
388 {
389 if (callControlManagerPtr_ != nullptr) {
390 return callControlManagerPtr_->StopDtmf(callId);
391 } else {
392 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
393 return TELEPHONY_ERR_LOCAL_PTR_NULL;
394 }
395 }
396
GetCallWaiting(int32_t slotId)397 int32_t CallManagerService::GetCallWaiting(int32_t slotId)
398 {
399 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_GET_TELEPHONY_STATE)) {
400 TELEPHONY_LOGE("Permission denied!");
401 return TELEPHONY_ERR_PERMISSION_ERR;
402 }
403 if (callControlManagerPtr_ != nullptr) {
404 return callControlManagerPtr_->GetCallWaiting(slotId);
405 } else {
406 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
407 return TELEPHONY_ERR_LOCAL_PTR_NULL;
408 }
409 }
410
SetCallWaiting(int32_t slotId,bool activate)411 int32_t CallManagerService::SetCallWaiting(int32_t slotId, bool activate)
412 {
413 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
414 TELEPHONY_LOGE("Permission denied!");
415 return TELEPHONY_ERR_PERMISSION_ERR;
416 }
417 if (callControlManagerPtr_ != nullptr) {
418 return callControlManagerPtr_->SetCallWaiting(slotId, activate);
419 } else {
420 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
421 return TELEPHONY_ERR_LOCAL_PTR_NULL;
422 }
423 }
424
GetCallRestriction(int32_t slotId,CallRestrictionType type)425 int32_t CallManagerService::GetCallRestriction(int32_t slotId, CallRestrictionType type)
426 {
427 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_GET_TELEPHONY_STATE)) {
428 TELEPHONY_LOGE("Permission denied!");
429 return TELEPHONY_ERR_PERMISSION_ERR;
430 }
431 if (callControlManagerPtr_ != nullptr) {
432 return callControlManagerPtr_->GetCallRestriction(slotId, type);
433 } else {
434 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
435 return TELEPHONY_ERR_LOCAL_PTR_NULL;
436 }
437 }
438
SetCallRestriction(int32_t slotId,CallRestrictionInfo & info)439 int32_t CallManagerService::SetCallRestriction(int32_t slotId, CallRestrictionInfo &info)
440 {
441 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
442 TELEPHONY_LOGE("Permission denied!");
443 return TELEPHONY_ERR_PERMISSION_ERR;
444 }
445 if (callControlManagerPtr_ != nullptr) {
446 return callControlManagerPtr_->SetCallRestriction(slotId, info);
447 } else {
448 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
449 return TELEPHONY_ERR_LOCAL_PTR_NULL;
450 }
451 }
452
GetCallTransferInfo(int32_t slotId,CallTransferType type)453 int32_t CallManagerService::GetCallTransferInfo(int32_t slotId, CallTransferType type)
454 {
455 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_GET_TELEPHONY_STATE)) {
456 TELEPHONY_LOGE("Permission denied!");
457 return TELEPHONY_ERR_PERMISSION_ERR;
458 }
459 if (callControlManagerPtr_ != nullptr) {
460 return callControlManagerPtr_->GetCallTransferInfo(slotId, type);
461 } else {
462 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
463 return TELEPHONY_ERR_LOCAL_PTR_NULL;
464 }
465 }
466
SetCallTransferInfo(int32_t slotId,CallTransferInfo & info)467 int32_t CallManagerService::SetCallTransferInfo(int32_t slotId, CallTransferInfo &info)
468 {
469 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
470 TELEPHONY_LOGE("Permission denied!");
471 return TELEPHONY_ERR_PERMISSION_ERR;
472 }
473 if (callControlManagerPtr_ != nullptr) {
474 return callControlManagerPtr_->SetCallTransferInfo(slotId, info);
475 } else {
476 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
477 return TELEPHONY_ERR_LOCAL_PTR_NULL;
478 }
479 }
480
SetCallPreferenceMode(int32_t slotId,int32_t mode)481 int32_t CallManagerService::SetCallPreferenceMode(int32_t slotId, int32_t mode)
482 {
483 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
484 TELEPHONY_LOGE("Permission denied!");
485 return TELEPHONY_ERR_PERMISSION_ERR;
486 }
487 if (callControlManagerPtr_ != nullptr) {
488 return callControlManagerPtr_->SetCallPreferenceMode(slotId, mode);
489 } else {
490 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
491 return TELEPHONY_ERR_LOCAL_PTR_NULL;
492 }
493 }
494
StartRtt(int32_t callId,std::u16string & msg)495 int32_t CallManagerService::StartRtt(int32_t callId, std::u16string &msg)
496 {
497 if (callControlManagerPtr_ != nullptr) {
498 return callControlManagerPtr_->StartRtt(callId, msg);
499 } else {
500 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
501 return TELEPHONY_ERR_LOCAL_PTR_NULL;
502 }
503 }
504
StopRtt(int32_t callId)505 int32_t CallManagerService::StopRtt(int32_t callId)
506 {
507 if (callControlManagerPtr_ != nullptr) {
508 return callControlManagerPtr_->StopRtt(callId);
509 } else {
510 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
511 return TELEPHONY_ERR_LOCAL_PTR_NULL;
512 }
513 }
514
CombineConference(int32_t mainCallId)515 int32_t CallManagerService::CombineConference(int32_t mainCallId)
516 {
517 if (callControlManagerPtr_ != nullptr) {
518 return callControlManagerPtr_->CombineConference(mainCallId);
519 } else {
520 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
521 return TELEPHONY_ERR_LOCAL_PTR_NULL;
522 }
523 }
524
SeparateConference(int32_t callId)525 int32_t CallManagerService::SeparateConference(int32_t callId)
526 {
527 if (callControlManagerPtr_ != nullptr) {
528 return callControlManagerPtr_->SeparateConference(callId);
529 } else {
530 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
531 return TELEPHONY_ERR_LOCAL_PTR_NULL;
532 }
533 }
534
SetMuted(bool isMute)535 int32_t CallManagerService::SetMuted(bool isMute)
536 {
537 if (callControlManagerPtr_ != nullptr) {
538 return callControlManagerPtr_->SetMuted(isMute);
539 } else {
540 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
541 return TELEPHONY_ERR_LOCAL_PTR_NULL;
542 }
543 }
544
MuteRinger()545 int32_t CallManagerService::MuteRinger()
546 {
547 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
548 TELEPHONY_LOGE("Permission denied!");
549 return TELEPHONY_ERR_PERMISSION_ERR;
550 }
551 if (callControlManagerPtr_ != nullptr) {
552 return callControlManagerPtr_->MuteRinger();
553 } else {
554 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
555 return TELEPHONY_ERR_LOCAL_PTR_NULL;
556 }
557 }
558
SetAudioDevice(AudioDevice deviceType,const std::string & bluetoothAddress)559 int32_t CallManagerService::SetAudioDevice(AudioDevice deviceType, const std::string &bluetoothAddress)
560 {
561 if (callControlManagerPtr_ != nullptr) {
562 if (callControlManagerPtr_->SetAudioDevice(deviceType, bluetoothAddress) == TELEPHONY_SUCCESS) {
563 return TELEPHONY_SUCCESS;
564 }
565 TELEPHONY_LOGE("SetAudioDevice failed!");
566 return CALL_ERR_SETTING_AUDIO_DEVICE_FAILED;
567 } else {
568 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
569 return TELEPHONY_ERR_LOCAL_PTR_NULL;
570 }
571 }
572
ControlCamera(std::u16string cameraId)573 int32_t CallManagerService::ControlCamera(std::u16string cameraId)
574 {
575 if (callControlManagerPtr_ != nullptr) {
576 return callControlManagerPtr_->ControlCamera(
577 cameraId, IPCSkeleton::GetCallingUid(), IPCSkeleton::GetCallingPid());
578 } else {
579 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
580 return TELEPHONY_ERR_LOCAL_PTR_NULL;
581 }
582 }
583
SetPreviewWindow(VideoWindow & window)584 int32_t CallManagerService::SetPreviewWindow(VideoWindow &window)
585 {
586 if (callControlManagerPtr_ != nullptr) {
587 return callControlManagerPtr_->SetPreviewWindow(window);
588 } else {
589 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
590 return TELEPHONY_ERR_LOCAL_PTR_NULL;
591 }
592 }
593
SetDisplayWindow(VideoWindow & window)594 int32_t CallManagerService::SetDisplayWindow(VideoWindow &window)
595 {
596 if (callControlManagerPtr_ != nullptr) {
597 return callControlManagerPtr_->SetDisplayWindow(window);
598 } else {
599 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
600 return TELEPHONY_ERR_LOCAL_PTR_NULL;
601 }
602 }
603
SetCameraZoom(float zoomRatio)604 int32_t CallManagerService::SetCameraZoom(float zoomRatio)
605 {
606 if (callControlManagerPtr_ != nullptr) {
607 return callControlManagerPtr_->SetCameraZoom(zoomRatio);
608 } else {
609 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
610 return TELEPHONY_ERR_LOCAL_PTR_NULL;
611 }
612 }
613
SetPausePicture(std::u16string path)614 int32_t CallManagerService::SetPausePicture(std::u16string path)
615 {
616 if (callControlManagerPtr_ != nullptr) {
617 return callControlManagerPtr_->SetPausePicture(path);
618 } else {
619 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
620 return TELEPHONY_ERR_LOCAL_PTR_NULL;
621 }
622 }
623
SetDeviceDirection(int32_t rotation)624 int32_t CallManagerService::SetDeviceDirection(int32_t rotation)
625 {
626 if (callControlManagerPtr_ != nullptr) {
627 return callControlManagerPtr_->SetDeviceDirection(rotation);
628 } else {
629 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
630 return TELEPHONY_ERR_LOCAL_PTR_NULL;
631 }
632 }
633
IsEmergencyPhoneNumber(std::u16string & number,int32_t slotId,bool & enabled)634 int32_t CallManagerService::IsEmergencyPhoneNumber(std::u16string &number, int32_t slotId, bool &enabled)
635 {
636 if (callControlManagerPtr_ != nullptr) {
637 return callControlManagerPtr_->IsEmergencyPhoneNumber(number, slotId, enabled);
638 } else {
639 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
640 return TELEPHONY_ERR_LOCAL_PTR_NULL;
641 }
642 }
643
FormatPhoneNumber(std::u16string & number,std::u16string & countryCode,std::u16string & formatNumber)644 int32_t CallManagerService::FormatPhoneNumber(
645 std::u16string &number, std::u16string &countryCode, std::u16string &formatNumber)
646 {
647 if (callControlManagerPtr_ != nullptr) {
648 return callControlManagerPtr_->FormatPhoneNumber(number, countryCode, formatNumber);
649 } else {
650 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
651 return TELEPHONY_ERR_LOCAL_PTR_NULL;
652 }
653 }
654
FormatPhoneNumberToE164(std::u16string & number,std::u16string & countryCode,std::u16string & formatNumber)655 int32_t CallManagerService::FormatPhoneNumberToE164(
656 std::u16string &number, std::u16string &countryCode, std::u16string &formatNumber)
657 {
658 if (callControlManagerPtr_ != nullptr) {
659 return callControlManagerPtr_->FormatPhoneNumberToE164(number, countryCode, formatNumber);
660 } else {
661 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
662 return TELEPHONY_ERR_LOCAL_PTR_NULL;
663 }
664 }
665
GetMainCallId(int32_t callId,int32_t & mainCallId)666 int32_t CallManagerService::GetMainCallId(int32_t callId, int32_t &mainCallId)
667 {
668 if (callControlManagerPtr_ != nullptr) {
669 return callControlManagerPtr_->GetMainCallId(callId, mainCallId);
670 } else {
671 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
672 return TELEPHONY_ERR_LOCAL_PTR_NULL;
673 }
674 }
675
GetSubCallIdList(int32_t callId,std::vector<std::u16string> & callIdList)676 int32_t CallManagerService::GetSubCallIdList(int32_t callId, std::vector<std::u16string> &callIdList)
677 {
678 if (callControlManagerPtr_ != nullptr) {
679 return callControlManagerPtr_->GetSubCallIdList(callId, callIdList);
680 }
681 callIdList.clear();
682 return TELEPHONY_ERR_LOCAL_PTR_NULL;
683 }
684
GetCallIdListForConference(int32_t callId,std::vector<std::u16string> & callIdList)685 int32_t CallManagerService::GetCallIdListForConference(int32_t callId, std::vector<std::u16string> &callIdList)
686 {
687 if (callControlManagerPtr_ != nullptr) {
688 return callControlManagerPtr_->GetCallIdListForConference(callId, callIdList);
689 }
690 callIdList.clear();
691 return TELEPHONY_ERR_LOCAL_PTR_NULL;
692 }
693
GetImsConfig(int32_t slotId,ImsConfigItem item)694 int32_t CallManagerService::GetImsConfig(int32_t slotId, ImsConfigItem item)
695 {
696 if (callControlManagerPtr_ != nullptr) {
697 return callControlManagerPtr_->GetImsConfig(slotId, item);
698 } else {
699 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
700 return TELEPHONY_ERR_LOCAL_PTR_NULL;
701 }
702 }
703
SetImsConfig(int32_t slotId,ImsConfigItem item,std::u16string & value)704 int32_t CallManagerService::SetImsConfig(int32_t slotId, ImsConfigItem item, std::u16string &value)
705 {
706 if (callControlManagerPtr_ != nullptr) {
707 return callControlManagerPtr_->SetImsConfig(slotId, item, value);
708 } else {
709 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
710 return TELEPHONY_ERR_LOCAL_PTR_NULL;
711 }
712 }
713
GetImsFeatureValue(int32_t slotId,FeatureType type)714 int32_t CallManagerService::GetImsFeatureValue(int32_t slotId, FeatureType type)
715 {
716 if (callControlManagerPtr_ != nullptr) {
717 return callControlManagerPtr_->GetImsFeatureValue(slotId, type);
718 } else {
719 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
720 return TELEPHONY_ERR_LOCAL_PTR_NULL;
721 }
722 }
723
SetImsFeatureValue(int32_t slotId,FeatureType type,int32_t value)724 int32_t CallManagerService::SetImsFeatureValue(int32_t slotId, FeatureType type, int32_t value)
725 {
726 if (callControlManagerPtr_ != nullptr) {
727 return callControlManagerPtr_->SetImsFeatureValue(slotId, type, value);
728 } else {
729 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
730 return TELEPHONY_ERR_LOCAL_PTR_NULL;
731 }
732 }
733
UpdateImsCallMode(int32_t callId,ImsCallMode mode)734 int32_t CallManagerService::UpdateImsCallMode(int32_t callId, ImsCallMode mode)
735 {
736 if (callControlManagerPtr_ != nullptr) {
737 return callControlManagerPtr_->UpdateImsCallMode(callId, mode);
738 } else {
739 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
740 return TELEPHONY_ERR_LOCAL_PTR_NULL;
741 }
742 }
743
EnableImsSwitch(int32_t slotId)744 int32_t CallManagerService::EnableImsSwitch(int32_t slotId)
745 {
746 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
747 TELEPHONY_LOGE("Permission denied!");
748 return TELEPHONY_ERR_PERMISSION_ERR;
749 }
750 if (callControlManagerPtr_ != nullptr) {
751 return callControlManagerPtr_->EnableImsSwitch(slotId);
752 } else {
753 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
754 return TELEPHONY_ERR_LOCAL_PTR_NULL;
755 }
756 }
757
DisableImsSwitch(int32_t slotId)758 int32_t CallManagerService::DisableImsSwitch(int32_t slotId)
759 {
760 if (!TelephonyPermission::CheckPermission(OHOS_PERMISSION_SET_TELEPHONY_STATE)) {
761 TELEPHONY_LOGE("Permission denied!");
762 return TELEPHONY_ERR_PERMISSION_ERR;
763 }
764 if (callControlManagerPtr_ != nullptr) {
765 return callControlManagerPtr_->DisableImsSwitch(slotId);
766 } else {
767 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
768 return TELEPHONY_ERR_LOCAL_PTR_NULL;
769 }
770 }
771
IsImsSwitchEnabled(int32_t slotId,bool & enabled)772 int32_t CallManagerService::IsImsSwitchEnabled(int32_t slotId, bool &enabled)
773 {
774 if (callControlManagerPtr_ != nullptr) {
775 return callControlManagerPtr_->IsImsSwitchEnabled(slotId, enabled);
776 } else {
777 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
778 return TELEPHONY_ERR_LOCAL_PTR_NULL;
779 }
780 }
781
JoinConference(int32_t callId,std::vector<std::u16string> & numberList)782 int32_t CallManagerService::JoinConference(int32_t callId, std::vector<std::u16string> &numberList)
783 {
784 if (callControlManagerPtr_ != nullptr) {
785 return callControlManagerPtr_->JoinConference(callId, numberList);
786 }
787 TELEPHONY_LOGE("callControlManagerPtr_ is nullptr!");
788 return TELEPHONY_ERR_LOCAL_PTR_NULL;
789 }
790
ReportOttCallDetailsInfo(std::vector<OttCallDetailsInfo> & ottVec)791 int32_t CallManagerService::ReportOttCallDetailsInfo(std::vector<OttCallDetailsInfo> &ottVec)
792 {
793 if (ottVec.empty()) {
794 TELEPHONY_LOGE("ottVec is empty!");
795 return TELEPHONY_ERR_ARGUMENT_INVALID;
796 }
797 CallDetailsInfo detailsInfo;
798 CallDetailInfo detailInfo;
799 detailsInfo.slotId = ERR_ID;
800 (void)memcpy_s(detailsInfo.bundleName, kMaxBundleNameLen, ottVec[0].bundleName, kMaxBundleNameLen);
801 detailInfo.callType = CallType::TYPE_OTT;
802 detailInfo.accountId = ERR_ID;
803 detailInfo.index = ERR_ID;
804 detailInfo.voiceDomain = ERR_ID;
805 std::vector<OttCallDetailsInfo>::iterator it = ottVec.begin();
806 for (; it != ottVec.end(); ++it) {
807 detailInfo.callMode = (*it).videoState;
808 detailInfo.state = (*it).callState;
809 (void)memcpy_s(detailInfo.phoneNum, kMaxNumberLen, (*it).phoneNum, kMaxNumberLen);
810 (void)memcpy_s(detailInfo.bundleName, kMaxBundleNameLen, (*it).bundleName, kMaxBundleNameLen);
811 detailsInfo.callVec.push_back(detailInfo);
812 }
813 int32_t ret = DelayedSingleton<ReportCallInfoHandlerService>::GetInstance()->UpdateCallsReportInfo(detailsInfo);
814 if (ret != TELEPHONY_SUCCESS) {
815 TELEPHONY_LOGE("UpdateCallsReportInfo failed! errCode:%{public}d", ret);
816 } else {
817 TELEPHONY_LOGI("UpdateCallsReportInfo success!");
818 }
819 return ret;
820 }
821
ReportOttCallEventInfo(OttCallEventInfo & eventInfo)822 int32_t CallManagerService::ReportOttCallEventInfo(OttCallEventInfo &eventInfo)
823 {
824 int32_t ret = DelayedSingleton<ReportCallInfoHandlerService>::GetInstance()->UpdateOttEventInfo(eventInfo);
825 if (ret != TELEPHONY_SUCCESS) {
826 TELEPHONY_LOGE("UpdateOttEventInfo failed! errCode:%{public}d", ret);
827 } else {
828 TELEPHONY_LOGI("UpdateOttEventInfo success!");
829 }
830 return ret;
831 }
832
GetProxyObjectPtr(CallManagerProxyType proxyType)833 sptr<IRemoteObject> CallManagerService::GetProxyObjectPtr(CallManagerProxyType proxyType)
834 {
835 auto it = proxyObjectPtrMap_.find(static_cast<uint32_t>(proxyType));
836 if (it != proxyObjectPtrMap_.end()) {
837 TELEPHONY_LOGI("GetProxyObjectPtr success! proxyType:%{public}d", proxyType);
838 return it->second;
839 } else {
840 switch (proxyType) {
841 case PROXY_BLUETOOTH_CALL: {
842 sptr<BluetoothCallService> ptr = new (std::nothrow) BluetoothCallService();
843 if (ptr == nullptr) {
844 TELEPHONY_LOGE("create BluetoothCallService object failed!");
845 return nullptr;
846 }
847 proxyObjectPtrMap_[proxyType] = ptr->AsObject().GetRefPtr();
848 TELEPHONY_LOGI("create BluetoothCallService object success! proxyType:%{public}d", proxyType);
849 return ptr->AsObject().GetRefPtr();
850 }
851 default:
852 TELEPHONY_LOGE("invalid proxyType!");
853 break;
854 }
855 }
856 TELEPHONY_LOGE("GetProxyObjectPtr failed! proxyType:%{public}d", proxyType);
857 return nullptr;
858 }
859
GetBundleName()860 std::string CallManagerService::GetBundleName()
861 {
862 int32_t uid = IPCSkeleton::GetCallingUid();
863 std::string bundleName = "";
864 TelephonyPermission::GetBundleNameByUid(uid, bundleName);
865 if (bundleName.empty()) {
866 bundleName.append(std::to_string(uid));
867 bundleName.append(std::to_string(IPCSkeleton::GetCallingPid()));
868 }
869 return bundleName;
870 }
871 } // namespace Telephony
872 } // namespace OHOS
873