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