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 "calllog_ability.h"
17 #include "common.h"
18 #include "contacts_datashare_stub_impl.h"
19 #include "dataobs_mgr_client.h"
20 #include "hilog_wrapper.h"
21 #include "voicemail_ability.h"
22
23 namespace OHOS {
24 namespace DataShare {
25 using DataObsMgrClient = OHOS::AAFwk::DataObsMgrClient;
26
GetContactsDataAbility()27 std::shared_ptr<DataShareExtAbility> ContactsDataShareStubImpl::GetContactsDataAbility()
28 {
29 return contactsDataAbility_;
30 }
31
GetCallLogAbility()32 std::shared_ptr<DataShareExtAbility> ContactsDataShareStubImpl::GetCallLogAbility()
33 {
34 if (callLogAbility_ == nullptr) {
35 callLogAbility_.reset(CallLogAbility::Create());
36 }
37 return callLogAbility_;
38 }
39
GetVoiceMailAbility()40 std::shared_ptr<DataShareExtAbility> ContactsDataShareStubImpl::GetVoiceMailAbility()
41 {
42 if (voiceMailAbility_ == nullptr) {
43 voiceMailAbility_.reset(VoiceMailAbility::Create());
44 }
45 return voiceMailAbility_;
46 }
47
GetOwner(const Uri & uri)48 std::shared_ptr<DataShareExtAbility> ContactsDataShareStubImpl::GetOwner(const Uri &uri)
49 {
50 OHOS::Uri uriTemp = uri;
51 std::string path = uriTemp.GetPath();
52 if (path.find("com.ohos.contactsdataability") != std::string::npos) {
53 return GetContactsDataAbility();
54 }
55 if (path.find("com.ohos.calllogability") != std::string::npos) {
56 return GetCallLogAbility();
57 }
58 if (path.find("com.ohos.voicemailability") != std::string::npos) {
59 return GetVoiceMailAbility();
60 }
61 return nullptr;
62 }
63
Insert(const Uri & uri,const DataShareValuesBucket & value)64 int ContactsDataShareStubImpl::Insert(const Uri &uri, const DataShareValuesBucket &value)
65 {
66 HILOG_INFO("insert begin.");
67 int ret = 0;
68 auto client = sptr<ContactsDataShareStubImpl>(this);
69 auto extension = client->GetOwner(uri);
70 if (extension == nullptr) {
71 HILOG_ERROR("insert failed, extension is null.");
72 return ret;
73 }
74 ret = extension->Insert(uri, value);
75 HILOG_INFO("insert end successfully. ret: %{public}d", ret);
76 if (ret != Contacts::OPERATION_ERROR) {
77 NotifyChange(uri);
78 }
79 return ret;
80 }
81
Update(const Uri & uri,const DataSharePredicates & predicates,const DataShareValuesBucket & value)82 int ContactsDataShareStubImpl::Update(const Uri &uri, const DataSharePredicates &predicates,
83 const DataShareValuesBucket &value)
84 {
85 HILOG_INFO("update begin.");
86 int ret = 0;
87 auto client = sptr<ContactsDataShareStubImpl>(this);
88 auto extension = client->GetOwner(uri);
89 if (extension == nullptr) {
90 HILOG_ERROR("update failed, extension is null.");
91 return ret;
92 }
93 ret = extension->Update(uri, predicates, value);
94 HILOG_INFO("update end successfully. ret: %{public}d", ret);
95 if (ret != Contacts::OPERATION_ERROR) {
96 NotifyChange(uri);
97 }
98 return ret;
99 }
100
Delete(const Uri & uri,const DataSharePredicates & predicates)101 int ContactsDataShareStubImpl::Delete(const Uri &uri, const DataSharePredicates &predicates)
102 {
103 HILOG_INFO("delete begin.");
104 int ret = 0;
105 auto client = sptr<ContactsDataShareStubImpl>(this);
106 auto extension = client->GetOwner(uri);
107 if (extension == nullptr) {
108 HILOG_ERROR("delete failed, extension is null.");
109 return ret;
110 }
111 ret = extension->Delete(uri, predicates);
112 HILOG_INFO("delete end successfully. ret: %{public}d", ret);
113 if (ret != Contacts::OPERATION_ERROR) {
114 NotifyChange(uri);
115 }
116 return ret;
117 }
118
Query(const Uri & uri,const DataSharePredicates & predicates,std::vector<std::string> & columns)119 std::shared_ptr<DataShareResultSet> ContactsDataShareStubImpl::Query(const Uri &uri,
120 const DataSharePredicates &predicates, std::vector<std::string> &columns)
121 {
122 HILOG_INFO("query begin.");
123 std::shared_ptr<DataShareResultSet> resultSet = nullptr;
124 auto client = sptr<ContactsDataShareStubImpl>(this);
125 auto extension = client->GetOwner(uri);
126 if (extension == nullptr) {
127 HILOG_ERROR("query failed, extension is null.");
128 return nullptr;
129 }
130 resultSet = extension->Query(uri, predicates, columns);
131 HILOG_INFO("query end successfully.");
132 return resultSet;
133 }
134
BatchInsert(const Uri & uri,const std::vector<DataShareValuesBucket> & values)135 int ContactsDataShareStubImpl::BatchInsert(const Uri &uri, const std::vector<DataShareValuesBucket> &values)
136 {
137 HILOG_INFO("batch insert begin.");
138 int ret = 0;
139 auto client = sptr<ContactsDataShareStubImpl>(this);
140 auto extension = client->GetOwner(uri);
141 if (extension == nullptr) {
142 HILOG_ERROR("batch insert failed, extension is null.");
143 return ret;
144 }
145 ret = extension->BatchInsert(uri, values);
146 HILOG_INFO("batch insert end successfully. ret: %{public}d", ret);
147 if (ret != Contacts::OPERATION_ERROR) {
148 NotifyChange(uri);
149 }
150 return ret;
151 }
152
GetFileTypes(const Uri & uri,const std::string & mimeTypeFilter)153 std::vector<std::string> ContactsDataShareStubImpl::GetFileTypes(const Uri &uri, const std::string &mimeTypeFilter)
154 {
155 HILOG_INFO("GetFileTypes not supported");
156 std::vector<std::string> result;
157 return result;
158 }
159
OpenFile(const Uri & uri,const std::string & mode)160 int ContactsDataShareStubImpl::OpenFile(const Uri &uri, const std::string &mode)
161 {
162 HILOG_INFO("OpenFile not supported");
163 return -1;
164 }
165
OpenRawFile(const Uri & uri,const std::string & mode)166 int ContactsDataShareStubImpl::OpenRawFile(const Uri &uri, const std::string &mode)
167 {
168 HILOG_INFO("OpenRawFile not supported");
169 return -1;
170 }
171
GetType(const Uri & uri)172 std::string ContactsDataShareStubImpl::GetType(const Uri &uri)
173 {
174 HILOG_INFO("GetType not supported");
175 return "";
176 }
177
RegisterObserver(const Uri & uri,const sptr<AAFwk::IDataAbilityObserver> & dataObserver)178 bool ContactsDataShareStubImpl::RegisterObserver(const Uri &uri, const sptr<AAFwk::IDataAbilityObserver> &dataObserver)
179 {
180 HILOG_INFO("%{public}s begin.", __func__);
181 auto obsMgrClient = DataObsMgrClient::GetInstance();
182 if (obsMgrClient == nullptr) {
183 HILOG_ERROR("%{public}s obsMgrClient is nullptr", __func__);
184 return false;
185 }
186
187 ErrCode ret = obsMgrClient->RegisterObserver(uri, dataObserver);
188 if (ret != ERR_OK) {
189 HILOG_ERROR("%{public}s obsMgrClient->RegisterObserver error return %{public}d", __func__, ret);
190 return false;
191 }
192 return true;
193 }
194
UnregisterObserver(const Uri & uri,const sptr<AAFwk::IDataAbilityObserver> & dataObserver)195 bool ContactsDataShareStubImpl::UnregisterObserver(const Uri &uri,
196 const sptr<AAFwk::IDataAbilityObserver> &dataObserver)
197 {
198 HILOG_INFO("%{public}s begin.", __func__);
199 auto obsMgrClient = DataObsMgrClient::GetInstance();
200 if (obsMgrClient == nullptr) {
201 HILOG_ERROR("%{public}s obsMgrClient is nullptr", __func__);
202 return false;
203 }
204
205 ErrCode ret = obsMgrClient->UnregisterObserver(uri, dataObserver);
206 if (ret != ERR_OK) {
207 HILOG_ERROR("%{public}s obsMgrClient->UnregisterObserver error return %{public}d", __func__, ret);
208 return false;
209 }
210 return true;
211 }
212
NotifyChange(const Uri & uri)213 bool ContactsDataShareStubImpl::NotifyChange(const Uri &uri)
214 {
215 auto obsMgrClient = DataObsMgrClient::GetInstance();
216 if (obsMgrClient == nullptr) {
217 HILOG_ERROR("%{public}s obsMgrClient is nullptr", __func__);
218 return false;
219 }
220
221 ErrCode ret = obsMgrClient->NotifyChange(uri);
222 if (ret != ERR_OK) {
223 HILOG_ERROR("%{public}s obsMgrClient->NotifyChange error return %{public}d", __func__, ret);
224 return false;
225 }
226 return true;
227 }
228
NormalizeUri(const Uri & uri)229 Uri ContactsDataShareStubImpl::NormalizeUri(const Uri &uri)
230 {
231 HILOG_INFO("NormalizeUri not supported");
232 return uri;
233 }
234
DenormalizeUri(const Uri & uri)235 Uri ContactsDataShareStubImpl::DenormalizeUri(const Uri &uri)
236 {
237 HILOG_INFO("DenormalizeUri not supported");
238 return uri;
239 }
240 } // namespace DataShare
241 } // namespace OHOS
242