1e1c44949Sopenharmony_ci/*
2e1c44949Sopenharmony_ci * Copyright (C) 2023 Huawei Device Co., Ltd.
3e1c44949Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4e1c44949Sopenharmony_ci * you may not use this file except in compliance with the License.
5e1c44949Sopenharmony_ci * You may obtain a copy of the License at
6e1c44949Sopenharmony_ci *
7e1c44949Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8e1c44949Sopenharmony_ci *
9e1c44949Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10e1c44949Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11e1c44949Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12e1c44949Sopenharmony_ci * See the License for the specific language governing permissions and
13e1c44949Sopenharmony_ci * limitations under the License.
14e1c44949Sopenharmony_ci */
15e1c44949Sopenharmony_ci
16e1c44949Sopenharmony_ci#ifndef CALL_MANAGER_INFO_H
17e1c44949Sopenharmony_ci#define CALL_MANAGER_INFO_H
18e1c44949Sopenharmony_ci
19e1c44949Sopenharmony_ci#include "call_manager_base.h"
20e1c44949Sopenharmony_ci
21e1c44949Sopenharmony_cinamespace OHOS {
22e1c44949Sopenharmony_cinamespace Telephony {
23e1c44949Sopenharmony_ci/**
24e1c44949Sopenharmony_ci * @brief Indicates the cellular call detail information.
25e1c44949Sopenharmony_ci */
26e1c44949Sopenharmony_cistruct CellularCallInfo {
27e1c44949Sopenharmony_ci    /**
28e1c44949Sopenharmony_ci     * Indicates the call index
29e1c44949Sopenharmony_ci     */
30e1c44949Sopenharmony_ci    int32_t callId = 0;
31e1c44949Sopenharmony_ci    /**
32e1c44949Sopenharmony_ci     * Indicates the call phone number.
33e1c44949Sopenharmony_ci     */
34e1c44949Sopenharmony_ci    char phoneNum[kMaxNumberLen] = { 0 };
35e1c44949Sopenharmony_ci    /**
36e1c44949Sopenharmony_ci     * Indicates the slot id.
37e1c44949Sopenharmony_ci     */
38e1c44949Sopenharmony_ci    int32_t slotId = 0;
39e1c44949Sopenharmony_ci    int32_t accountId = 0;
40e1c44949Sopenharmony_ci    /**
41e1c44949Sopenharmony_ci     * Indicates the type of call, includs CS, IMS, OTT, OTHER. {@link CallType}
42e1c44949Sopenharmony_ci     */
43e1c44949Sopenharmony_ci    CallType callType = CallType::TYPE_ERR_CALL;
44e1c44949Sopenharmony_ci    /**
45e1c44949Sopenharmony_ci     * Indicates whether the call is video. 0: audio 1: send only 2: revive ony 3:video
46e1c44949Sopenharmony_ci     */
47e1c44949Sopenharmony_ci    int32_t videoState = 0;
48e1c44949Sopenharmony_ci    int32_t index = 0;
49e1c44949Sopenharmony_ci};
50e1c44949Sopenharmony_ci
51e1c44949Sopenharmony_ci/**
52e1c44949Sopenharmony_ci * @brief Indicates the cellular call event information.
53e1c44949Sopenharmony_ci */
54e1c44949Sopenharmony_cistruct CellularCallEventInfo {
55e1c44949Sopenharmony_ci    /**
56e1c44949Sopenharmony_ci     * Indicates the call event type. {@link CellularCallEventType}
57e1c44949Sopenharmony_ci     */
58e1c44949Sopenharmony_ci    CellularCallEventType eventType = CellularCallEventType::EVENT_REQUEST_RESULT_TYPE;
59e1c44949Sopenharmony_ci    /**
60e1c44949Sopenharmony_ci     * Indicates the call event id, one id corresponds to one request.
61e1c44949Sopenharmony_ci     * {@link RequestResultEventId}
62e1c44949Sopenharmony_ci     */
63e1c44949Sopenharmony_ci    RequestResultEventId eventId = RequestResultEventId::INVALID_REQUEST_RESULT_EVENT_ID;
64e1c44949Sopenharmony_ci};
65e1c44949Sopenharmony_ci
66e1c44949Sopenharmony_ci/**
67e1c44949Sopenharmony_ci * @brief Indicates the ringback tone playing mode.
68e1c44949Sopenharmony_ci */
69e1c44949Sopenharmony_cienum class RBTPlayInfo {
70e1c44949Sopenharmony_ci    /**
71e1c44949Sopenharmony_ci     * Indicates the mode is network, the tone is from network.
72e1c44949Sopenharmony_ci     */
73e1c44949Sopenharmony_ci    NETWORK_ALERTING,
74e1c44949Sopenharmony_ci    /**
75e1c44949Sopenharmony_ci     * Indicates the mode is local, the tone is from local file.
76e1c44949Sopenharmony_ci     */
77e1c44949Sopenharmony_ci    LOCAL_ALERTING,
78e1c44949Sopenharmony_ci};
79e1c44949Sopenharmony_ci
80e1c44949Sopenharmony_cistruct VoipCallReportInfo {
81e1c44949Sopenharmony_ci    std::string voipCallId = "";
82e1c44949Sopenharmony_ci    std::string userName = "";
83e1c44949Sopenharmony_ci    std::vector<uint8_t> userProfile = {};
84e1c44949Sopenharmony_ci    std::string abilityName = "";
85e1c44949Sopenharmony_ci    std::string extensionId = "";
86e1c44949Sopenharmony_ci    std::string voipBundleName = "";
87e1c44949Sopenharmony_ci    bool showBannerForIncomingCall = true;
88e1c44949Sopenharmony_ci    bool isConferenceCall = false;
89e1c44949Sopenharmony_ci    bool isVoiceAnswerSupported = true;
90e1c44949Sopenharmony_ci    bool hasMicPermission = true;
91e1c44949Sopenharmony_ci    int32_t uid = 0;
92e1c44949Sopenharmony_ci};
93e1c44949Sopenharmony_ci
94e1c44949Sopenharmony_ci/**
95e1c44949Sopenharmony_ci * @brief Indicates detail information of the number mark.
96e1c44949Sopenharmony_ci */
97e1c44949Sopenharmony_cistruct NumberMarkInfo {
98e1c44949Sopenharmony_ci    /**
99e1c44949Sopenharmony_ci     * Indicates the type of number mark.
100e1c44949Sopenharmony_ci     */
101e1c44949Sopenharmony_ci    MarkType markType = MarkType::MARK_TYPE_NONE;
102e1c44949Sopenharmony_ci    /**
103e1c44949Sopenharmony_ci     * Indicates the content of number mark.
104e1c44949Sopenharmony_ci     */
105e1c44949Sopenharmony_ci    char markContent[kMaxNumberLen + 1] = { 0 };
106e1c44949Sopenharmony_ci    /**
107e1c44949Sopenharmony_ci     * Indicates the count of number mark.
108e1c44949Sopenharmony_ci     */
109e1c44949Sopenharmony_ci    int32_t markCount = -1;
110e1c44949Sopenharmony_ci    /**
111e1c44949Sopenharmony_ci     * Indicates the source of number mark.
112e1c44949Sopenharmony_ci     */
113e1c44949Sopenharmony_ci    char markSource[kMaxNumberLen + 1] = { 0 };
114e1c44949Sopenharmony_ci    /**
115e1c44949Sopenharmony_ci     * Indicates if this is a number mark from cloud.
116e1c44949Sopenharmony_ci     */
117e1c44949Sopenharmony_ci    bool isCloud = false;
118e1c44949Sopenharmony_ci    /**
119e1c44949Sopenharmony_ci     * Indicates the details of number mark.
120e1c44949Sopenharmony_ci     */
121e1c44949Sopenharmony_ci    char markDetails[kMaxNumberLen + 1] = { 0 };
122e1c44949Sopenharmony_ci};
123e1c44949Sopenharmony_ci
124e1c44949Sopenharmony_ci/**
125e1c44949Sopenharmony_ci * @brief Indicates the call event detail information.
126e1c44949Sopenharmony_ci */
127e1c44949Sopenharmony_cistruct CallEventInfo {
128e1c44949Sopenharmony_ci    /**
129e1c44949Sopenharmony_ci     * Indicates the event ID of call ability. {@link CallAbilityEventId}
130e1c44949Sopenharmony_ci     */
131e1c44949Sopenharmony_ci    CallAbilityEventId eventId = CallAbilityEventId::EVENT_DIAL_NO_CARRIER;
132e1c44949Sopenharmony_ci    /**
133e1c44949Sopenharmony_ci     * Indicates the call phone number.
134e1c44949Sopenharmony_ci     */
135e1c44949Sopenharmony_ci    char phoneNum[kMaxNumberLen + 1] = { 0 };
136e1c44949Sopenharmony_ci    /**
137e1c44949Sopenharmony_ci     * Indicates the bundle name.
138e1c44949Sopenharmony_ci     */
139e1c44949Sopenharmony_ci    char bundleName[kMaxBundleNameLen + 1] = { 0 };
140e1c44949Sopenharmony_ci};
141e1c44949Sopenharmony_ci
142e1c44949Sopenharmony_cistruct AccountInfo {
143e1c44949Sopenharmony_ci    int32_t accountId = 0;
144e1c44949Sopenharmony_ci    int32_t power = 0;
145e1c44949Sopenharmony_ci    char bundleName[kMaxNumberLen + 1] = { 0 };
146e1c44949Sopenharmony_ci    bool isEnabled = false;
147e1c44949Sopenharmony_ci};
148e1c44949Sopenharmony_ci
149e1c44949Sopenharmony_ci/**
150e1c44949Sopenharmony_ci * @brief Indicates the call report information.
151e1c44949Sopenharmony_ci */
152e1c44949Sopenharmony_cistruct CallReportInfo {
153e1c44949Sopenharmony_ci    int32_t index = 0;
154e1c44949Sopenharmony_ci    /**
155e1c44949Sopenharmony_ci     * Indicates the call phone number.
156e1c44949Sopenharmony_ci     */
157e1c44949Sopenharmony_ci    char accountNum[kMaxNumberLen + 1] = { 0 };
158e1c44949Sopenharmony_ci    int32_t accountId = 0;
159e1c44949Sopenharmony_ci    /**
160e1c44949Sopenharmony_ci     * Indicates the type of call, includs CS, IMS, OTT, OTHER. {@link CallType}
161e1c44949Sopenharmony_ci     */
162e1c44949Sopenharmony_ci    CallType callType = CallType::TYPE_ERR_CALL;
163e1c44949Sopenharmony_ci    /**
164e1c44949Sopenharmony_ci     * Indicates the type of video state. {@link VideoStateType}
165e1c44949Sopenharmony_ci     */
166e1c44949Sopenharmony_ci    VideoStateType callMode = VideoStateType::TYPE_VOICE;
167e1c44949Sopenharmony_ci    /**
168e1c44949Sopenharmony_ci     * Indicates the detailed state of call. {@link TelCallState}
169e1c44949Sopenharmony_ci     */
170e1c44949Sopenharmony_ci    TelCallState state = TelCallState::CALL_STATUS_UNKNOWN;
171e1c44949Sopenharmony_ci    /**
172e1c44949Sopenharmony_ci     * Indicates the voica domain, 0: CS, 1: IMS
173e1c44949Sopenharmony_ci     */
174e1c44949Sopenharmony_ci    int32_t voiceDomain = 0;
175e1c44949Sopenharmony_ci    /**
176e1c44949Sopenharmony_ci     * Indicates the Multi-party call status:
177e1c44949Sopenharmony_ci     * 0: not a multi-party(conference) call
178e1c44949Sopenharmony_ci     * 1: a multi-party(conference) call
179e1c44949Sopenharmony_ci     */
180e1c44949Sopenharmony_ci    int32_t mpty = 0;
181e1c44949Sopenharmony_ci    /**
182e1c44949Sopenharmony_ci     * Indicates the color tone type.
183e1c44949Sopenharmony_ci     */
184e1c44949Sopenharmony_ci    int32_t crsType = 0;
185e1c44949Sopenharmony_ci    /**
186e1c44949Sopenharmony_ci     * Indicates the initial type of this call.
187e1c44949Sopenharmony_ci     */
188e1c44949Sopenharmony_ci    int32_t originalCallType = 0;
189e1c44949Sopenharmony_ci    /**
190e1c44949Sopenharmony_ci     * Indicates the VoIP call specific information
191e1c44949Sopenharmony_ci     */
192e1c44949Sopenharmony_ci    VoipCallReportInfo voipCallInfo;
193e1c44949Sopenharmony_ci    /**
194e1c44949Sopenharmony_ci     * Call state between with holdRequest and holdResponse
195e1c44949Sopenharmony_ci     */
196e1c44949Sopenharmony_ci    bool isPendingHold = false;
197e1c44949Sopenharmony_ci};
198e1c44949Sopenharmony_ci
199e1c44949Sopenharmony_ci/**
200e1c44949Sopenharmony_ci * @brief Indicates the detail information of some calls record.
201e1c44949Sopenharmony_ci */
202e1c44949Sopenharmony_cistruct CallsReportInfo {
203e1c44949Sopenharmony_ci    /**
204e1c44949Sopenharmony_ci     * Indicates a list of the call report information.
205e1c44949Sopenharmony_ci     */
206e1c44949Sopenharmony_ci    std::vector<CallReportInfo> callVec {};
207e1c44949Sopenharmony_ci    /**
208e1c44949Sopenharmony_ci     * Indicates the slot id.
209e1c44949Sopenharmony_ci     */
210e1c44949Sopenharmony_ci    int32_t slotId = 0;
211e1c44949Sopenharmony_ci};
212e1c44949Sopenharmony_ci
213e1c44949Sopenharmony_ci/**
214e1c44949Sopenharmony_ci * @brief Indicates the detail information of a call.
215e1c44949Sopenharmony_ci */
216e1c44949Sopenharmony_cistruct CallAttributeInfo {
217e1c44949Sopenharmony_ci    /**
218e1c44949Sopenharmony_ci     * Indicates the call phone number.
219e1c44949Sopenharmony_ci     */
220e1c44949Sopenharmony_ci    char accountNumber[kMaxNumberLen + 1] = { 0 };
221e1c44949Sopenharmony_ci    /**
222e1c44949Sopenharmony_ci     * Indicates the bundle name.
223e1c44949Sopenharmony_ci     */
224e1c44949Sopenharmony_ci    char bundleName[kMaxBundleNameLen + 1] = { 0 };
225e1c44949Sopenharmony_ci    /**
226e1c44949Sopenharmony_ci     * Indicates whether the speaker phone is on.
227e1c44949Sopenharmony_ci     */
228e1c44949Sopenharmony_ci    bool speakerphoneOn = false;
229e1c44949Sopenharmony_ci    int32_t accountId = 0;
230e1c44949Sopenharmony_ci    /**
231e1c44949Sopenharmony_ci     * Indicates the type of video state. {@link VideoStateType}
232e1c44949Sopenharmony_ci     */
233e1c44949Sopenharmony_ci    VideoStateType videoState = VideoStateType::TYPE_VOICE;
234e1c44949Sopenharmony_ci    /**
235e1c44949Sopenharmony_ci     * Indicates the Call start time.
236e1c44949Sopenharmony_ci     */
237e1c44949Sopenharmony_ci    int64_t startTime = 0;
238e1c44949Sopenharmony_ci    /**
239e1c44949Sopenharmony_ci     * Indicates whether the call is emergency call.
240e1c44949Sopenharmony_ci     */
241e1c44949Sopenharmony_ci    bool isEcc = false;
242e1c44949Sopenharmony_ci    /**
243e1c44949Sopenharmony_ci     * Indicates whether the call is emergency Contact call.
244e1c44949Sopenharmony_ci     */
245e1c44949Sopenharmony_ci    bool isEccContact = false;
246e1c44949Sopenharmony_ci    /**
247e1c44949Sopenharmony_ci     * Indicates the type of call, includs CS, IMS, OTT, OTHER. {@link CallType}
248e1c44949Sopenharmony_ci     */
249e1c44949Sopenharmony_ci    CallType callType = CallType::TYPE_ERR_CALL;
250e1c44949Sopenharmony_ci    /**
251e1c44949Sopenharmony_ci     * Indicates the call index.
252e1c44949Sopenharmony_ci     */
253e1c44949Sopenharmony_ci    int32_t callId = 0;
254e1c44949Sopenharmony_ci    /**
255e1c44949Sopenharmony_ci     * Indicates the detailed state of call. {@link TelCallState}
256e1c44949Sopenharmony_ci     */
257e1c44949Sopenharmony_ci    TelCallState callState = TelCallState::CALL_STATUS_UNKNOWN;
258e1c44949Sopenharmony_ci    /**
259e1c44949Sopenharmony_ci     * Indicates the state of conference call. {@link TelConferenceState}
260e1c44949Sopenharmony_ci     */
261e1c44949Sopenharmony_ci    TelConferenceState conferenceState = TelConferenceState::TEL_CONFERENCE_IDLE;
262e1c44949Sopenharmony_ci    /**
263e1c44949Sopenharmony_ci     * Indicates the call beginning and ending time.
264e1c44949Sopenharmony_ci     */
265e1c44949Sopenharmony_ci    time_t callBeginTime = 0;
266e1c44949Sopenharmony_ci    time_t callCreateTime = 0;
267e1c44949Sopenharmony_ci    time_t callEndTime = 0;
268e1c44949Sopenharmony_ci    time_t ringBeginTime = 0;
269e1c44949Sopenharmony_ci    time_t ringEndTime = 0;
270e1c44949Sopenharmony_ci    /**
271e1c44949Sopenharmony_ci     * Indicates the call is MO or MT. {@link CallDirection}
272e1c44949Sopenharmony_ci     */
273e1c44949Sopenharmony_ci    CallDirection callDirection = CallDirection::CALL_DIRECTION_UNKNOW;
274e1c44949Sopenharmony_ci    /**
275e1c44949Sopenharmony_ci     * Indicates the cause when the call is answered. {@link CallAnswerType}
276e1c44949Sopenharmony_ci     */
277e1c44949Sopenharmony_ci    CallAnswerType answerType = CallAnswerType::CALL_ANSWER_MISSED;
278e1c44949Sopenharmony_ci    /*
279e1c44949Sopenharmony_ci     * Indicates the call index in cellular call
280e1c44949Sopenharmony_ci     */
281e1c44949Sopenharmony_ci    int32_t index = 0;
282e1c44949Sopenharmony_ci    /**
283e1c44949Sopenharmony_ci     * Indicates the color tone type.
284e1c44949Sopenharmony_ci     */
285e1c44949Sopenharmony_ci    int32_t crsType = 0;
286e1c44949Sopenharmony_ci    /**
287e1c44949Sopenharmony_ci     * Indicates the initial type of this call.
288e1c44949Sopenharmony_ci     */
289e1c44949Sopenharmony_ci    int32_t originalCallType = 0;
290e1c44949Sopenharmony_ci    /**
291e1c44949Sopenharmony_ci     * Indicates the VoIP call specific information
292e1c44949Sopenharmony_ci     */
293e1c44949Sopenharmony_ci    VoipCallReportInfo voipCallInfo;
294e1c44949Sopenharmony_ci    /**
295e1c44949Sopenharmony_ci     * Indicates the location of phone number.
296e1c44949Sopenharmony_ci     */
297e1c44949Sopenharmony_ci    char numberLocation[kMaxNumberLen + 1] = { 0 };
298e1c44949Sopenharmony_ci    /**
299e1c44949Sopenharmony_ci     * Indicates the mark information of the phone number.
300e1c44949Sopenharmony_ci     */
301e1c44949Sopenharmony_ci    NumberMarkInfo numberMarkInfo;
302e1c44949Sopenharmony_ci    /**
303e1c44949Sopenharmony_ci     * Indicates the reason of call blocked.
304e1c44949Sopenharmony_ci     */
305e1c44949Sopenharmony_ci    int32_t blockReason = 0;
306e1c44949Sopenharmony_ci    /**
307e1c44949Sopenharmony_ci     * Indicates the type of celia call.
308e1c44949Sopenharmony_ci     */
309e1c44949Sopenharmony_ci    int32_t celiaCallType = -1;
310e1c44949Sopenharmony_ci    /**
311e1c44949Sopenharmony_ci     * Indicates the contact name.
312e1c44949Sopenharmony_ci     */
313e1c44949Sopenharmony_ci    char contactName[kMaxNumberLen + 1] = { 0 };
314e1c44949Sopenharmony_ci    /**
315e1c44949Sopenharmony_ci     * Indicates the extraParamsString information.
316e1c44949Sopenharmony_ci     */
317e1c44949Sopenharmony_ci    std::string extraParamsString;
318e1c44949Sopenharmony_ci};
319e1c44949Sopenharmony_ci
320e1c44949Sopenharmony_ci/**
321e1c44949Sopenharmony_ci * @brief Indicates the detail information of call record.
322e1c44949Sopenharmony_ci */
323e1c44949Sopenharmony_cistruct CallRecordInfo {
324e1c44949Sopenharmony_ci    /**
325e1c44949Sopenharmony_ci     * Indicates the call index.
326e1c44949Sopenharmony_ci     */
327e1c44949Sopenharmony_ci    int32_t callId = 0;
328e1c44949Sopenharmony_ci    /**
329e1c44949Sopenharmony_ci     * Indicates the call phone number.
330e1c44949Sopenharmony_ci     */
331e1c44949Sopenharmony_ci    char phoneNumber[kMaxNumberLen + 1] = { 0 };
332e1c44949Sopenharmony_ci    /**
333e1c44949Sopenharmony_ci     * Indicates the number after formatted.
334e1c44949Sopenharmony_ci     */
335e1c44949Sopenharmony_ci    char formattedNumber[kMaxNumberLen + 1] = { 0 };
336e1c44949Sopenharmony_ci    /**
337e1c44949Sopenharmony_ci     * Indicates the phone number after formatted.
338e1c44949Sopenharmony_ci     */
339e1c44949Sopenharmony_ci    char formattedNumberToE164[kMaxNumberLen + 1] = { 0 };
340e1c44949Sopenharmony_ci    /**
341e1c44949Sopenharmony_ci     * Indicates the location of phone number.
342e1c44949Sopenharmony_ci     */
343e1c44949Sopenharmony_ci    char numberLocation[kMaxNumberLen + 1] = { 0 };
344e1c44949Sopenharmony_ci    /**
345e1c44949Sopenharmony_ci     * Indicates the type of call, includs CS, IMS, OTT, OTHER. {@link CallType}
346e1c44949Sopenharmony_ci     */
347e1c44949Sopenharmony_ci    CallType callType = CallType::TYPE_ERR_CALL;
348e1c44949Sopenharmony_ci    /**
349e1c44949Sopenharmony_ci     * Indicates the type of video state. {@link VideoStateType}
350e1c44949Sopenharmony_ci     */
351e1c44949Sopenharmony_ci    VideoStateType videoState = VideoStateType::TYPE_VOICE;
352e1c44949Sopenharmony_ci    /**
353e1c44949Sopenharmony_ci     * Indicates the call beginning time.
354e1c44949Sopenharmony_ci     */
355e1c44949Sopenharmony_ci    time_t callBeginTime = 0;
356e1c44949Sopenharmony_ci    /**
357e1c44949Sopenharmony_ci     * Indicates the call create time.
358e1c44949Sopenharmony_ci     */
359e1c44949Sopenharmony_ci    time_t callCreateTime = 0;
360e1c44949Sopenharmony_ci    /**
361e1c44949Sopenharmony_ci     * Indicates the call ending time.
362e1c44949Sopenharmony_ci     */
363e1c44949Sopenharmony_ci    time_t callEndTime = 0;
364e1c44949Sopenharmony_ci    /**
365e1c44949Sopenharmony_ci     * Indicates the call ring duration.
366e1c44949Sopenharmony_ci     */
367e1c44949Sopenharmony_ci    uint32_t ringDuration = 0;
368e1c44949Sopenharmony_ci    /**
369e1c44949Sopenharmony_ci     * Indicates the call session duration.
370e1c44949Sopenharmony_ci     */
371e1c44949Sopenharmony_ci    uint32_t callDuration = 0;
372e1c44949Sopenharmony_ci    /**
373e1c44949Sopenharmony_ci     * Indicates the call is MO or MT. {@link CallDirection}
374e1c44949Sopenharmony_ci     */
375e1c44949Sopenharmony_ci    CallDirection directionType = CallDirection::CALL_DIRECTION_UNKNOW;
376e1c44949Sopenharmony_ci    /**
377e1c44949Sopenharmony_ci     * Indicates the cause when the call is answered. {@link CallAnswerType}
378e1c44949Sopenharmony_ci     */
379e1c44949Sopenharmony_ci    CallAnswerType answerType = CallAnswerType::CALL_ANSWER_MISSED;
380e1c44949Sopenharmony_ci    /**
381e1c44949Sopenharmony_ci     * Indicates the country code of the call.
382e1c44949Sopenharmony_ci     */
383e1c44949Sopenharmony_ci    int32_t countryCode = 0;
384e1c44949Sopenharmony_ci    /**
385e1c44949Sopenharmony_ci     * Indicates the slot id.
386e1c44949Sopenharmony_ci     */
387e1c44949Sopenharmony_ci    int32_t slotId = 0;
388e1c44949Sopenharmony_ci    /**
389e1c44949Sopenharmony_ci     * Indicates the call features.
390e1c44949Sopenharmony_ci     */
391e1c44949Sopenharmony_ci    int32_t features = 0;
392e1c44949Sopenharmony_ci    /**
393e1c44949Sopenharmony_ci     * Indicates the mark information of the phone number.
394e1c44949Sopenharmony_ci     */
395e1c44949Sopenharmony_ci    NumberMarkInfo numberMarkInfo;
396e1c44949Sopenharmony_ci    /**
397e1c44949Sopenharmony_ci     * Indicates the reason of call blocked.
398e1c44949Sopenharmony_ci     */
399e1c44949Sopenharmony_ci    int32_t blockReason = 0;
400e1c44949Sopenharmony_ci
401e1c44949Sopenharmony_ci    /**
402e1c44949Sopenharmony_ci     * Indicates the type of celia call.
403e1c44949Sopenharmony_ci     */
404e1c44949Sopenharmony_ci    int32_t celiaCallType = -1;
405e1c44949Sopenharmony_ci
406e1c44949Sopenharmony_ci    CallRecordInfo() {}
407e1c44949Sopenharmony_ci
408e1c44949Sopenharmony_ci    CallRecordInfo(const CallRecordInfo &temp)
409e1c44949Sopenharmony_ci    {
410e1c44949Sopenharmony_ci        *this = temp;
411e1c44949Sopenharmony_ci    }
412e1c44949Sopenharmony_ci
413e1c44949Sopenharmony_ci    CallRecordInfo &operator=(const CallRecordInfo &temp)
414e1c44949Sopenharmony_ci    {
415e1c44949Sopenharmony_ci        callId = temp.callId;
416e1c44949Sopenharmony_ci        std::copy(std::begin(temp.phoneNumber), std::end(temp.phoneNumber), std::begin(phoneNumber));
417e1c44949Sopenharmony_ci        std::copy(std::begin(temp.formattedNumberToE164), std::end(temp.formattedNumberToE164),
418e1c44949Sopenharmony_ci            std::begin(formattedNumberToE164));
419e1c44949Sopenharmony_ci        std::copy(std::begin(temp.formattedNumber), std::end(temp.formattedNumber),
420e1c44949Sopenharmony_ci            std::begin(formattedNumber));
421e1c44949Sopenharmony_ci        std::copy(std::begin(temp.numberLocation), std::end(temp.numberLocation),
422e1c44949Sopenharmony_ci            std::begin(numberLocation));
423e1c44949Sopenharmony_ci        callType = temp.callType;
424e1c44949Sopenharmony_ci        callBeginTime = temp.callBeginTime;
425e1c44949Sopenharmony_ci        callCreateTime = temp.callCreateTime;
426e1c44949Sopenharmony_ci        callEndTime = temp.callEndTime;
427e1c44949Sopenharmony_ci        ringDuration = temp.ringDuration;
428e1c44949Sopenharmony_ci        callDuration = temp.callDuration;
429e1c44949Sopenharmony_ci        directionType = temp.directionType;
430e1c44949Sopenharmony_ci        answerType = temp.answerType;
431e1c44949Sopenharmony_ci        countryCode = temp.countryCode;
432e1c44949Sopenharmony_ci        slotId = temp.slotId;
433e1c44949Sopenharmony_ci        videoState = temp.videoState;
434e1c44949Sopenharmony_ci        features = temp.features;
435e1c44949Sopenharmony_ci        numberMarkInfo.markType = temp.numberMarkInfo.markType;
436e1c44949Sopenharmony_ci        std::copy(std::begin(temp.numberMarkInfo.markContent), std::end(temp.numberMarkInfo.markContent),
437e1c44949Sopenharmony_ci            std::begin(numberMarkInfo.markContent));
438e1c44949Sopenharmony_ci        numberMarkInfo.markCount = temp.numberMarkInfo.markCount;
439e1c44949Sopenharmony_ci        std::copy(std::begin(temp.numberMarkInfo.markSource), std::end(temp.numberMarkInfo.markSource),
440e1c44949Sopenharmony_ci            std::begin(numberMarkInfo.markSource));
441e1c44949Sopenharmony_ci        numberMarkInfo.isCloud = temp.numberMarkInfo.isCloud;
442e1c44949Sopenharmony_ci        std::copy(std::begin(temp.numberMarkInfo.markDetails), std::end(temp.numberMarkInfo.markDetails),
443e1c44949Sopenharmony_ci            std::begin(numberMarkInfo.markDetails));
444e1c44949Sopenharmony_ci        blockReason = temp.blockReason;
445e1c44949Sopenharmony_ci        celiaCallType = temp.celiaCallType;
446e1c44949Sopenharmony_ci        return *this;
447e1c44949Sopenharmony_ci    }
448e1c44949Sopenharmony_ci};
449e1c44949Sopenharmony_ci
450e1c44949Sopenharmony_ci/**
451e1c44949Sopenharmony_ci * @brief Indicates detail information of a call.
452e1c44949Sopenharmony_ci */
453e1c44949Sopenharmony_cistruct CallDetailInfo {
454e1c44949Sopenharmony_ci    /**
455e1c44949Sopenharmony_ci     * Indicates the call index.
456e1c44949Sopenharmony_ci     */
457e1c44949Sopenharmony_ci    int32_t index = 0;
458e1c44949Sopenharmony_ci    /**
459e1c44949Sopenharmony_ci     * Indicates the call phone number.
460e1c44949Sopenharmony_ci     */
461e1c44949Sopenharmony_ci    char phoneNum[kMaxNumberLen + 1] = { 0 };
462e1c44949Sopenharmony_ci    /**
463e1c44949Sopenharmony_ci     * Indicates the bundle name.
464e1c44949Sopenharmony_ci     */
465e1c44949Sopenharmony_ci    char bundleName[kMaxBundleNameLen + 1] = { 0 };
466e1c44949Sopenharmony_ci    /**
467e1c44949Sopenharmony_ci     * Indicates the account id.
468e1c44949Sopenharmony_ci     */
469e1c44949Sopenharmony_ci    int32_t accountId = 0;
470e1c44949Sopenharmony_ci    /**
471e1c44949Sopenharmony_ci     * Indicates the call type, CS, IMS, ERROR
472e1c44949Sopenharmony_ci     */
473e1c44949Sopenharmony_ci    CallType callType = CallType::TYPE_ERR_CALL;
474e1c44949Sopenharmony_ci    /**
475e1c44949Sopenharmony_ci     * Indicates the call video state, 0: audio 1:video.
476e1c44949Sopenharmony_ci     */
477e1c44949Sopenharmony_ci    VideoStateType callMode = VideoStateType::TYPE_VOICE;
478e1c44949Sopenharmony_ci    /**
479e1c44949Sopenharmony_ci     * Indicates the call status.
480e1c44949Sopenharmony_ci     */
481e1c44949Sopenharmony_ci    TelCallState state = TelCallState::CALL_STATUS_UNKNOWN;
482e1c44949Sopenharmony_ci    /**
483e1c44949Sopenharmony_ci     * Indicates the voice domain. 0: CS, 1: IMS
484e1c44949Sopenharmony_ci     */
485e1c44949Sopenharmony_ci    int32_t voiceDomain = 0;
486e1c44949Sopenharmony_ci    /**
487e1c44949Sopenharmony_ci     * Indicates the Multi-party call status:
488e1c44949Sopenharmony_ci     * 0: not a multi-party(conference) call
489e1c44949Sopenharmony_ci     * 1: a multi-party(conference) call
490e1c44949Sopenharmony_ci     */
491e1c44949Sopenharmony_ci    int32_t mpty = 0;
492e1c44949Sopenharmony_ci    /**
493e1c44949Sopenharmony_ci     * Indicates the color tone type.
494e1c44949Sopenharmony_ci     */
495e1c44949Sopenharmony_ci    int32_t crsType = 0;
496e1c44949Sopenharmony_ci    /**
497e1c44949Sopenharmony_ci     * Indicates the initial type of this call.
498e1c44949Sopenharmony_ci     */
499e1c44949Sopenharmony_ci    int32_t originalCallType = 0;
500e1c44949Sopenharmony_ci    /**
501e1c44949Sopenharmony_ci     * Indicates the VoIP call specific information
502e1c44949Sopenharmony_ci     */
503e1c44949Sopenharmony_ci    VoipCallReportInfo voipCallInfo;
504e1c44949Sopenharmony_ci
505e1c44949Sopenharmony_ci    CallDetailInfo() {}
506e1c44949Sopenharmony_ci
507e1c44949Sopenharmony_ci    CallDetailInfo(const CallDetailInfo &temp)
508e1c44949Sopenharmony_ci    {
509e1c44949Sopenharmony_ci        *this = temp;
510e1c44949Sopenharmony_ci    }
511e1c44949Sopenharmony_ci
512e1c44949Sopenharmony_ci    CallDetailInfo &operator=(const CallDetailInfo &temp)
513e1c44949Sopenharmony_ci    {
514e1c44949Sopenharmony_ci        index = temp.index;
515e1c44949Sopenharmony_ci        std::copy(std::begin(temp.phoneNum), std::end(temp.phoneNum), std::begin(phoneNum));
516e1c44949Sopenharmony_ci        std::copy(std::begin(temp.bundleName), std::end(temp.bundleName), std::begin(bundleName));
517e1c44949Sopenharmony_ci        accountId = temp.accountId;
518e1c44949Sopenharmony_ci        callType = temp.callType;
519e1c44949Sopenharmony_ci        callMode = temp.callMode;
520e1c44949Sopenharmony_ci        state = temp.state;
521e1c44949Sopenharmony_ci        voiceDomain = temp.voiceDomain;
522e1c44949Sopenharmony_ci        mpty = temp.mpty;
523e1c44949Sopenharmony_ci        crsType = temp.crsType;
524e1c44949Sopenharmony_ci        originalCallType = temp.originalCallType;
525e1c44949Sopenharmony_ci        voipCallInfo.voipCallId = temp.voipCallInfo.voipCallId;
526e1c44949Sopenharmony_ci        voipCallInfo.extensionId = temp.voipCallInfo.extensionId;
527e1c44949Sopenharmony_ci        voipCallInfo.userName = temp.voipCallInfo.userName;
528e1c44949Sopenharmony_ci        (voipCallInfo.userProfile).assign(
529e1c44949Sopenharmony_ci            (temp.voipCallInfo.userProfile).begin(), (temp.voipCallInfo.userProfile).end());
530e1c44949Sopenharmony_ci        voipCallInfo.abilityName = temp.voipCallInfo.abilityName;
531e1c44949Sopenharmony_ci        voipCallInfo.voipBundleName = temp.voipCallInfo.voipBundleName;
532e1c44949Sopenharmony_ci        voipCallInfo.showBannerForIncomingCall = temp.voipCallInfo.showBannerForIncomingCall;
533e1c44949Sopenharmony_ci        voipCallInfo.isConferenceCall = temp.voipCallInfo.isConferenceCall;
534e1c44949Sopenharmony_ci        voipCallInfo.isVoiceAnswerSupported = temp.voipCallInfo.isVoiceAnswerSupported;
535e1c44949Sopenharmony_ci        voipCallInfo.hasMicPermission = temp.voipCallInfo.hasMicPermission;
536e1c44949Sopenharmony_ci        voipCallInfo.uid = temp.voipCallInfo.uid;
537e1c44949Sopenharmony_ci        return *this;
538e1c44949Sopenharmony_ci    }
539e1c44949Sopenharmony_ci};
540e1c44949Sopenharmony_ci
541e1c44949Sopenharmony_ci/**
542e1c44949Sopenharmony_ci * @brief Indicates detail information of some calls.
543e1c44949Sopenharmony_ci */
544e1c44949Sopenharmony_cistruct CallDetailsInfo {
545e1c44949Sopenharmony_ci    /**
546e1c44949Sopenharmony_ci     * Indicates a CallDetailInfo list. {@link CallDetailInfo}
547e1c44949Sopenharmony_ci     */
548e1c44949Sopenharmony_ci    std::vector<CallDetailInfo> callVec {};
549e1c44949Sopenharmony_ci    /**
550e1c44949Sopenharmony_ci     * Indicates the slot id.
551e1c44949Sopenharmony_ci     */
552e1c44949Sopenharmony_ci    int32_t slotId = 0;
553e1c44949Sopenharmony_ci    /**
554e1c44949Sopenharmony_ci     * Indicates the bundle name.
555e1c44949Sopenharmony_ci     */
556e1c44949Sopenharmony_ci    char bundleName[kMaxBundleNameLen + 1] = { 0 };
557e1c44949Sopenharmony_ci};
558e1c44949Sopenharmony_ci
559e1c44949Sopenharmony_ci/**
560e1c44949Sopenharmony_ci * @brief Indicates the type of call transfer setting.
561e1c44949Sopenharmony_ci *
562e1c44949Sopenharmony_ci * 27007-430_2001 7.11	Call forwarding number and conditions +CCFC
563e1c44949Sopenharmony_ci * 3GPP TS 22.082 [4]
564e1c44949Sopenharmony_ci * <mode>:
565e1c44949Sopenharmony_ci * 0	disable
566e1c44949Sopenharmony_ci * 1	enable
567e1c44949Sopenharmony_ci * 3	registration
568e1c44949Sopenharmony_ci * 4	erasure
569e1c44949Sopenharmony_ci */
570e1c44949Sopenharmony_cienum class CallTransferSettingType {
571e1c44949Sopenharmony_ci    /**
572e1c44949Sopenharmony_ci     * Indicates disable the call transfer.
573e1c44949Sopenharmony_ci     */
574e1c44949Sopenharmony_ci    CALL_TRANSFER_DISABLE = 0,
575e1c44949Sopenharmony_ci    /**
576e1c44949Sopenharmony_ci     * Indicates enable the call transfer.
577e1c44949Sopenharmony_ci     */
578e1c44949Sopenharmony_ci    CALL_TRANSFER_ENABLE = 1,
579e1c44949Sopenharmony_ci    /**
580e1c44949Sopenharmony_ci     * Indicates register the call transfer.
581e1c44949Sopenharmony_ci     */
582e1c44949Sopenharmony_ci    CALL_TRANSFER_REGISTRATION = 3,
583e1c44949Sopenharmony_ci    /**
584e1c44949Sopenharmony_ci     * Indicates erasure the call transfer.
585e1c44949Sopenharmony_ci     */
586e1c44949Sopenharmony_ci    CALL_TRANSFER_ERASURE = 4,
587e1c44949Sopenharmony_ci};
588e1c44949Sopenharmony_ci
589e1c44949Sopenharmony_ci/**
590e1c44949Sopenharmony_ci * @brief Indicates the Call forwarding type
591e1c44949Sopenharmony_ci *
592e1c44949Sopenharmony_ci * 27007-430_2001 7.11	Call forwarding number and conditions +CCFC
593e1c44949Sopenharmony_ci * 3GPP TS 22.082 [4]
594e1c44949Sopenharmony_ci * <reason>:
595e1c44949Sopenharmony_ci * 0	unconditional
596e1c44949Sopenharmony_ci * 1	mobile busy
597e1c44949Sopenharmony_ci * 2	no reply
598e1c44949Sopenharmony_ci * 3	not reachable
599e1c44949Sopenharmony_ci */
600e1c44949Sopenharmony_cienum class CallTransferType {
601e1c44949Sopenharmony_ci    /**
602e1c44949Sopenharmony_ci     * Indicates transfer the call unconditionally.
603e1c44949Sopenharmony_ci     */
604e1c44949Sopenharmony_ci    TRANSFER_TYPE_UNCONDITIONAL = 0,
605e1c44949Sopenharmony_ci    /**
606e1c44949Sopenharmony_ci     * Indicates transfer the call when busy.
607e1c44949Sopenharmony_ci     */
608e1c44949Sopenharmony_ci    TRANSFER_TYPE_BUSY = 1,
609e1c44949Sopenharmony_ci    /**
610e1c44949Sopenharmony_ci     * Indicates transfer the call when no reply.
611e1c44949Sopenharmony_ci     */
612e1c44949Sopenharmony_ci    TRANSFER_TYPE_NO_REPLY = 2,
613e1c44949Sopenharmony_ci    /**
614e1c44949Sopenharmony_ci     * Indicates transfer the call when unreachable.
615e1c44949Sopenharmony_ci     */
616e1c44949Sopenharmony_ci    TRANSFER_TYPE_NOT_REACHABLE = 3,
617e1c44949Sopenharmony_ci};
618e1c44949Sopenharmony_ci
619e1c44949Sopenharmony_ci/**
620e1c44949Sopenharmony_ci * @brief Indicates the information of call transfer.
621e1c44949Sopenharmony_ci */
622e1c44949Sopenharmony_cistruct CallTransferInfo {
623e1c44949Sopenharmony_ci    /**
624e1c44949Sopenharmony_ci     * Indication the phone number which will forward to.
625e1c44949Sopenharmony_ci     */
626e1c44949Sopenharmony_ci    char transferNum[kMaxNumberLen + 1] = { 0 };
627e1c44949Sopenharmony_ci    /**
628e1c44949Sopenharmony_ci     * Indicates the type of call transfer setting. {@link CallTransferSettingType}
629e1c44949Sopenharmony_ci     */
630e1c44949Sopenharmony_ci    CallTransferSettingType settingType = CallTransferSettingType::CALL_TRANSFER_DISABLE;
631e1c44949Sopenharmony_ci    /**
632e1c44949Sopenharmony_ci     * Indicates the Call forwarding type. {@link CallTransferType}
633e1c44949Sopenharmony_ci     */
634e1c44949Sopenharmony_ci    CallTransferType type = CallTransferType::TRANSFER_TYPE_UNCONDITIONAL;
635e1c44949Sopenharmony_ci    /**
636e1c44949Sopenharmony_ci     * Start time hours.
637e1c44949Sopenharmony_ci     */
638e1c44949Sopenharmony_ci    int32_t startHour = 0;
639e1c44949Sopenharmony_ci    /**
640e1c44949Sopenharmony_ci     * Start time minutes.
641e1c44949Sopenharmony_ci     */
642e1c44949Sopenharmony_ci    int32_t startMinute = 0;
643e1c44949Sopenharmony_ci    /**
644e1c44949Sopenharmony_ci     * End time hours.
645e1c44949Sopenharmony_ci     */
646e1c44949Sopenharmony_ci    int32_t endHour = 0;
647e1c44949Sopenharmony_ci    /**
648e1c44949Sopenharmony_ci     * End time minutes.
649e1c44949Sopenharmony_ci     */
650e1c44949Sopenharmony_ci    int32_t endMinute = 0;
651e1c44949Sopenharmony_ci};
652e1c44949Sopenharmony_ci
653e1c44949Sopenharmony_ci/**
654e1c44949Sopenharmony_ci * @brief Indicates the type of call restriction.
655e1c44949Sopenharmony_ci *
656e1c44949Sopenharmony_ci * 3GPP TS 22.030 V4.0.0 (2001-03)
657e1c44949Sopenharmony_ci * 3GPP TS 22.088 V4.0.0 (2001-03)
658e1c44949Sopenharmony_ci */
659e1c44949Sopenharmony_cienum class CallRestrictionType {
660e1c44949Sopenharmony_ci    /**
661e1c44949Sopenharmony_ci     * Indicates restrict all incoming calls.
662e1c44949Sopenharmony_ci     */
663e1c44949Sopenharmony_ci    RESTRICTION_TYPE_ALL_INCOMING = 0,
664e1c44949Sopenharmony_ci    /**
665e1c44949Sopenharmony_ci     * Indicates restrict all outgoing calls.
666e1c44949Sopenharmony_ci     */
667e1c44949Sopenharmony_ci    RESTRICTION_TYPE_ALL_OUTGOING,
668e1c44949Sopenharmony_ci    /**
669e1c44949Sopenharmony_ci     * Indicates restrict international calls.
670e1c44949Sopenharmony_ci     */
671e1c44949Sopenharmony_ci    RESTRICTION_TYPE_INTERNATIONAL,
672e1c44949Sopenharmony_ci    /**
673e1c44949Sopenharmony_ci     * Indicates restrict international roaming calls.
674e1c44949Sopenharmony_ci     */
675e1c44949Sopenharmony_ci    RESTRICTION_TYPE_INTERNATIONAL_EXCLUDING_HOME,
676e1c44949Sopenharmony_ci    /**
677e1c44949Sopenharmony_ci     * Indicates restrict roaming calls.
678e1c44949Sopenharmony_ci     */
679e1c44949Sopenharmony_ci    RESTRICTION_TYPE_ROAMING_INCOMING,
680e1c44949Sopenharmony_ci    /**
681e1c44949Sopenharmony_ci     * Indicates restrict all calls.
682e1c44949Sopenharmony_ci     */
683e1c44949Sopenharmony_ci    RESTRICTION_TYPE_ALL_CALLS,
684e1c44949Sopenharmony_ci    /**
685e1c44949Sopenharmony_ci     * Indicates restrict all outgoing services.
686e1c44949Sopenharmony_ci     */
687e1c44949Sopenharmony_ci    RESTRICTION_TYPE_OUTGOING_SERVICES,
688e1c44949Sopenharmony_ci    /**
689e1c44949Sopenharmony_ci     * Indicates restrict all incoming services.
690e1c44949Sopenharmony_ci     */
691e1c44949Sopenharmony_ci    RESTRICTION_TYPE_INCOMING_SERVICES,
692e1c44949Sopenharmony_ci};
693e1c44949Sopenharmony_ci
694e1c44949Sopenharmony_ci/**
695e1c44949Sopenharmony_ci * @brief Indicates the mode of call restriction.
696e1c44949Sopenharmony_ci *
697e1c44949Sopenharmony_ci * 3GPP TS 22.088 V4.0.0 (2001-03)
698e1c44949Sopenharmony_ci */
699e1c44949Sopenharmony_cienum class CallRestrictionMode {
700e1c44949Sopenharmony_ci    /**
701e1c44949Sopenharmony_ci     * Indicates call restriction is deactivated.
702e1c44949Sopenharmony_ci     */
703e1c44949Sopenharmony_ci    RESTRICTION_MODE_DEACTIVATION = 0,
704e1c44949Sopenharmony_ci    /**
705e1c44949Sopenharmony_ci     * Indicates call restriction is activated.
706e1c44949Sopenharmony_ci     */
707e1c44949Sopenharmony_ci    RESTRICTION_MODE_ACTIVATION = 1,
708e1c44949Sopenharmony_ci};
709e1c44949Sopenharmony_ci
710e1c44949Sopenharmony_ci/**
711e1c44949Sopenharmony_ci * @brief Indicates the information of call restriction.
712e1c44949Sopenharmony_ci */
713e1c44949Sopenharmony_cistruct CallRestrictionInfo {
714e1c44949Sopenharmony_ci    /**
715e1c44949Sopenharmony_ci     * Indicates the password required to set call restrictions.
716e1c44949Sopenharmony_ci     */
717e1c44949Sopenharmony_ci    char password[kMaxNumberLen + 1] = { 0 };
718e1c44949Sopenharmony_ci    /**
719e1c44949Sopenharmony_ci     * Indicates the type of call restriction.
720e1c44949Sopenharmony_ci     */
721e1c44949Sopenharmony_ci    CallRestrictionType fac = CallRestrictionType::RESTRICTION_TYPE_ALL_INCOMING;
722e1c44949Sopenharmony_ci    /**
723e1c44949Sopenharmony_ci     * Indicates the mode of call restriction.
724e1c44949Sopenharmony_ci     */
725e1c44949Sopenharmony_ci    CallRestrictionMode mode = CallRestrictionMode::RESTRICTION_MODE_DEACTIVATION;
726e1c44949Sopenharmony_ci};
727e1c44949Sopenharmony_ci} // namespace Telephony
728e1c44949Sopenharmony_ci} // namespace OHOS
729e1c44949Sopenharmony_ci#endif // CALL_MANAGER_INFO_H