• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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