1 /*
2 * Copyright (c) 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 "dataobs_mgr_client.h"
17 #include "datashare_ext_ability_context.h"
18 #include "data_storage_errors.h"
19 #include "data_storage_log_wrapper.h"
20 #include "opkey_ability.h"
21 #include "pdp_profile_ability.h"
22 #include "sim_ability.h"
23 #include "sms_mms_ability.h"
24 #include "global_params_ability.h"
25 #include "opkey_version_ability.h"
26 #include "telephony_datashare_stub_impl.h"
27
28
29 namespace OHOS {
30 namespace DataShare {
31 using DataObsMgrClient = OHOS::AAFwk::DataObsMgrClient;
32 using namespace OHOS::Telephony;
33
SetOpKeyAbility(std::shared_ptr<DataShareExtAbility> extension)34 void TelephonyDataShareStubImpl::SetOpKeyAbility(std::shared_ptr<DataShareExtAbility> extension)
35 {
36 std::lock_guard<std::mutex> lock(opKeyMutex_);
37 opKeyAbility_ = extension;
38 }
39
SetPdpProfileAbility(std::shared_ptr<DataShareExtAbility> extension)40 void TelephonyDataShareStubImpl::SetPdpProfileAbility(std::shared_ptr<DataShareExtAbility> extension)
41 {
42 std::lock_guard<std::mutex> lock(pdpProfileMutex_);
43 pdpProfileAbility_ = extension;
44 }
45
SetSimAbility(std::shared_ptr<DataShareExtAbility> extension)46 void TelephonyDataShareStubImpl::SetSimAbility(std::shared_ptr<DataShareExtAbility> extension)
47 {
48 std::lock_guard<std::mutex> lock(simMutex_);
49 simAbility_ = extension;
50 }
51
SetSmsMmsAbility(std::shared_ptr<DataShareExtAbility> extension)52 void TelephonyDataShareStubImpl::SetSmsMmsAbility(std::shared_ptr<DataShareExtAbility> extension)
53 {
54 std::lock_guard<std::mutex> lock(smsMmsMutex_);
55 smsMmsAbility_ = extension;
56 }
57
SetGlobalParamsAbility(std::shared_ptr<DataShareExtAbility> extension)58 void TelephonyDataShareStubImpl::SetGlobalParamsAbility(std::shared_ptr<DataShareExtAbility> extension)
59 {
60 std::lock_guard<std::mutex> lock(globalParamsMutex_);
61 globalParamsAbility_ = extension;
62 }
63
GetTelephonyDataAbility()64 std::shared_ptr<DataShareExtAbility> TelephonyDataShareStubImpl::GetTelephonyDataAbility()
65 {
66 return telephonyDataAbility_;
67 }
68
GetOpKeyAbility()69 std::shared_ptr<DataShareExtAbility> TelephonyDataShareStubImpl::GetOpKeyAbility()
70 {
71 std::lock_guard<std::mutex> lock(opKeyMutex_);
72 if (opKeyAbility_ == nullptr) {
73 opKeyAbility_.reset(OpKeyAbility::Create());
74 }
75 return opKeyAbility_;
76 }
77
GetPdpProfileAbility()78 std::shared_ptr<DataShareExtAbility> TelephonyDataShareStubImpl::GetPdpProfileAbility()
79 {
80 std::lock_guard<std::mutex> lock(pdpProfileMutex_);
81 if (pdpProfileAbility_ == nullptr) {
82 pdpProfileAbility_.reset(PdpProfileAbility::Create());
83 }
84 return pdpProfileAbility_;
85 }
86
GetSimAbility()87 std::shared_ptr<DataShareExtAbility> TelephonyDataShareStubImpl::GetSimAbility()
88 {
89 std::lock_guard<std::mutex> lock(simMutex_);
90 if (simAbility_ == nullptr) {
91 simAbility_.reset(SimAbility::Create());
92 }
93 return simAbility_;
94 }
95
GetSmsMmsAbility()96 std::shared_ptr<DataShareExtAbility> TelephonyDataShareStubImpl::GetSmsMmsAbility()
97 {
98 std::lock_guard<std::mutex> lock(smsMmsMutex_);
99 if (smsMmsAbility_ == nullptr) {
100 smsMmsAbility_.reset(SmsMmsAbility::Create());
101 }
102 return smsMmsAbility_;
103 }
104
GetGlobalParamsAbility()105 std::shared_ptr<DataShareExtAbility> TelephonyDataShareStubImpl::GetGlobalParamsAbility()
106 {
107 std::lock_guard<std::mutex> lock(globalParamsMutex_);
108 if (globalParamsAbility_ == nullptr) {
109 globalParamsAbility_.reset(GlobalParamsAbility::Create());
110 }
111 return globalParamsAbility_;
112 }
113
GetOpkeyVersionAbility()114 std::shared_ptr<DataShareExtAbility> TelephonyDataShareStubImpl::GetOpkeyVersionAbility()
115 {
116 if (opkeyVersionAbility_ == nullptr) {
117 opkeyVersionAbility_.reset(OpkeyVersionAbility::Create());
118 }
119 return opkeyVersionAbility_;
120 }
121
GetOwner(const Uri & uri)122 std::shared_ptr<DataShareExtAbility> TelephonyDataShareStubImpl::GetOwner(const Uri &uri)
123 {
124 OHOS::Uri uriTemp = uri;
125 std::string path = uriTemp.GetPath();
126 DATA_STORAGE_LOGD("GetOwner uri: %{public}s", path.c_str());
127 if (path.find("com.ohos.telephonydataability") != std::string::npos) {
128 return GetTelephonyDataAbility();
129 }
130 if (path.find("com.ohos.opkeyability") != std::string::npos) {
131 return GetOpKeyAbility();
132 }
133 if (path.find("com.ohos.pdpprofileability") != std::string::npos) {
134 return GetPdpProfileAbility();
135 }
136 if (path.find("com.ohos.simability") != std::string::npos) {
137 return GetSimAbility();
138 }
139 if (path.find("com.ohos.smsmmsability") != std::string::npos) {
140 return GetSmsMmsAbility();
141 }
142 if (path.find("com.ohos.globalparamsability") != std::string::npos) {
143 return GetGlobalParamsAbility();
144 }
145 #ifdef OHOS_BUILD_ENABLE_TELEPHONY_EXT
146 if (path.find("com.ohos.opkeyversionability") != std::string::npos) {
147 return GetOpkeyVersionAbility();
148 }
149 #endif
150 return nullptr;
151 }
152
Insert(const Uri & uri,const DataShareValuesBucket & value)153 int TelephonyDataShareStubImpl::Insert(const Uri &uri, const DataShareValuesBucket &value)
154 {
155 DATA_STORAGE_LOGD("Insert begin.");
156 int ret = 0;
157 auto extension = GetOwner(uri);
158 if (extension == nullptr) {
159 DATA_STORAGE_LOGE("Insert failed, extension is null.");
160 return ret;
161 }
162 ret = extension->Insert(uri, value);
163 DATA_STORAGE_LOGI("Insert end successfully. ret: %{public}d", ret);
164 if (ret != Telephony::OPERATION_ERROR) {
165 NotifyChange(uri);
166 }
167 return ret;
168 }
169
Update(const Uri & uri,const DataSharePredicates & predicates,const DataShareValuesBucket & value)170 int TelephonyDataShareStubImpl::Update(const Uri &uri, const DataSharePredicates &predicates,
171 const DataShareValuesBucket &value)
172 {
173 DATA_STORAGE_LOGD("Update begin.");
174 int ret = 0;
175 auto extension = GetOwner(uri);
176 if (extension == nullptr) {
177 DATA_STORAGE_LOGE("Update failed, extension is null.");
178 return ret;
179 }
180 ret = extension->Update(uri, predicates, value);
181 if (ret != Telephony::OPERATION_OK) {
182 DATA_STORAGE_LOGE("Update end failed. ret: %{public}d", ret);
183 }
184 if (ret != Telephony::OPERATION_ERROR) {
185 NotifyChange(uri);
186 }
187 return ret;
188 }
189
Delete(const Uri & uri,const DataSharePredicates & predicates)190 int TelephonyDataShareStubImpl::Delete(const Uri &uri, const DataSharePredicates &predicates)
191 {
192 DATA_STORAGE_LOGI("Delete begin.");
193 int ret = 0;
194 auto extension = GetOwner(uri);
195 if (extension == nullptr) {
196 DATA_STORAGE_LOGE("Delete failed, extension is null.");
197 return ret;
198 }
199 ret = extension->Delete(uri, predicates);
200 DATA_STORAGE_LOGI("Delete end successfully. ret: %{public}d", ret);
201 if (ret != Telephony::OPERATION_ERROR) {
202 NotifyChange(uri);
203 }
204 return ret;
205 }
206
Query(const Uri & uri,const DataSharePredicates & predicates,std::vector<std::string> & columns,DatashareBusinessError & businessError)207 std::shared_ptr<DataShareResultSet> TelephonyDataShareStubImpl::Query(const Uri &uri,
208 const DataSharePredicates &predicates, std::vector<std::string> &columns, DatashareBusinessError &businessError)
209 {
210 DATA_STORAGE_LOGD("Query begin.");
211 auto extension = GetOwner(uri);
212 if (extension == nullptr) {
213 DATA_STORAGE_LOGE("Query failed, extension is null.");
214 return nullptr;
215 }
216 auto resultSet = extension->Query(uri, predicates, columns, businessError);
217 DATA_STORAGE_LOGD("Query end successfully.");
218 return resultSet;
219 }
220
BatchInsert(const Uri & uri,const std::vector<DataShareValuesBucket> & values)221 int TelephonyDataShareStubImpl::BatchInsert(const Uri &uri, const std::vector<DataShareValuesBucket> &values)
222 {
223 DATA_STORAGE_LOGI("BatchInsert begin.");
224 int ret = 0;
225 auto extension = GetOwner(uri);
226 if (extension == nullptr) {
227 DATA_STORAGE_LOGE("BatchInsert failed, extension is null.");
228 return ret;
229 }
230 ret = extension->BatchInsert(uri, values);
231 DATA_STORAGE_LOGI("BatchInsert end successfully. ret: %{public}d", ret);
232 if (ret != Telephony::OPERATION_ERROR) {
233 NotifyChange(uri);
234 }
235 return ret;
236 }
237
GetFileTypes(const Uri & uri,const std::string & mimeTypeFilter)238 std::vector<std::string> TelephonyDataShareStubImpl::GetFileTypes(const Uri &uri, const std::string &mimeTypeFilter)
239 {
240 DATA_STORAGE_LOGI("GetFileTypes not supported.");
241 std::vector<std::string> result;
242 return result;
243 }
244
OpenFile(const Uri & uri,const std::string & mode)245 int TelephonyDataShareStubImpl::OpenFile(const Uri &uri, const std::string &mode)
246 {
247 DATA_STORAGE_LOGI("OpenFile not supported.");
248 return -1;
249 }
250
OpenRawFile(const Uri & uri,const std::string & mode)251 int TelephonyDataShareStubImpl::OpenRawFile(const Uri &uri, const std::string &mode)
252 {
253 DATA_STORAGE_LOGI("OpenRawFile not supported.");
254 return -1;
255 }
256
GetType(const Uri & uri)257 std::string TelephonyDataShareStubImpl::GetType(const Uri &uri)
258 {
259 DATA_STORAGE_LOGI("GetType not supported.");
260 return "";
261 }
262
RegisterObserver(const Uri & uri,const sptr<AAFwk::IDataAbilityObserver> & dataObserver)263 bool TelephonyDataShareStubImpl::RegisterObserver(const Uri &uri, const sptr<AAFwk::IDataAbilityObserver> &dataObserver)
264 {
265 DATA_STORAGE_LOGD("%{public}s begin.", __func__);
266 auto obsMgrClient = DataObsMgrClient::GetInstance();
267 if (obsMgrClient == nullptr) {
268 DATA_STORAGE_LOGE("%{public}s obsMgrClient is nullptr", __func__);
269 return false;
270 }
271
272 ErrCode ret = obsMgrClient->RegisterObserver(uri, dataObserver);
273 if (ret != ERR_OK) {
274 DATA_STORAGE_LOGE("%{public}s obsMgrClient->RegisterObserver error return %{public}d", __func__, ret);
275 return false;
276 }
277 return true;
278 }
279
UnregisterObserver(const Uri & uri,const sptr<AAFwk::IDataAbilityObserver> & dataObserver)280 bool TelephonyDataShareStubImpl::UnregisterObserver(const Uri &uri,
281 const sptr<AAFwk::IDataAbilityObserver> &dataObserver)
282 {
283 DATA_STORAGE_LOGI("%{public}s begin.", __func__);
284 auto obsMgrClient = DataObsMgrClient::GetInstance();
285 if (obsMgrClient == nullptr) {
286 DATA_STORAGE_LOGE("%{public}s obsMgrClient is nullptr", __func__);
287 return false;
288 }
289
290 ErrCode ret = obsMgrClient->UnregisterObserver(uri, dataObserver);
291 if (ret != ERR_OK) {
292 DATA_STORAGE_LOGE("%{public}s obsMgrClient->UnregisterObserver error return %{public}d", __func__, ret);
293 return false;
294 }
295 return true;
296 }
297
NotifyChange(const Uri & uri)298 bool TelephonyDataShareStubImpl::NotifyChange(const Uri &uri)
299 {
300 auto obsMgrClient = DataObsMgrClient::GetInstance();
301 if (obsMgrClient == nullptr) {
302 DATA_STORAGE_LOGE("%{public}s obsMgrClient is nullptr", __func__);
303 return false;
304 }
305
306 ErrCode ret = obsMgrClient->NotifyChange(uri);
307 if (ret != ERR_OK) {
308 DATA_STORAGE_LOGE("%{public}s obsMgrClient->NotifyChange error return %{public}d", __func__, ret);
309 return false;
310 }
311 return true;
312 }
313
NormalizeUri(const Uri & uri)314 Uri TelephonyDataShareStubImpl::NormalizeUri(const Uri &uri)
315 {
316 DATA_STORAGE_LOGI("NormalizeUri not supported.");
317 return uri;
318 }
319
DenormalizeUri(const Uri & uri)320 Uri TelephonyDataShareStubImpl::DenormalizeUri(const Uri &uri)
321 {
322 DATA_STORAGE_LOGI("DenormalizeUri not supported.");
323 return uri;
324 }
325 } // namespace DataShare
326 } // namespace OHOS
327