1 /*
2 * Copyright (C) 2021-2022 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 #include "config_request.h"
17
18 #include "call_manager_errors.h"
19 #include "cellular_call_service.h"
20 #include "ims_call_client.h"
21 #include "radio_event.h"
22
23 namespace OHOS {
24 namespace Telephony {
SetDomainPreferenceModeRequest(int32_t slotId,int32_t mode)25 int32_t ConfigRequest::SetDomainPreferenceModeRequest(int32_t slotId, int32_t mode)
26 {
27 if (moduleUtils_.NeedCallImsService()) {
28 TELEPHONY_LOGI("SetDomainPreferenceModeRequest, call ims service");
29 if (DelayedSingleton<ImsCallClient>::GetInstance() == nullptr) {
30 TELEPHONY_LOGE("ImsCallClient is nullptr.");
31 return CALL_ERR_RESOURCE_UNAVAILABLE;
32 }
33 return DelayedSingleton<ImsCallClient>::GetInstance()->SetDomainPreferenceMode(slotId, mode);
34 }
35
36 TELEPHONY_LOGI("SetDomainPreferenceModeRequest, ims vendor service does not exist.");
37 auto handle = DelayedSingleton<CellularCallService>::GetInstance()->GetHandler(slotId);
38 if (handle == nullptr) {
39 TELEPHONY_LOGE("SetDomainPreferenceModeRequest return, error type: handle is nullptr.");
40 return CALL_ERR_RESOURCE_UNAVAILABLE;
41 }
42 CoreManagerInner::GetInstance().SetCallPreferenceMode(
43 slotId, RadioEvent::RADIO_SET_CALL_PREFERENCE_MODE, mode, handle);
44 return TELEPHONY_SUCCESS;
45 }
46
GetDomainPreferenceModeRequest(int32_t slotId)47 int32_t ConfigRequest::GetDomainPreferenceModeRequest(int32_t slotId)
48 {
49 if (moduleUtils_.NeedCallImsService()) {
50 TELEPHONY_LOGI("GetDomainPreferenceModeRequest, call ims service");
51 if (DelayedSingleton<ImsCallClient>::GetInstance() == nullptr) {
52 TELEPHONY_LOGE("ImsCallClient is nullptr.");
53 return CALL_ERR_RESOURCE_UNAVAILABLE;
54 }
55 return DelayedSingleton<ImsCallClient>::GetInstance()->GetDomainPreferenceMode(slotId);
56 }
57
58 TELEPHONY_LOGI("GetDomainPreferenceModeRequest, ims vendor service does not exist.");
59 auto handle = DelayedSingleton<CellularCallService>::GetInstance()->GetHandler(slotId);
60 if (handle == nullptr) {
61 TELEPHONY_LOGE("GetDomainPreferenceModeRequest return, error type: handle is nullptr.");
62 return CALL_ERR_RESOURCE_UNAVAILABLE;
63 }
64 CoreManagerInner::GetInstance().GetCallPreferenceMode(slotId, RadioEvent::RADIO_GET_CALL_PREFERENCE_MODE, handle);
65 return TELEPHONY_SUCCESS;
66 }
67
SetImsSwitchStatusRequest(int32_t slotId,bool active)68 int32_t ConfigRequest::SetImsSwitchStatusRequest(int32_t slotId, bool active)
69 {
70 auto imsCallClient = DelayedSingleton<ImsCallClient>::GetInstance();
71 if (imsCallClient == nullptr || imsCallClient->GetImsCallProxy() == nullptr) {
72 TELEPHONY_LOGE("ImsCallClient is nullptr or ims service SA not exists.");
73 return CALL_ERR_RESOURCE_UNAVAILABLE;
74 }
75 return imsCallClient->SetImsSwitchStatus(slotId, active);
76 }
77
GetImsSwitchStatusRequest(int32_t slotId)78 int32_t ConfigRequest::GetImsSwitchStatusRequest(int32_t slotId)
79 {
80 auto imsCallClient = DelayedSingleton<ImsCallClient>::GetInstance();
81 if (imsCallClient == nullptr || imsCallClient->GetImsCallProxy() == nullptr) {
82 TELEPHONY_LOGE("ImsCallClient is nullptr or ims service SA not exists.");
83 return CALL_ERR_RESOURCE_UNAVAILABLE;
84 }
85 return imsCallClient->GetImsSwitchStatus(slotId);
86 }
87
SetImsConfigRequest(ImsConfigItem item,const std::string & value)88 int32_t ConfigRequest::SetImsConfigRequest(ImsConfigItem item, const std::string &value)
89 {
90 auto imsCallClient = DelayedSingleton<ImsCallClient>::GetInstance();
91 if (imsCallClient == nullptr || imsCallClient->GetImsCallProxy() == nullptr) {
92 TELEPHONY_LOGE("ImsCallClient is nullptr or ims service SA not exists.");
93 return CALL_ERR_RESOURCE_UNAVAILABLE;
94 }
95 return imsCallClient->SetImsConfig(item, value);
96 }
97
SetImsConfigRequest(ImsConfigItem item,int32_t value)98 int32_t ConfigRequest::SetImsConfigRequest(ImsConfigItem item, int32_t value)
99 {
100 auto imsCallClient = DelayedSingleton<ImsCallClient>::GetInstance();
101 if (imsCallClient == nullptr || imsCallClient->GetImsCallProxy() == nullptr) {
102 TELEPHONY_LOGE("ImsCallClient is nullptr or ims service SA not exists.");
103 return CALL_ERR_RESOURCE_UNAVAILABLE;
104 }
105 return imsCallClient->SetImsConfig(item, value);
106 }
107
GetImsConfigRequest(ImsConfigItem item)108 int32_t ConfigRequest::GetImsConfigRequest(ImsConfigItem item)
109 {
110 auto imsCallClient = DelayedSingleton<ImsCallClient>::GetInstance();
111 if (imsCallClient == nullptr || imsCallClient->GetImsCallProxy() == nullptr) {
112 TELEPHONY_LOGE("ImsCallClient is nullptr or ims service SA not exists.");
113 return CALL_ERR_RESOURCE_UNAVAILABLE;
114 }
115 return imsCallClient->GetImsConfig(item);
116 }
117
SetImsFeatureValueRequest(FeatureType type,int32_t value)118 int32_t ConfigRequest::SetImsFeatureValueRequest(FeatureType type, int32_t value)
119 {
120 auto imsCallClient = DelayedSingleton<ImsCallClient>::GetInstance();
121 if (imsCallClient == nullptr || imsCallClient->GetImsCallProxy() == nullptr) {
122 TELEPHONY_LOGE("ImsCallClient is nullptr or ims service SA not exists.");
123 return CALL_ERR_RESOURCE_UNAVAILABLE;
124 }
125 return imsCallClient->SetImsFeatureValue(type, value);
126 }
127
GetImsFeatureValueRequest(FeatureType type,int32_t & value)128 int32_t ConfigRequest::GetImsFeatureValueRequest(FeatureType type, int32_t &value)
129 {
130 auto imsCallClient = DelayedSingleton<ImsCallClient>::GetInstance();
131 if (imsCallClient == nullptr || imsCallClient->GetImsCallProxy() == nullptr) {
132 TELEPHONY_LOGE("ImsCallClient is nullptr or ims service SA not exists.");
133 return CALL_ERR_RESOURCE_UNAVAILABLE;
134 }
135 return imsCallClient->GetImsFeatureValue(type, value);
136 }
137
CtrlCameraRequest(const std::u16string & cameraId,int32_t callingUid,int32_t callingPid)138 int32_t ConfigRequest::CtrlCameraRequest(const std::u16string &cameraId, int32_t callingUid, int32_t callingPid)
139 {
140 auto imsCallClient = DelayedSingleton<ImsCallClient>::GetInstance();
141 if (imsCallClient == nullptr || imsCallClient->GetImsCallProxy() == nullptr) {
142 TELEPHONY_LOGE("ImsCallClient is nullptr or ims service SA not exists.");
143 return CALL_ERR_RESOURCE_UNAVAILABLE;
144 }
145 return imsCallClient->CtrlCamera(cameraId, callingUid, callingPid);
146 }
147
SetPreviewWindowRequest(int32_t x,int32_t y,int32_t z,int32_t width,int32_t height)148 int32_t ConfigRequest::SetPreviewWindowRequest(int32_t x, int32_t y, int32_t z, int32_t width, int32_t height)
149 {
150 auto imsCallClient = DelayedSingleton<ImsCallClient>::GetInstance();
151 if (imsCallClient == nullptr || imsCallClient->GetImsCallProxy() == nullptr) {
152 TELEPHONY_LOGE("ImsCallClient is nullptr or ims service SA not exists.");
153 return CALL_ERR_RESOURCE_UNAVAILABLE;
154 }
155 return imsCallClient->SetPreviewWindow(x, y, z, width, height);
156 }
157
SetDisplayWindowRequest(int32_t x,int32_t y,int32_t z,int32_t width,int32_t height)158 int32_t ConfigRequest::SetDisplayWindowRequest(int32_t x, int32_t y, int32_t z, int32_t width, int32_t height)
159 {
160 auto imsCallClient = DelayedSingleton<ImsCallClient>::GetInstance();
161 if (imsCallClient == nullptr || imsCallClient->GetImsCallProxy() == nullptr) {
162 TELEPHONY_LOGE("ImsCallClient is nullptr or ims service SA not exists.");
163 return CALL_ERR_RESOURCE_UNAVAILABLE;
164 }
165 return imsCallClient->SetDisplayWindow(x, y, z, width, height);
166 }
167
SetCameraZoomRequest(float zoomRatio)168 int32_t ConfigRequest::SetCameraZoomRequest(float zoomRatio)
169 {
170 auto imsCallClient = DelayedSingleton<ImsCallClient>::GetInstance();
171 if (imsCallClient == nullptr || imsCallClient->GetImsCallProxy() == nullptr) {
172 TELEPHONY_LOGE("ImsCallClient is nullptr or ims service SA not exists.");
173 return CALL_ERR_RESOURCE_UNAVAILABLE;
174 }
175 return imsCallClient->SetCameraZoom(zoomRatio);
176 }
177
SetPauseImageRequest(const std::u16string & path)178 int32_t ConfigRequest::SetPauseImageRequest(const std::u16string &path)
179 {
180 auto imsCallClient = DelayedSingleton<ImsCallClient>::GetInstance();
181 if (imsCallClient == nullptr || imsCallClient->GetImsCallProxy() == nullptr) {
182 TELEPHONY_LOGE("ImsCallClient is nullptr or ims service SA not exists.");
183 return CALL_ERR_RESOURCE_UNAVAILABLE;
184 }
185 return imsCallClient->SetPauseImage(path);
186 }
187
SetDeviceDirectionRequest(int32_t rotation)188 int32_t ConfigRequest::SetDeviceDirectionRequest(int32_t rotation)
189 {
190 auto imsCallClient = DelayedSingleton<ImsCallClient>::GetInstance();
191 if (imsCallClient == nullptr || imsCallClient->GetImsCallProxy() == nullptr) {
192 TELEPHONY_LOGE("ImsCallClient is nullptr or ims service SA not exists.");
193 return CALL_ERR_RESOURCE_UNAVAILABLE;
194 }
195 return imsCallClient->SetDeviceDirection(rotation);
196 }
197
SetMuteRequest(int32_t slotId,int32_t mute)198 int32_t ConfigRequest::SetMuteRequest(int32_t slotId, int32_t mute)
199 {
200 if (moduleUtils_.NeedCallImsService()) {
201 TELEPHONY_LOGI("SetMuteRequest, call ims service");
202 if (DelayedSingleton<ImsCallClient>::GetInstance() == nullptr) {
203 TELEPHONY_LOGE("ImsCallClient is nullptr.");
204 return CALL_ERR_RESOURCE_UNAVAILABLE;
205 }
206 return DelayedSingleton<ImsCallClient>::GetInstance()->SetMute(slotId, mute);
207 }
208
209 TELEPHONY_LOGI("SetMuteRequest, ims vendor service does not exist.");
210 auto handle = DelayedSingleton<CellularCallService>::GetInstance()->GetHandler(slotId);
211 if (handle == nullptr) {
212 TELEPHONY_LOGE("SetMuteRequest return, error type: handle is nullptr.");
213 return CALL_ERR_RESOURCE_UNAVAILABLE;
214 }
215 CoreManagerInner::GetInstance().SetMute(slotId, RadioEvent::RADIO_SET_CMUT, mute, handle);
216 return TELEPHONY_SUCCESS;
217 }
218
GetMuteRequest(int32_t slotId)219 int32_t ConfigRequest::GetMuteRequest(int32_t slotId)
220 {
221 if (moduleUtils_.NeedCallImsService()) {
222 TELEPHONY_LOGI("GetMuteRequest, call ims service");
223 if (DelayedSingleton<ImsCallClient>::GetInstance() == nullptr) {
224 TELEPHONY_LOGE("ImsCallClient is nullptr.");
225 return CALL_ERR_RESOURCE_UNAVAILABLE;
226 }
227 return DelayedSingleton<ImsCallClient>::GetInstance()->GetMute(slotId);
228 }
229
230 TELEPHONY_LOGI("GetMuteRequest, ims vendor service does not exist.");
231 auto handle = DelayedSingleton<CellularCallService>::GetInstance()->GetHandler(slotId);
232 if (handle == nullptr) {
233 TELEPHONY_LOGE("GetMuteRequest return, error type: handle is nullptr.");
234 return CALL_ERR_RESOURCE_UNAVAILABLE;
235 }
236 CoreManagerInner::GetInstance().GetMute(slotId, RadioEvent::RADIO_GET_CMUT, handle);
237 return TELEPHONY_SUCCESS;
238 }
239
GetEmergencyCallListRequest(int32_t slotId)240 int32_t ConfigRequest::GetEmergencyCallListRequest(int32_t slotId)
241 {
242 auto handle = DelayedSingleton<CellularCallService>::GetInstance()->GetHandler(slotId);
243 if (handle == nullptr) {
244 TELEPHONY_LOGE("GetEmergencyCallListRequest return, error type: handle is nullptr.");
245 return CALL_ERR_RESOURCE_UNAVAILABLE;
246 }
247 CoreManagerInner::GetInstance().GetEmergencyCallList(slotId, RadioEvent::RADIO_GET_EMERGENCY_CALL_LIST, handle);
248 return TELEPHONY_SUCCESS;
249 }
250
SetEmergencyCallListRequest(int32_t slotId,std::vector<EmergencyCall> & eccVec)251 int32_t ConfigRequest::SetEmergencyCallListRequest(int32_t slotId, std::vector<EmergencyCall> &eccVec)
252 {
253 TELEPHONY_LOGI("SetEmergencyCallListRequest start ");
254 auto handle = DelayedSingleton<CellularCallService>::GetInstance()->GetHandler(slotId);
255 if (handle == nullptr) {
256 TELEPHONY_LOGE("SetEmergencyCallListRequest return, error type: handle is nullptr.");
257 return CALL_ERR_RESOURCE_UNAVAILABLE;
258 }
259 int32_t errorCode = TELEPHONY_ERR_FAIL;
260 errorCode = CoreManagerInner::GetInstance().SetEmergencyCallList(
261 slotId, RadioEvent::RADIO_SET_EMERGENCY_CALL_LIST, eccVec, handle);
262 TELEPHONY_LOGI("SetEmergencyCallListRequest end %{public}d", errorCode);
263 return errorCode;
264 }
265
UpdateImsCapabilities(int32_t slotId,const ImsCapabilityList & imsCapabilityList)266 int32_t ConfigRequest::UpdateImsCapabilities(int32_t slotId, const ImsCapabilityList &imsCapabilityList)
267 {
268 auto imsCallClient = DelayedSingleton<ImsCallClient>::GetInstance();
269 if (imsCallClient == nullptr || imsCallClient->GetImsCallProxy() == nullptr) {
270 TELEPHONY_LOGE("ImsCallClient is nullptr or ims service SA not exists.");
271 return CALL_ERR_RESOURCE_UNAVAILABLE;
272 }
273 for (auto it : imsCapabilityList.imsCapabilities) {
274 TELEPHONY_LOGI("ImsCapabilityType:%{public}d imsRadioTech:%{public}d enable:%{public}d", it.imsCapabilityType,
275 it.imsRadioTech, it.enable);
276 }
277 return imsCallClient->UpdateImsCapabilities(slotId, imsCapabilityList);
278 }
279 } // namespace Telephony
280 } // namespace OHOS
281