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