• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2024 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 "number_identity_data_base_helper.h"
17 
18 #include "ability_context.h"
19 #include "call_manager_errors.h"
20 #include "call_number_utils.h"
21 #include "iservice_registry.h"
22 #include "phonenumbers/phonenumber.pb.h"
23 #include "phonenumberutil.h"
24 #include "telephony_log_wrapper.h"
25 
26 namespace OHOS {
27 namespace Telephony {
28 static constexpr const char *NUMBER_MARK_INFO_URI = "datashare:///numbermarkability/number_mark_info";
29 const char *NUMBER_LOCATION = "number_location";
30 const char *MARK_TYPE = "markType";
31 const char *MARK_CONTENT = "markContent";
32 const char *MARK_COUNT = "markCount";
33 const char *MARK_SOURCE = "markSource";
34 const char *IS_CLOUD = "isCloud";
35 const char *MARK_DETAILS = "markDetails";
36 
NumberIdentityDataBaseHelper()37 NumberIdentityDataBaseHelper::NumberIdentityDataBaseHelper() {}
38 
~NumberIdentityDataBaseHelper()39 NumberIdentityDataBaseHelper::~NumberIdentityDataBaseHelper() {}
40 
CreateDataShareHelper(std::string uri)41 std::shared_ptr<DataShare::DataShareHelper> NumberIdentityDataBaseHelper::CreateDataShareHelper(std::string uri)
42 {
43     TELEPHONY_LOGI("uri: %{public}s", uri.c_str());
44     auto saManager = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
45     if (saManager == nullptr) {
46         TELEPHONY_LOGE("Get system ability mgr failed.");
47         return nullptr;
48     }
49     auto remoteObj = saManager->GetSystemAbility(TELEPHONY_CALL_MANAGER_SYS_ABILITY_ID);
50     if (remoteObj == nullptr) {
51         TELEPHONY_LOGE("GetSystemAbility Service Failed.");
52         return nullptr;
53     }
54     return DataShare::DataShareHelper::Creator(remoteObj, uri);
55 }
56 
Query(std::string & numberLocation,DataShare::DataSharePredicates & predicates)57 bool NumberIdentityDataBaseHelper::Query(std::string &numberLocation, DataShare::DataSharePredicates &predicates)
58 {
59     std::shared_ptr<DataShare::DataShareHelper> helper = CreateDataShareHelper(NUMBER_IDENTITY_URI);
60     if (helper == nullptr) {
61         TELEPHONY_LOGE("helper is nullptr");
62         return false;
63     }
64     Uri uri(NUMBER_IDENTITY_URI);
65     std::string isExactMatchStr = "true";
66     std::vector<std::string> columns;
67     columns.push_back(isExactMatchStr);
68     auto resultSet = helper->Query(uri, predicates, columns);
69     if (resultSet == nullptr) {
70         TELEPHONY_LOGE("resultSet is nullptr");
71         helper->Release();
72         helper = nullptr;
73         return false;
74     }
75     int rowCount = 0;
76     resultSet->GetRowCount(rowCount);
77     if (rowCount == 0) {
78         TELEPHONY_LOGE("query success, but rowCount is 0");
79         helper->Release();
80         return TELEPHONY_SUCCESS;
81     }
82     resultSet->GoToFirstRow();
83     int columnIndex = 0;
84     resultSet->GetColumnIndex(NUMBER_LOCATION, columnIndex);
85     resultSet->GetString(columnIndex, numberLocation);
86     resultSet->Close();
87     helper->Release();
88     helper = nullptr;
89     TELEPHONY_LOGW("QueryNumberLocation end");
90     return true;
91 }
92 
QueryYellowPageAndMark(NumberMarkInfo & numberMarkInfo,DataShare::DataSharePredicates & predicates)93 bool NumberIdentityDataBaseHelper::QueryYellowPageAndMark(NumberMarkInfo &numberMarkInfo,
94     DataShare::DataSharePredicates &predicates)
95 {
96     TELEPHONY_LOGI("query yellow page and mark.");
97     std::shared_ptr<DataShare::DataShareHelper> helper = CreateDataShareHelper(NUMBER_MARK_INFO_URI);
98     if (helper == nullptr) {
99         TELEPHONY_LOGE("helper is nullptr");
100         return false;
101     }
102     Uri uri(NUMBER_MARK_INFO_URI);
103     std::vector<std::string> columns;
104     TELEPHONY_LOGI("begin datashare query.");
105     auto resultSet = helper->Query(uri, predicates, columns);
106     if (resultSet == nullptr) {
107         TELEPHONY_LOGE("resultSet is nullptr");
108         helper->Release();
109         helper = nullptr;
110         return false;
111     }
112     TELEPHONY_LOGI("datashare query success.");
113     int rowCount = 0;
114     resultSet->GetRowCount(rowCount);
115     if (rowCount == 0) {
116         TELEPHONY_LOGE("query success, but rowCount is 0");
117         helper->Release();
118         numberMarkInfo.markType = MarkType::MARK_TYPE_NONE;
119         return TELEPHONY_SUCCESS;
120     }
121     SetMarkInfoValues(resultSet, numberMarkInfo);
122 
123     resultSet->Close();
124     helper->Release();
125     helper = nullptr;
126     TELEPHONY_LOGI("QueryYellowPageAndMark success.");
127     return true;
128 }
129 
SetMarkInfoValues(std::shared_ptr<DataShare::DataShareResultSet> & resultSet,NumberMarkInfo & numberMarkInfo)130 bool NumberIdentityDataBaseHelper::SetMarkInfoValues(std::shared_ptr<DataShare::DataShareResultSet> &resultSet,
131     NumberMarkInfo &numberMarkInfo)
132 {
133     resultSet->GoToFirstRow();
134     int columnIndex = 0;
135     int64_t longValue;
136     std::string stringValue = "";
137 
138     resultSet->GetColumnIndex(MARK_TYPE, columnIndex);
139     resultSet->GetLong(columnIndex, longValue);
140     numberMarkInfo.markType = static_cast<MarkType>(longValue);
141 
142     resultSet->GetColumnIndex(MARK_CONTENT, columnIndex);
143     resultSet->GetString(columnIndex, stringValue);
144     if (memcpy_s(numberMarkInfo.markContent, kMaxNumberLen, stringValue.c_str(), stringValue.length()) != EOK) {
145         TELEPHONY_LOGE("memcpy_s failed!");
146         return false;
147     }
148 
149     resultSet->GetColumnIndex(MARK_COUNT, columnIndex);
150     resultSet->GetLong(columnIndex, longValue);
151     numberMarkInfo.markCount = longValue;
152 
153     stringValue = "";
154     resultSet->GetColumnIndex(MARK_SOURCE, columnIndex);
155     resultSet->GetString(columnIndex, stringValue);
156     if (memcpy_s(numberMarkInfo.markSource, kMaxNumberLen, stringValue.c_str(), stringValue.length()) != EOK) {
157         TELEPHONY_LOGE("memcpy_s failed!");
158         return false;
159     }
160 
161     resultSet->GetColumnIndex(IS_CLOUD, columnIndex);
162     resultSet->GetLong(columnIndex, longValue);
163     if (longValue == 1L) {
164         numberMarkInfo.isCloud = true;
165     } else {
166         numberMarkInfo.isCloud = false;
167     }
168 
169     stringValue = "";
170     resultSet->GetColumnIndex(MARK_DETAILS, columnIndex);
171     resultSet->GetString(columnIndex, stringValue);
172     if (memcpy_s(numberMarkInfo.markDetails, kMaxNumberLen, stringValue.c_str(), stringValue.length()) != EOK) {
173         TELEPHONY_LOGE("memcpy_s failed!");
174         return false;
175     }
176     return true;
177 }
178 } // namespace Telephony
179 } // namespace OHOS