1e1c44949Sopenharmony_ci/*
2e1c44949Sopenharmony_ci * Copyright (C) 2021 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#include "cs_call.h"
17e1c44949Sopenharmony_ci
18e1c44949Sopenharmony_ci#include "call_manager_errors.h"
19e1c44949Sopenharmony_ci#include "telephony_log_wrapper.h"
20e1c44949Sopenharmony_ci
21e1c44949Sopenharmony_cinamespace OHOS {
22e1c44949Sopenharmony_cinamespace Telephony {
23e1c44949Sopenharmony_ciCSCall::CSCall(DialParaInfo &info) : CarrierCall(info) {}
24e1c44949Sopenharmony_ci
25e1c44949Sopenharmony_ciCSCall::CSCall(DialParaInfo &info, AppExecFwk::PacMap &extras) : CarrierCall(info, extras) {}
26e1c44949Sopenharmony_ci
27e1c44949Sopenharmony_ciCSCall::~CSCall() {}
28e1c44949Sopenharmony_ci
29e1c44949Sopenharmony_ciint32_t CSCall::DialingProcess()
30e1c44949Sopenharmony_ci{
31e1c44949Sopenharmony_ci    return CarrierDialingProcess();
32e1c44949Sopenharmony_ci}
33e1c44949Sopenharmony_ci
34e1c44949Sopenharmony_ciint32_t CSCall::AnswerCall(int32_t videoState)
35e1c44949Sopenharmony_ci{
36e1c44949Sopenharmony_ci    return CarrierAnswerCall(videoState);
37e1c44949Sopenharmony_ci}
38e1c44949Sopenharmony_ci
39e1c44949Sopenharmony_ciint32_t CSCall::RejectCall()
40e1c44949Sopenharmony_ci{
41e1c44949Sopenharmony_ci    return CarrierRejectCall();
42e1c44949Sopenharmony_ci}
43e1c44949Sopenharmony_ci
44e1c44949Sopenharmony_ciint32_t CSCall::HangUpCall()
45e1c44949Sopenharmony_ci{
46e1c44949Sopenharmony_ci    return CarrierHangUpCall();
47e1c44949Sopenharmony_ci}
48e1c44949Sopenharmony_ci
49e1c44949Sopenharmony_ciint32_t CSCall::HoldCall()
50e1c44949Sopenharmony_ci{
51e1c44949Sopenharmony_ci    return CarrierHoldCall();
52e1c44949Sopenharmony_ci}
53e1c44949Sopenharmony_ci
54e1c44949Sopenharmony_ciint32_t CSCall::UnHoldCall()
55e1c44949Sopenharmony_ci{
56e1c44949Sopenharmony_ci    return CarrierUnHoldCall();
57e1c44949Sopenharmony_ci}
58e1c44949Sopenharmony_ci
59e1c44949Sopenharmony_ciint32_t CSCall::SwitchCall()
60e1c44949Sopenharmony_ci{
61e1c44949Sopenharmony_ci    return CarrierSwitchCall();
62e1c44949Sopenharmony_ci}
63e1c44949Sopenharmony_ci
64e1c44949Sopenharmony_civoid CSCall::GetCallAttributeInfo(CallAttributeInfo &info)
65e1c44949Sopenharmony_ci{
66e1c44949Sopenharmony_ci    GetCallAttributeCarrierInfo(info);
67e1c44949Sopenharmony_ci}
68e1c44949Sopenharmony_ci
69e1c44949Sopenharmony_ciint32_t CSCall::SetMute(int32_t mute, int32_t slotId)
70e1c44949Sopenharmony_ci{
71e1c44949Sopenharmony_ci    return CarrierSetMute(mute, slotId);
72e1c44949Sopenharmony_ci}
73e1c44949Sopenharmony_ci
74e1c44949Sopenharmony_ciint32_t CSCall::CombineConference()
75e1c44949Sopenharmony_ci{
76e1c44949Sopenharmony_ci    int32_t ret = DelayedSingleton<CsConference>::GetInstance()->SetMainCall(GetCallID());
77e1c44949Sopenharmony_ci    if (ret != TELEPHONY_SUCCESS) {
78e1c44949Sopenharmony_ci        return ret;
79e1c44949Sopenharmony_ci    }
80e1c44949Sopenharmony_ci    ConferenceState currentState = DelayedSingleton<CsConference>::GetInstance()->GetConferenceState();
81e1c44949Sopenharmony_ci    if (currentState == ConferenceState::CONFERENCE_STATE_CREATING) {
82e1c44949Sopenharmony_ci        TELEPHONY_LOGE("skip combine, a process of combine already exsists");
83e1c44949Sopenharmony_ci        return TELEPHONY_SUCCESS;
84e1c44949Sopenharmony_ci    }
85e1c44949Sopenharmony_ci    DelayedSingleton<CsConference>::GetInstance()->SetConferenceState(ConferenceState::CONFERENCE_STATE_CREATING);
86e1c44949Sopenharmony_ci    return CarrierCombineConference();
87e1c44949Sopenharmony_ci}
88e1c44949Sopenharmony_ci
89e1c44949Sopenharmony_civoid CSCall::HandleCombineConferenceFailEvent()
90e1c44949Sopenharmony_ci{
91e1c44949Sopenharmony_ci    std::set<std::int32_t> subCallIdList = DelayedSingleton<CsConference>::GetInstance()->GetSubCallIdList();
92e1c44949Sopenharmony_ci    if (subCallIdList.empty()) {
93e1c44949Sopenharmony_ci        DelayedSingleton<CsConference>::GetInstance()->SetMainCall(ERR_ID);
94e1c44949Sopenharmony_ci    } else {
95e1c44949Sopenharmony_ci        DelayedSingleton<CsConference>::GetInstance()->SetMainCall(*subCallIdList.begin());
96e1c44949Sopenharmony_ci    }
97e1c44949Sopenharmony_ci    ConferenceState oldState = DelayedSingleton<CsConference>::GetInstance()->GetOldConferenceState();
98e1c44949Sopenharmony_ci    DelayedSingleton<CsConference>::GetInstance()->SetConferenceState(oldState);
99e1c44949Sopenharmony_ci}
100e1c44949Sopenharmony_ci
101e1c44949Sopenharmony_ciint32_t CSCall::SeparateConference()
102e1c44949Sopenharmony_ci{
103e1c44949Sopenharmony_ci    return CarrierSeparateConference();
104e1c44949Sopenharmony_ci}
105e1c44949Sopenharmony_ci
106e1c44949Sopenharmony_ciint32_t CSCall::KickOutFromConference()
107e1c44949Sopenharmony_ci{
108e1c44949Sopenharmony_ci    return CarrierKickOutFromConference();
109e1c44949Sopenharmony_ci}
110e1c44949Sopenharmony_ci
111e1c44949Sopenharmony_ciint32_t CSCall::CanCombineConference()
112e1c44949Sopenharmony_ci{
113e1c44949Sopenharmony_ci    int32_t ret = IsSupportConferenceable();
114e1c44949Sopenharmony_ci    if (ret != TELEPHONY_SUCCESS) {
115e1c44949Sopenharmony_ci        TELEPHONY_LOGE("call unsupported conference, error%{public}d", ret);
116e1c44949Sopenharmony_ci        return ret;
117e1c44949Sopenharmony_ci    }
118e1c44949Sopenharmony_ci    return DelayedSingleton<CsConference>::GetInstance()->CanCombineConference();
119e1c44949Sopenharmony_ci}
120e1c44949Sopenharmony_ci
121e1c44949Sopenharmony_ciint32_t CSCall::CanSeparateConference()
122e1c44949Sopenharmony_ci{
123e1c44949Sopenharmony_ci    return DelayedSingleton<CsConference>::GetInstance()->CanSeparateConference();
124e1c44949Sopenharmony_ci}
125e1c44949Sopenharmony_ci
126e1c44949Sopenharmony_ciint32_t CSCall::CanKickOutFromConference()
127e1c44949Sopenharmony_ci{
128e1c44949Sopenharmony_ci    return DelayedSingleton<CsConference>::GetInstance()->CanKickOutFromConference();
129e1c44949Sopenharmony_ci}
130e1c44949Sopenharmony_ci
131e1c44949Sopenharmony_ciint32_t CSCall::LaunchConference()
132e1c44949Sopenharmony_ci{
133e1c44949Sopenharmony_ci    int32_t ret = DelayedSingleton<CsConference>::GetInstance()->JoinToConference(GetCallID());
134e1c44949Sopenharmony_ci    if (ret == TELEPHONY_SUCCESS) {
135e1c44949Sopenharmony_ci        SetTelConferenceState(TelConferenceState::TEL_CONFERENCE_ACTIVE);
136e1c44949Sopenharmony_ci    }
137e1c44949Sopenharmony_ci    return ret;
138e1c44949Sopenharmony_ci}
139e1c44949Sopenharmony_ci
140e1c44949Sopenharmony_ciint32_t CSCall::ExitConference()
141e1c44949Sopenharmony_ci{
142e1c44949Sopenharmony_ci    int32_t ret = DelayedSingleton<CsConference>::GetInstance()->LeaveFromConference(GetCallID());
143e1c44949Sopenharmony_ci    if (ret == TELEPHONY_SUCCESS) {
144e1c44949Sopenharmony_ci        SetTelConferenceState(TelConferenceState::TEL_CONFERENCE_IDLE);
145e1c44949Sopenharmony_ci    }
146e1c44949Sopenharmony_ci    return ret;
147e1c44949Sopenharmony_ci}
148e1c44949Sopenharmony_ci
149e1c44949Sopenharmony_ciint32_t CSCall::HoldConference()
150e1c44949Sopenharmony_ci{
151e1c44949Sopenharmony_ci    int32_t ret = DelayedSingleton<CsConference>::GetInstance()->HoldConference(GetCallID());
152e1c44949Sopenharmony_ci    if (ret == TELEPHONY_SUCCESS) {
153e1c44949Sopenharmony_ci        SetTelConferenceState(TelConferenceState::TEL_CONFERENCE_HOLDING);
154e1c44949Sopenharmony_ci    }
155e1c44949Sopenharmony_ci    return ret;
156e1c44949Sopenharmony_ci}
157e1c44949Sopenharmony_ci
158e1c44949Sopenharmony_ciint32_t CSCall::GetMainCallId(int32_t &mainCallId)
159e1c44949Sopenharmony_ci{
160e1c44949Sopenharmony_ci    mainCallId = DelayedSingleton<CsConference>::GetInstance()->GetMainCall();
161e1c44949Sopenharmony_ci    return TELEPHONY_SUCCESS;
162e1c44949Sopenharmony_ci}
163e1c44949Sopenharmony_ci
164e1c44949Sopenharmony_ciint32_t CSCall::GetSubCallIdList(std::vector<std::u16string> &callIdList)
165e1c44949Sopenharmony_ci{
166e1c44949Sopenharmony_ci    return DelayedSingleton<CsConference>::GetInstance()->GetSubCallIdList(GetCallID(), callIdList);
167e1c44949Sopenharmony_ci}
168e1c44949Sopenharmony_ci
169e1c44949Sopenharmony_ciint32_t CSCall::GetCallIdListForConference(std::vector<std::u16string> &callIdList)
170e1c44949Sopenharmony_ci{
171e1c44949Sopenharmony_ci    return DelayedSingleton<CsConference>::GetInstance()->GetCallIdListForConference(GetCallID(), callIdList);
172e1c44949Sopenharmony_ci}
173e1c44949Sopenharmony_ci
174e1c44949Sopenharmony_ciint32_t CSCall::IsSupportConferenceable()
175e1c44949Sopenharmony_ci{
176e1c44949Sopenharmony_ci    // get from configure file
177e1c44949Sopenharmony_ci#ifdef ABILIT_CONFIG_SUPPORT
178e1c44949Sopenharmony_ci    bool carrierSupport = GetCarrierConfig(CS_SUPPORT_CONFERENCE);
179e1c44949Sopenharmony_ci    if (!carrierSupport) {
180e1c44949Sopenharmony_ci        return TELEPHONY_CONFERENCE_CARRIER_NOT_SUPPORT;
181e1c44949Sopenharmony_ci    }
182e1c44949Sopenharmony_ci#endif
183e1c44949Sopenharmony_ci    return CarrierCall::IsSupportConferenceable();
184e1c44949Sopenharmony_ci}
185e1c44949Sopenharmony_ci} // namespace Telephony
186e1c44949Sopenharmony_ci} // namespace OHOS
187