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#ifndef BLUETOOTH_CALL_CLIENT_H
17#define BLUETOOTH_CALL_CLIENT_H
18
19#include "singleton.h"
20#include "pac_map.h"
21
22#include "call_manager_callback.h"
23
24namespace OHOS {
25namespace Telephony {
26class BluetoothCallClient : public DelayedRefSingleton<BluetoothCallClient> {
27    DECLARE_DELAYED_REF_SINGLETON(BluetoothCallClient)
28public:
29    void Init();
30    void UnInit();
31
32    /**
33     * @brief Register callback
34     *
35     * @param callback[in], callback function pointer
36     * @return Returns 0 on success, others on failure.
37     */
38    int32_t RegisterCallBack(std::unique_ptr<CallManagerCallback> callback);
39
40    /**
41     * @brief unregister callback
42     *
43     * @return Returns 0 on success, others on failure.
44     */
45    int32_t UnRegisterCallBack();
46
47    /**
48     * @brief Make a phone call
49     *
50     * @param number[in], dial param.
51     * @param extras[in], extras date.
52     * @return Returns callId when the value is greater than zero, others on failure.
53     */
54    int32_t DialCall(std::u16string number, AppExecFwk::PacMap &extras);
55
56    /**
57     * @brief Answer a phone call
58     *
59     * @return Returns 0 on success, others on failure.
60     */
61    int32_t AnswerCall();
62
63    /**
64     * @brief Reject a phone call
65     *
66     * @return Returns 0 on success, others on failure.
67     */
68    int32_t RejectCall();
69
70    /**
71     * @brief Hang up the phone
72     *
73     * @return Returns 0 on success, others on failure.
74     */
75    int32_t HangUpCall();
76
77    /**
78     * @brief Obtain the call status of the device
79     *
80     * @return Returns 0 on success, others on failure.
81     */
82    int32_t GetCallState();
83
84    /**
85     * @brief Park a phone call
86     *
87     * @return Returns 0 on success, others on failure.
88     */
89    int32_t HoldCall();
90
91    /**
92     * @brief Activate a phone call
93     *
94     * @return Returns 0 on success, others on failure.
95     */
96    int32_t UnHoldCall();
97
98    /**
99     * @brief Switch the phone
100     *
101     * @return Returns 0 on success, others on failure.
102     */
103    int32_t SwitchCall();
104
105    /**
106     * @brief Merge calls to form a conference
107     *
108     * @return Returns 0 on success, others on failure.
109     */
110    int32_t CombineConference();
111
112    /**
113     * @brief Separates a specified call from a conference call
114     *
115     * @return Returns 0 on success, others on failure.
116     */
117    int32_t SeparateConference();
118
119    /**
120     * @brief Kick out a specified call from a conference call
121     *
122     * @return Returns 0 on success, others on failure.
123     */
124    int32_t KickOutFromConference();
125
126    /**
127     * @brief Enable and send DTMF
128     *
129     * @param str[in], Characters sent
130     * @return Returns 0 on success, others on failure.
131     */
132    int32_t StartDtmf(char str);
133
134    /**
135     * @brief Stop the DTMF
136     *
137     * @return Returns 0 on success, others on failure.
138     */
139    int32_t StopDtmf();
140
141    /**
142     * @brief Whether the ringing
143     *
144     * @param enabled[out], true on ringing, false on there is no ringing
145     * @return Returns interface processing results.
146     */
147    int32_t IsRinging(bool &enabled);
148
149    /**
150     * @brief Is there Call
151     *
152     * @return Returns true on has call, others on there is no call.
153     */
154    bool HasCall();
155
156    /**
157     * @brief Checks whether a new call is allowed.
158     *
159     * @param enabled[out], whether allow new calls
160     * @return Returns interface processing results.
161     */
162    int32_t IsNewCallAllowed(bool &enabled);
163
164    /**
165     * @brief Is there an emergency call
166     *
167     * @param enabled[out], true on emergency call, false on no emergency call
168     * @return Returns interface processing results.
169     */
170    int32_t IsInEmergencyCall(bool &enabled);
171
172    /**
173     * @brief Mute the Microphone
174     *
175     * @param isMute[in], mute state
176     * @return Returns 0 on success, others on failure.
177     */
178    int32_t SetMuted(bool isMute);
179
180    /**
181     * @brief Call mute
182     *
183     * @return Returns 0 on success, others on failure.
184     */
185    int32_t MuteRinger();
186
187    /**
188     * @brief Setting the Audio Channel
189     *
190     * @param deviceType[in], audioDeviceType
191     * @param bluetoothAddress[in], audio device address
192     * @return Returns 0 on success, others on failure.
193     */
194    int32_t SetAudioDevice(AudioDeviceType deviceType, const std::string &bluetoothAddress);
195
196    /**
197     * @brief Get current call list
198     *
199     * @param slotId[in], The slot id
200     * @return Returns call info list.
201     */
202    std::vector<CallAttributeInfo> GetCurrentCallList(int32_t slotId);
203private:
204    std::mutex mutex_;
205};
206} // namespace Telephony
207} // namespace OHOS
208
209#endif