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#ifndef CELLULAR_CALL_INTERFACE_H
17#define CELLULAR_CALL_INTERFACE_H
18#include "telephony_types.h"
19
20#include "i_call_status_callback.h"
21#include "surface.h"
22
23namespace OHOS {
24namespace Telephony {
25class CellularCallInterface : public IRemoteBroker {
26public:
27    /**
28     * @brief dial a call
29     *
30     * @param callInfo[in] the call detail info which contains phone number, call type, slot id .etc
31     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
32     */
33    virtual int32_t Dial(const CellularCallInfo &callInfo) = 0;
34
35    /**
36     * @brief hang up a call
37     *
38     * @param callInfo[in] the call detail info which contains phone number, call type, slot id .etc
39     * @param type[in] Indicates the +CHLD related supplementary services.
40     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
41     */
42    virtual int32_t HangUp(const CellularCallInfo &callInfo, CallSupplementType type) = 0;
43
44    /**
45     * @brief answer a call
46     *
47     * @param callInfo[in] the call detail info which contains phone number, call type, slot id .etc
48     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
49     */
50    virtual int32_t Answer(const CellularCallInfo &callInfo) = 0;
51
52    /**
53     * @brief reject a call
54     *
55     * @param callInfo[in] the call detail info which contains phone number, call type, slot id .etc
56     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
57     */
58    virtual int32_t Reject(const CellularCallInfo &callInfo) = 0;
59
60    /**
61     * @brief hold a call
62     *
63     * @param callInfo[in] the call detail info which contains phone number, call type, slot id .etc
64     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
65     */
66    virtual int32_t HoldCall(const CellularCallInfo &callInfo) = 0;
67
68    /**
69     * @brief unhold a call
70     *
71     * @param callInfo[in] the call detail info which contains phone number, call type, slot id .etc
72     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
73     */
74    virtual int32_t UnHoldCall(const CellularCallInfo &callInfo) = 0;
75
76    /**
77     * @brief switch the call
78     *
79     * @param callInfo[in] the call detail info which contains phone number, call type, slot id .etc
80     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
81     */
82    virtual int32_t SwitchCall(const CellularCallInfo &callInfo) = 0;
83
84    /**
85     * @brief Checks whether the called number is an emergency number
86     *
87     * @param slotId[in] the slot id
88     * @param phoneNum[in] the phone number
89     * @param enabled[out] if the phone number is ecc, true is yes, false is no
90     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
91     */
92    virtual int32_t IsEmergencyPhoneNumber(int32_t slotId, const std::string &phoneNum, bool &enabled) = 0;
93
94    /**
95     * @brief Merge into multiple calls
96     *
97     * @param callInfo[in] the call detail info which contains phone number, call type, slot id .etc
98     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
99     */
100    virtual int32_t CombineConference(const CellularCallInfo &callInfo) = 0;
101
102    /**
103     * @brief Separate the Conference call
104     *
105     * @param callInfo[in] the call detail info which contains phone number, call type, slot id .etc
106     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
107     */
108    virtual int32_t SeparateConference(const CellularCallInfo &callInfo) = 0;
109
110    /**
111     * @brief Invite someone to conference
112     *
113     * @param numberList[in] the number list to invite to conference
114     * @param slotId[in] the slot id
115     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
116     */
117    virtual int32_t InviteToConference(int32_t slotId, const std::vector<std::string> &numberList) = 0;
118
119    /**
120     * @brief Kick out someone from conference
121     *
122     * @param callInfo[in] the call detail info which contains phone number, call type, slot id .etc
123     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
124     */
125    virtual int32_t KickOutFromConference(const CellularCallInfo &callInfo) = 0;
126
127    /**
128     * @brief Hang Up All Connection
129     *
130     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
131     */
132    virtual int32_t HangUpAllConnection() = 0;
133
134    /**
135     * @brief Hang Up All Connection
136     *
137     * @param slotId[in] the slot id
138     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
139     */
140    virtual int32_t HangUpAllConnection(int32_t slotId) = 0;
141
142    /**
143     * @brief set whether the device can make calls
144     *
145     * @param slotId[in] the slot id
146     * @param callType[in] indicate the call type is cs or ims. 0 is cs, 1 is ims
147     * @param isReadyToCall[in] indicate whether the device can make calls
148     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
149     */
150    virtual int32_t SetReadyToCall(int32_t slotId, int32_t callType, bool isReadyToCall) = 0;
151
152    /**
153     * @brief IMS Send Call Media Mode Request
154     *
155     * @param callInfo[in] the call detail info which contains phone number, call type, slot id .etc
156     * @param mode[in] indicate the call mode just like audio only, receive only .etc
157     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
158     */
159    virtual int32_t SendUpdateCallMediaModeRequest(const CellularCallInfo &callInfo, ImsCallMode mode) = 0;
160
161    /**
162     * @brief IMS Send Call Media Mode Response
163     *
164     * @param callInfo[in] the call detail info which contains phone number, call type, slot id .etc
165     * @param mode[in] indicate the call mode just like audio only, receive only .etc
166     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
167     */
168    virtual int32_t SendUpdateCallMediaModeResponse(const CellularCallInfo &callInfo, ImsCallMode mode) = 0;
169
170    /**
171     * @brief start to paly a dtmf tone
172     *
173     * @param cDtmfCode[in] A character indicate the DTMF digit for which to play the tone. This
174     * value must be one of {0~9}, {*} or {#}.
175     * @param callInfo[in] the call detail info which contains phone number, call type, slot id .etc
176     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
177     */
178    virtual int32_t StartDtmf(char cDtmfCode, const CellularCallInfo &callInfo) = 0;
179
180    /**
181     * @brief stop the playing dtmf tone
182     *
183     * @param callInfo[in] the call detail info which contains phone number, call type, slot id .etc
184     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
185     */
186    virtual int32_t StopDtmf(const CellularCallInfo &callInfo) = 0;
187
188    virtual int32_t PostDialProceed(const CellularCallInfo &callInfo, const bool proceed) = 0;
189
190    /**
191     * @brief play a dtmf tone
192     *
193     * @param cDtmfCode[in] A character indicate the DTMF digit for which to play the tone. This
194     * value must be one of {0~9}, {*} or {#}.
195     * @param callInfo[in] the call detail info which contains phone number, call type, slot id .etc
196     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
197     */
198    virtual int32_t SendDtmf(char cDtmfCode, const CellularCallInfo &callInfo) = 0;
199
200    /**
201     * @brief Start a RTT session
202     *
203     * @param msg the RTT message
204     * @param slotId[in] the slot id
205     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
206     */
207    virtual int32_t StartRtt(int32_t slotId, const std::string &msg) = 0;
208
209    /**
210     * @brief Terminate the current RTT session
211     *
212     * @param slotId[in] the slot id
213     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
214     */
215    virtual int32_t StopRtt(int32_t slotId) = 0;
216
217    /**
218     * @brief set call transfer for the slot id
219     *
220     * @param ctInfo[in] contains the call transfer type, enable/disable, the transfered number, the start/end time
221     * @param slotId[in] the slot id
222     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
223     */
224    virtual int32_t SetCallTransferInfo(int32_t slotId, const CallTransferInfo &ctInfo) = 0;
225
226    /**
227     * @brief confirm whether IMS can set call transfer time
228     *
229     * @param slotId[in] the slot id
230     * @param result[out] whether IMS can set call transfer time. true mean yes, false mean no
231     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
232     */
233    virtual int32_t CanSetCallTransferTime(int32_t slotId, bool &result) = 0;
234
235    /**
236     * @brief Get Call Transfer information
237     *
238     * @param type[in] indicate the call transfer type, just like CFU, CFB, CFNRy, CFNRc
239     * @param slotId[in] the slot id
240     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
241     */
242    virtual int32_t GetCallTransferInfo(int32_t slotId, CallTransferType type) = 0;
243
244    /**
245     * @brief Set Call Waiting
246     *
247     * @param activate[in] true mean activate the call waiting, false mean inactivate
248     * @param slotId[in] the slot id
249     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
250     */
251    virtual int32_t SetCallWaiting(int32_t slotId, bool activate) = 0;
252
253    /**
254     * @brief Gets whether the call waiting service of the current account is enabled
255     *
256     * @param slotId[in] the slot id
257     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
258     */
259    virtual int32_t GetCallWaiting(int32_t slotId) = 0;
260
261    /**
262     * @brief Set the call restriction function for the current account
263     *
264     * @param cRInfo[in] contains the password, call restriction type and call restriction mode
265     * @param slotId[in] the slot id
266     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
267     */
268    virtual int32_t SetCallRestriction(int32_t slotId, const CallRestrictionInfo &cRInfo) = 0;
269
270    /**
271     * @brief Set the call restriction password of the specified account
272     *
273     * @param slotId[in] the slot id
274     * @param fac[in] indicate the call restriction type, just like all incoming, all outgoing .etc
275     * @param oldPassword[in] indicate the call restriction old password
276     * @param newPassword[in] indicate the call restriction new password
277     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
278     */
279    virtual int32_t SetCallRestrictionPassword(
280        int32_t slotId, CallRestrictionType fac, const char *oldPassword, const char *newPassword) = 0;
281
282    /**
283     * @brief Gets the call restriction information of the specified account
284     *
285     * @param facType[in] indicate the call restriction type, just like all incoming, all outgoing .etc
286     * @param slotId[in] the slot id
287     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
288     */
289    virtual int32_t GetCallRestriction(int32_t slotId, CallRestrictionType facType) = 0;
290
291    /**
292     * @brief Register CallMnager CallBack ptr
293     *
294     * @param callback callback ptr
295     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
296     */
297    virtual int32_t RegisterCallManagerCallBack(const sptr<ICallStatusCallback> &callback) = 0;
298
299    /**
300     * @brief UnRegister CallMnager CallBack ptr
301     *
302     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
303     */
304    virtual int32_t UnRegisterCallManagerCallBack() = 0;
305
306    /**
307     * @brief Set Domain Preference Mode
308     *
309     * @param mode[in] indicate the domain preference, 1: CS only, 2: CS prefer, 3: PS prefer, 4: PS only
310     * @param slotId[in] the slot id
311     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
312     */
313    virtual int32_t SetDomainPreferenceMode(int32_t slotId, int32_t mode) = 0;
314
315    /**
316     * @brief Get Domain Preference Mode
317     *
318     * @param slotId[in] the slot id
319     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
320     */
321    virtual int32_t GetDomainPreferenceMode(int32_t slotId) = 0;
322
323    /**
324     * @brief Set Ims Switch Status
325     *
326     * @param active[in] indicate the ims switch status, true is on, false is off
327     * @param slotId[in] the slot id
328     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
329     */
330    virtual int32_t SetImsSwitchStatus(int32_t slotId, bool active) = 0;
331
332    /**
333     * @brief Get Ims Switch Status
334     *
335     * @param slotId[in] the slot id
336     * @param enabled[out] indicate the ims switch status, true is on, false is off
337     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
338     */
339    virtual int32_t GetImsSwitchStatus(int32_t slotId, bool &enabled) = 0;
340
341    /**
342     * @brief Set VoNR Switch Status
343     *
344     * @param state[in] Indicates the VoNR state, 0: off, 1: on
345     * @param slotId[in] the slot id
346     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
347     */
348    virtual int32_t SetVoNRState(int32_t slotId, int32_t state) = 0;
349
350    /**
351     * @brief Get VoNR Switch Status
352     *
353     * @param slotId[in] the slot id
354     * @param state[out] Indicates the VoNR state, 0: off, 1: on
355     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
356     */
357    virtual int32_t GetVoNRState(int32_t slotId, int32_t &state) = 0;
358
359    /**
360     * @brief Set Ims Config
361     *
362     * @param item[in] Identify specific item, like ITEM_VIDEO_QUALITY, ITEM_IMS_SWITCH_STATUS
363     * @param value[in] The specific value corresponding to the item
364     * @param slotId[in] the slot id
365     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
366     */
367    virtual int32_t SetImsConfig(int32_t slotId, ImsConfigItem item, const std::string &value) = 0;
368
369    /**
370     * @brief Set Ims Config
371     *
372     * @param item[in] Identify specific item, like ITEM_VIDEO_QUALITY, ITEM_IMS_SWITCH_STATUS
373     * @param value[in] The specific value corresponding to the item
374     * @param slotId[in] the slot id
375     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
376     */
377    virtual int32_t SetImsConfig(int32_t slotId, ImsConfigItem item, int32_t value) = 0;
378
379    /**
380     * @brief Get Ims Config
381     *
382     * @param item[in] Identify specific item, like ITEM_VIDEO_QUALITY, ITEM_IMS_SWITCH_STATUS
383     * @param slotId[in] the slot id
384     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
385     */
386    virtual int32_t GetImsConfig(int32_t slotId, ImsConfigItem item) = 0;
387
388    /**
389     * @brief Set Ims Feature Value
390     *
391     * @param type[in] the ims feature item, like VoLTE, ViLTE, SS over UT
392     * @param value[in] The specific value corresponding to the item
393     * @param slotId[in] the slot id
394     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
395     */
396    virtual int32_t SetImsFeatureValue(int32_t slotId, FeatureType type, int32_t value) = 0;
397
398    /**
399     * @brief Get Ims Feature Value
400     *
401     * @param type[in] the ims feature item, like VoLTE, ViLTE, SS over UT
402     * @param slotId[in] the slot id
403     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
404     */
405    virtual int32_t GetImsFeatureValue(int32_t slotId, FeatureType type) = 0;
406
407    /**
408     * @brief set camara to be enabled for video call
409     *
410     * @param slotId[in] the slot id
411     * @param index[in] the index of call
412     * @param cameraId[in] The id of the camera
413     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
414     */
415    virtual int32_t ControlCamera(
416        int32_t slotId, int32_t index, const std::string &cameraId) = 0;
417
418    /**
419     * @brief set a window which used to display a preview of camera capturing
420     *
421     * @param slotId[in] the slot id
422     * @param index[in] the index of call
423     * @param surfaceId[in] the window information
424     * @param surface[in] the window information
425     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
426     */
427    virtual int32_t SetPreviewWindow(
428        int32_t slotId, int32_t index, const std::string &surfaceId, sptr<Surface> surface) = 0;
429
430    /**
431     * @brief set a window which used to display the viedo which is received from remote
432     *
433     * @param slotId[in] the slot id
434     * @param index[in] the index of call
435     * @param surfaceId[in] the window information
436     * @param surface[in] the window information
437     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
438     */
439    virtual int32_t SetDisplayWindow(
440        int32_t slotId, int32_t index, const std::string &surfaceId, sptr<Surface> surface) = 0;
441
442    /**
443     * @brief set camera zoom ratio
444     *
445     * @param zoomRatio[in] the camera zoom ratio
446     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
447     */
448    virtual int32_t SetCameraZoom(float zoomRatio) = 0;
449
450    /**
451     * @brief set a image which will be displayed when the video signal is paused
452     *
453     * @param slotId[in] the slot id
454     * @param index[in] the index of call
455     * @param path[in] the dispalyed image path
456     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
457     */
458    virtual int32_t SetPausePicture(int32_t slotId, int32_t index, const std::string &path) = 0;
459
460    /**
461     * @brief set the device orientation
462     *
463     * @param slotId[in] the slot id
464     * @param index[in] the index of call
465     * @param rotation[in] The device orientation, in degrees
466     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
467     */
468    virtual int32_t SetDeviceDirection(int32_t slotId, int32_t index, int32_t rotation) = 0;
469
470    /**
471     * @brief Set the mute state of the call
472     *
473     * @param mute[in] 1 means the call could be muted
474     * @param slotId[in] the slot id
475     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
476     */
477    virtual int32_t SetMute(int32_t slotId, int32_t mute) = 0;
478
479    /**
480     * @brief Get the mute state of the call
481     *
482     * @param slotId[in] the slot id
483     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
484     */
485    virtual int32_t GetMute(int32_t slotId) = 0;
486
487    /**
488     * @brief Set emergency phone number
489     *
490     * @param eccVecr[in] ecc number info list
491     * @param slotId[in] The slot id
492     * @return Returns TELEPHONY_SUCCESS on true, others on false.
493     */
494    virtual int32_t SetEmergencyCallList(int32_t slotId, std::vector<EmergencyCall> &eccVec) = 0;
495
496    /**
497     * @brief Close Unfinished ussd function for the current account
498     *
499     * @param slotId[in] the slot id
500     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
501     */
502    virtual int32_t CloseUnFinishedUssd(int32_t slotId) = 0;
503
504    /**
505     * @brief clear all call if cellular call service restart
506     *
507     * @param infos[in] the call detail info vector which contains phone number, call type, slot id .etc
508     * @return Returns TELEPHONY_SUCCESS on success, others on failure.
509     */
510    virtual int32_t ClearAllCalls(const std::vector<CellularCallInfo> &infos) = 0;
511
512    /**
513     * @brief cancel call upgrade
514     *
515     * @param slotId[in] the slot id
516     * @param index[in] the index of call
517     * @return Returns 0 on success, others on failure.
518     */
519    virtual int32_t CancelCallUpgrade(int32_t slotId, int32_t index) = 0;
520
521    /**
522     * @brief request camera capabilities
523     *
524     * @param slotId[in] the slot id
525     * @param index[in] the index of call
526     * @return Returns 0 on success, others on failure.
527     */
528    virtual int32_t RequestCameraCapabilities(int32_t slotId, int32_t index) = 0;
529
530public:
531    DECLARE_INTERFACE_DESCRIPTOR(u"OHOS.Telephony.CellularCallInterface");
532};
533} // namespace Telephony
534} // namespace OHOS
535#endif // CELLULAR_CALL_INTERFACE_H
536