• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2023-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 "net_datashare_utils.h"
17 
18 #include <vector>
19 
20 #include "net_manager_constants.h"
21 #include "net_mgr_log_wrapper.h"
22 
23 namespace OHOS {
24 namespace NetManagerStandard {
25 namespace {
26 constexpr const char *SETTINGS_DATASHARE_URI =
27     "datashare:///com.ohos.settingsdata/entry/settingsdata/SETTINGSDATA?Proxy=true";
28 constexpr const char *SETTINGS_DATA_EXT_URI = "datashare:///com.ohos.settingsdata.DataAbility";
29 constexpr const char *SETTINGS_DATA_COLUMN_KEYWORD = "KEYWORD";
30 constexpr const char *SETTINGS_DATA_COLUMN_VALUE = "VALUE";
31 
32 constexpr int INVALID_VALUE = -1;
33 } // namespace
34 
NetDataShareHelperUtils()35 NetDataShareHelperUtils::NetDataShareHelperUtils()
36 {
37     dataShareHelper_ = CreateDataShareHelper();
38 }
39 
CreateDataShareHelper()40 std::shared_ptr<DataShare::DataShareHelper> NetDataShareHelperUtils::CreateDataShareHelper()
41 {
42     sptr<ISystemAbilityManager> saManager = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
43     if (saManager == nullptr) {
44         NETMGR_LOG_E("NetDataShareHelperUtils GetSystemAbilityManager failed.");
45         return nullptr;
46     }
47     sptr<IRemoteObject> remoteObj = saManager->GetSystemAbility(COMM_NET_CONN_MANAGER_SYS_ABILITY_ID);
48     if (remoteObj == nullptr) {
49         NETMGR_LOG_E("NetDataShareHelperUtils GetSystemAbility Service Failed.");
50         return nullptr;
51     }
52     return DataShare::DataShareHelper::Creator(remoteObj, SETTINGS_DATASHARE_URI, SETTINGS_DATA_EXT_URI);
53 }
54 
Query(Uri & uri,const std::string & key,std::string & value)55 int32_t NetDataShareHelperUtils::Query(Uri &uri, const std::string &key, std::string &value)
56 {
57     if (dataShareHelper_ == nullptr) {
58         NETMGR_LOG_E("dataShareHelper_ is nullptr");
59         return NETMANAGER_ERROR;
60     }
61     DataShare::DataSharePredicates predicates;
62     std::vector<std::string> columns;
63     predicates.EqualTo(SETTINGS_DATA_COLUMN_KEYWORD, key);
64     auto result = dataShareHelper_->Query(uri, predicates, columns);
65     if (result == nullptr) {
66         NETMGR_LOG_E("DataShareHelper query error, result is null");
67         return NETMANAGER_ERROR;
68     }
69 
70     if (result->GoToFirstRow() != DataShare::E_OK) {
71         NETMGR_LOG_E("DataShareHelper query failed,go to first row error");
72         result->Close();
73         return NETMANAGER_ERROR;
74     }
75 
76     int columnIndex;
77     result->GetColumnIndex(SETTINGS_DATA_COLUMN_VALUE, columnIndex);
78     result->GetString(columnIndex, value);
79     result->Close();
80     NETMGR_LOG_I("DataShareHelper query success,value[%{public}s]", value.c_str());
81     return NETMANAGER_SUCCESS;
82 }
83 
Insert(Uri & uri,const std::string & key,const std::string & value)84 int32_t NetDataShareHelperUtils::Insert(Uri &uri, const std::string &key, const std::string &value)
85 {
86     if (dataShareHelper_ == nullptr) {
87         NETMGR_LOG_E("dataShareHelper_ is nullptr");
88         return NETMANAGER_ERROR;
89     }
90     DataShare::DataShareValuesBucket valuesBucket;
91     DataShare::DataShareValueObject keyObj(key);
92     DataShare::DataShareValueObject valueObj(value);
93     valuesBucket.Put(SETTINGS_DATA_COLUMN_KEYWORD, keyObj);
94     valuesBucket.Put(SETTINGS_DATA_COLUMN_VALUE, valueObj);
95     int32_t result = dataShareHelper_->Insert(uri, valuesBucket);
96     if (result == INVALID_VALUE) {
97         NETMGR_LOG_E("DataShareHelper insert failed, insert result:%{public}d", result);
98         return NETMANAGER_ERROR;
99     }
100     dataShareHelper_->NotifyChange(uri);
101     NETMGR_LOG_I("DataShareHelper insert success");
102     return NETMANAGER_SUCCESS;
103 }
104 
Update(Uri & uri,const std::string & key,const std::string & value)105 int32_t NetDataShareHelperUtils::Update(Uri &uri, const std::string &key, const std::string &value)
106 {
107     if (dataShareHelper_ == nullptr) {
108         NETMGR_LOG_E("dataShareHelper_ is nullptr");
109         return NETMANAGER_ERROR;
110     }
111     std::string queryValue;
112     int32_t ret = Query(uri, key, queryValue);
113     if (ret == NETMANAGER_ERROR) {
114         return Insert(uri, key, value);
115     }
116 
117     DataShare::DataShareValuesBucket valuesBucket;
118     DataShare::DataShareValueObject valueObj(value);
119     valuesBucket.Put(SETTINGS_DATA_COLUMN_VALUE, valueObj);
120     DataShare::DataSharePredicates predicates;
121     predicates.EqualTo(SETTINGS_DATA_COLUMN_KEYWORD, key);
122     int32_t result = dataShareHelper_->Update(uri, predicates, valuesBucket);
123     if (result == INVALID_VALUE) {
124         return NETMANAGER_ERROR;
125     }
126     dataShareHelper_->NotifyChange(uri);
127     NETMGR_LOG_I("DataShareHelper update success");
128     return NETMANAGER_SUCCESS;
129 }
130 } // namespace NetManagerStandard
131 } // namespace OHOS