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 "ott_call_connection.h"
17 
18 #include "call_manager_errors.h"
19 #include "telephony_log_wrapper.h"
20 
21 #include "call_ability_report_proxy.h"
22 
23 namespace OHOS {
24 namespace Telephony {
Answer(const OttCallRequestInfo & requestInfo)25 int32_t OTTCallConnection::Answer(const OttCallRequestInfo &requestInfo)
26 {
27     AppExecFwk::PacMap info;
28     PackCellularCallInfo(requestInfo, info);
29     return DelayedSingleton<CallAbilityReportProxy>::GetInstance()->OttCallRequest(
30         OttCallRequestId::OTT_REQUEST_ANSWER, info);
31 }
32 
HangUp(const OttCallRequestInfo & requestInfo)33 int32_t OTTCallConnection::HangUp(const OttCallRequestInfo &requestInfo)
34 {
35     AppExecFwk::PacMap info;
36     PackCellularCallInfo(requestInfo, info);
37     return DelayedSingleton<CallAbilityReportProxy>::GetInstance()->OttCallRequest(
38         OttCallRequestId::OTT_REQUEST_HANG_UP, info);
39 }
40 
Reject(const OttCallRequestInfo & requestInfo)41 int32_t OTTCallConnection::Reject(const OttCallRequestInfo &requestInfo)
42 {
43     AppExecFwk::PacMap info;
44     PackCellularCallInfo(requestInfo, info);
45     return DelayedSingleton<CallAbilityReportProxy>::GetInstance()->OttCallRequest(
46         OttCallRequestId::OTT_REQUEST_REJECT, info);
47 }
48 
HoldCall(const OttCallRequestInfo & requestInfo)49 int32_t OTTCallConnection::HoldCall(const OttCallRequestInfo &requestInfo)
50 {
51     AppExecFwk::PacMap info;
52     PackCellularCallInfo(requestInfo, info);
53     return DelayedSingleton<CallAbilityReportProxy>::GetInstance()->OttCallRequest(
54         OttCallRequestId::OTT_REQUEST_HOLD, info);
55 }
56 
UnHoldCall(const OttCallRequestInfo & requestInfo)57 int32_t OTTCallConnection::UnHoldCall(const OttCallRequestInfo &requestInfo)
58 {
59     AppExecFwk::PacMap info;
60     PackCellularCallInfo(requestInfo, info);
61     return DelayedSingleton<CallAbilityReportProxy>::GetInstance()->OttCallRequest(
62         OttCallRequestId::OTT_REQUEST_UN_HOLD, info);
63 }
64 
SwitchCall(const OttCallRequestInfo & requestInfo)65 int32_t OTTCallConnection::SwitchCall(const OttCallRequestInfo &requestInfo)
66 {
67     AppExecFwk::PacMap info;
68     PackCellularCallInfo(requestInfo, info);
69     return DelayedSingleton<CallAbilityReportProxy>::GetInstance()->OttCallRequest(
70         OttCallRequestId::OTT_REQUEST_SWITCH, info);
71 }
72 
CombineConference(const OttCallRequestInfo & requestInfo)73 int32_t OTTCallConnection::CombineConference(const OttCallRequestInfo &requestInfo)
74 {
75     AppExecFwk::PacMap info;
76     PackCellularCallInfo(requestInfo, info);
77     return DelayedSingleton<CallAbilityReportProxy>::GetInstance()->OttCallRequest(
78         OttCallRequestId::OTT_REQUEST_COMBINE_CONFERENCE, info);
79 }
80 
SeparateConference(const OttCallRequestInfo & requestInfo)81 int32_t OTTCallConnection::SeparateConference(const OttCallRequestInfo &requestInfo)
82 {
83     AppExecFwk::PacMap info;
84     PackCellularCallInfo(requestInfo, info);
85     return DelayedSingleton<CallAbilityReportProxy>::GetInstance()->OttCallRequest(
86         OttCallRequestId::OTT_REQUEST_SEPARATE_CONFERENCE, info);
87 }
88 
KickOutFromConference(const OttCallRequestInfo & requestInfo)89 int32_t OTTCallConnection::KickOutFromConference(const OttCallRequestInfo &requestInfo)
90 {
91     AppExecFwk::PacMap info;
92     PackCellularCallInfo(requestInfo, info);
93     return DelayedSingleton<CallAbilityReportProxy>::GetInstance()->OttCallRequest(
94         OttCallRequestId::OTT_REQUEST_KICK_OUT_CONFERENCE, info);
95 }
96 
InviteToConference(const OttCallRequestInfo & requestInfo,const std::vector<std::string> & numberList)97 int32_t OTTCallConnection::InviteToConference(
98     const OttCallRequestInfo &requestInfo, const std::vector<std::string> &numberList)
99 {
100     if (numberList.empty()) {
101         TELEPHONY_LOGE("numberList is empty!");
102         return TELEPHONY_ERR_ARGUMENT_INVALID;
103     }
104     AppExecFwk::PacMap info;
105     std::vector<std::string> list = numberList;
106     PackCellularCallInfo(requestInfo, info);
107     info.PutIntValue("listCnt", list.size());
108     std::vector<std::string>::iterator it = list.begin();
109     for (; it != list.end(); ++it) {
110         if (!(*it).empty()) {
111             info.PutStringValue("number", *it);
112         }
113     }
114     return DelayedSingleton<CallAbilityReportProxy>::GetInstance()->OttCallRequest(
115         OttCallRequestId::OTT_REQUEST_INVITE_TO_CONFERENCE, info);
116 }
117 
UpdateImsCallMode(const OttCallRequestInfo & requestInfo,ImsCallMode mode)118 int32_t OTTCallConnection::UpdateImsCallMode(const OttCallRequestInfo &requestInfo, ImsCallMode mode)
119 {
120     AppExecFwk::PacMap info;
121     PackCellularCallInfo(requestInfo, info);
122     info.PutIntValue("callMediaMode", mode);
123     return DelayedSingleton<CallAbilityReportProxy>::GetInstance()->OttCallRequest(
124         OttCallRequestId::OTT_REQUEST_UPDATE_CALL_MEDIA_MODE, info);
125 }
126 
PackCellularCallInfo(const OttCallRequestInfo & requestInfo,AppExecFwk::PacMap & info)127 void OTTCallConnection::PackCellularCallInfo(const OttCallRequestInfo &requestInfo, AppExecFwk::PacMap &info)
128 {
129     std::string number(requestInfo.phoneNum);
130     std::string name(requestInfo.bundleName);
131     info.PutStringValue("phoneNum", number);
132     info.PutStringValue("bundleName", name);
133     info.PutIntValue("videoState", static_cast<int32_t>(requestInfo.videoState));
134 }
135 } // namespace Telephony
136 } // namespace OHOS