1 /*
2  * Copyright (C) 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 #ifndef VOIP_CALL_MANAGER_PROXY_H
17 #define VOIP_CALL_MANAGER_PROXY_H
18 
19 #include <cfloat>
20 #include <cstdio>
21 #include <string>
22 #include <vector>
23 
24 #include "i_voip_call_manager_service.h"
25 #include "iremote_broker.h"
26 #include "iremote_proxy.h"
27 #include "pac_map.h"
28 
29 namespace OHOS {
30 namespace Telephony {
31 class VoipCallManagerProxy : public IRemoteProxy<IVoipCallManagerService> {
32 public:
33     /**
34      * VoipCallManagerProxy
35      *
36      * @param impl
37      */
38     explicit VoipCallManagerProxy(const sptr<IRemoteObject> &impl);
39     virtual ~VoipCallManagerProxy() = default;
40 
41     /**
42      * @brief thrid-party applications report a incoming call.
43      *
44      * @param extras[in], extras date.
45      * @return Returns 0 on success, others on failure.
46      */
47     int32_t ReportIncomingCall(
48         AppExecFwk::PacMap &extras, std::vector<uint8_t> &userProfile, ErrorReason &reason) override;
49     /**
50      * @brief thrid-party applications report incoming call failed causes.
51      *
52      * @param extras[in], extras date.
53      * @return Returns 0 on success, others on failure.
54      */
55     int32_t ReportIncomingCallError(AppExecFwk::PacMap &extras) override;
56     /**
57      * @brief thrid-party applications report call state change.
58      *
59      * @param callId[in], The call id
60      * @param VoipCallState[in], The voip call state
61      * @param VoipCallType[in], The voip call type
62      * @return Returns 0 on success, others on failure.
63      */
64     int32_t ReportCallStateChange(std::string callId, const VoipCallState &state, const VoipCallType &type) override;
65     /**
66      * @brief thrid-party applications report a outgoing call.
67      *
68      * @param extras[in], extras date.
69      * @return Returns 0 on success, others on failure.
70      */
71     int32_t ReportOutgoingCall(
72         AppExecFwk::PacMap &extras, std::vector<uint8_t> &userProfile, ErrorReason &reason) override;
73 
74     /**
75      * RegisterCallBack
76      *
77      * @brief Register callback
78      * @param callback[in], callback function pointer
79      * @return Returns 0 on success, others on failure.
80      */
81     int32_t RegisterCallBack(const sptr<IVoipCallManagerCallback> &callback) override;
82     /**
83      * UnRegisterCallBack
84      *
85      * @brief unregister callback
86      * @return Returns 0 on success, others on failure.
87      */
88     int32_t UnRegisterCallBack() override;
89 
90     /**
91      * @brief pushSA report a incoming call.
92      *
93      * @param callId[in], The call id
94      * @param bundleName[in], The bundleName
95      * @param processMode[in], The processMode
96      * @param uid[in], The uid
97      * @return Returns 0 on success, others on failure.
98      */
99     int32_t ReportVoipIncomingCall(
100         std::string callId, std::string bundleName, std::string processMode, int32_t uid) override;
101     /**
102      * @brief pushSA report call extensionId.
103      *
104      * @param callId[in], The call id
105      * @param bundleName[in], The bundleName
106      * @param extensionId[in], The extensionId
107      * @param uid[in], The uid
108      * @return Returns 0 on success, others on failure.
109      */
110     int32_t ReportVoipCallExtensionId(
111         std::string callId, std::string bundleName, std::string extensionId, int32_t uid) override;
112 
113     /**
114      * @brief hang up a call
115      *
116      * @param events[in], The VoipCallEventInfo
117      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
118      */
119     int32_t HangUp(const VoipCallEventInfo &events) override;
120 
121     /**
122      * @brief reject a call
123      *
124      * @param events[in], The VoipCallEventInfo
125      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
126      */
127     int32_t Reject(const VoipCallEventInfo &events) override;
128 
129     /**
130      * @brief answer a call
131      *
132      * @param events[in], The VoipCallEventInfo
133      * @param videoState[in], The videoState
134      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
135      */
136     int32_t Answer(const VoipCallEventInfo &events, int32_t videoState) override;
137 
138     /**
139      * @brief Unload voip SA
140      *
141      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
142      */
143     int32_t UnloadVoipSa() override;
144 
145     /**
146      * @brief Register CallManager CallBack ptr
147      *
148      * @param callback callback ptr
149      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
150      */
151     int32_t RegisterCallManagerCallBack(const sptr<ICallStatusCallback> &callback) override;
152     /**
153      * @brief UnRegister CallManager CallBack ptr
154      *
155      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
156      */
157     int32_t UnRegisterCallManagerCallBack() override;
158 
159     /**
160      * @brief Send Call ui event
161      *
162      * @param voipCallId[in], The VoipCallId
163      * @param callAudioEvent[in], The call audio event
164      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
165      */
166     int32_t SendCallUiEvent(std::string voipCallId, const CallAudioEvent &callAudioEvent) override;
167 
168     /**
169      * @brief thrid-party applications report call audio event change
170      *
171      * @param voipCallId[in], The VoipCallId
172      * @param callAudioEvent[in], The call audio event
173      * @return Returns TELEPHONY_SUCCESS on success, others on failure.
174      */
175     int32_t ReportCallAudioEventChange(std::string voipCallId, const CallAudioEvent &callAudioEvent) override;
176 
177 private:
178     static inline BrokerDelegator<VoipCallManagerProxy> delegator_;
179 };
180 
181 } // namespace Telephony
182 } // namespace OHOS
183 
184 #endif
185