• 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 "setting_utils.h"
17 
18 #include "rdb_errno.h"
19 
20 #include "telephony_log_wrapper.h"
21 
22 namespace OHOS {
23 namespace Telephony {
24 using namespace AppExecFwk;
25 
26 const std::string SettingUtils::NETWORK_SEARCH_SETTING_URI =
27     "datashare:///com.ohos.settingsdata/entry/settingsdata/SETTINGSDATA?Proxy=true";
28 const std::string SettingUtils::NETWORK_SEARCH_SETTING_AUTO_TIME_URI =
29     "datashare:///com.ohos.settingsdata/entry/settingsdata/SETTINGSDATA?Proxy=true&key=auto_time";
30 const std::string SettingUtils::NETWORK_SEARCH_SETTING_AUTO_TIMEZONE_URI =
31     "datashare:///com.ohos.settingsdata/entry/settingsdata/SETTINGSDATA?Proxy=true&key=auto_timezone";
32 const std::string SettingUtils::NETWORK_SEARCH_SETTING_AIRPLANE_MODE_URI =
33     "datashare:///com.ohos.settingsdata/entry/settingsdata/SETTINGSDATA?Proxy=true&key=airplane_mode";
34 const std::string SettingUtils::NETWORK_SEARCH_SETTING_PREFERRED_NETWORK_MODE_URI =
35     "datashare:///com.ohos.settingsdata/entry/settingsdata/SETTINGSDATA?Proxy=true&key=preferred_network_mode";
36 
37 const std::string SettingUtils::SETTINGS_NETWORK_SEARCH_AUTO_TIME = "settings.telephony.autotime";
38 const std::string SettingUtils::SETTINGS_NETWORK_SEARCH_AUTO_TIMEZONE = "settings.telephony.autotimezone";
39 const std::string SettingUtils::SETTINGS_NETWORK_SEARCH_AIRPLANE_MODE = "settings.telephony.airplanemode";
40 const std::string SettingUtils::SETTINGS_NETWORK_SEARCH_PREFERRED_NETWORK_MODE =
41     "settings.telephony.preferrednetworkmode";
42 
SettingUtils()43 SettingUtils::SettingUtils()
44 {
45     settingHelper_ = CreateDataShareHelper();
46 }
47 
48 SettingUtils::~SettingUtils() = default;
49 
CreateDataShareHelper()50 std::shared_ptr<DataShare::DataShareHelper> SettingUtils::CreateDataShareHelper()
51 {
52     sptr<ISystemAbilityManager> saManager = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
53     if (saManager == nullptr) {
54         TELEPHONY_LOGE("SettingUtils: GetSystemAbilityManager failed.");
55         return nullptr;
56     }
57     sptr<IRemoteObject> remoteObj = saManager->GetSystemAbility(TELEPHONY_CORE_SERVICE_SYS_ABILITY_ID);
58     if (remoteObj == nullptr) {
59         TELEPHONY_LOGE("SettingUtils: GetSystemAbility Service Failed.");
60         return nullptr;
61     }
62     return DataShare::DataShareHelper::Creator(remoteObj, NETWORK_SEARCH_SETTING_URI);
63 }
64 
UnRegisterSettingsObserver(const Uri & uri,const sptr<AAFwk::IDataAbilityObserver> & dataObserver)65 bool SettingUtils::UnRegisterSettingsObserver(
66     const Uri &uri, const sptr<AAFwk::IDataAbilityObserver> &dataObserver)
67 {
68     if (settingHelper_ == nullptr) {
69         TELEPHONY_LOGE("settingHelper_ is null");
70         return false;
71     }
72     settingHelper_->UnregisterObserver(uri, dataObserver);
73     TELEPHONY_LOGI("SettingUtils: UnRegisterObserver Success");
74     return true;
75 }
76 
RegisterSettingsObserver(const Uri & uri,const sptr<AAFwk::IDataAbilityObserver> & dataObserver)77 bool SettingUtils::RegisterSettingsObserver(
78     const Uri &uri, const sptr<AAFwk::IDataAbilityObserver> &dataObserver)
79 {
80     if (settingHelper_ == nullptr) {
81         TELEPHONY_LOGE("settingHelper_ is null");
82         return false;
83     }
84     settingHelper_->RegisterObserver(uri, dataObserver);
85     TELEPHONY_LOGI("SettingUtils: RegisterObserver Success");
86     return true;
87 }
88 
Query(Uri uri,const std::string & key,std::string & value)89 bool SettingUtils::Query(Uri uri, const std::string &key, std::string &value)
90 {
91     TELEPHONY_LOGI("SettingUtils:Query");
92     if (settingHelper_ == nullptr) {
93         TELEPHONY_LOGE("settingHelper_ is null");
94         return false;
95     }
96 
97     std::vector<std::string> columns;
98     DataShare::DataSharePredicates predicates;
99     predicates.EqualTo(SETTING_KEY, key);
100     auto result = settingHelper_->Query(uri, predicates, columns);
101     if (result == nullptr) {
102         TELEPHONY_LOGE("SettingUtils: query error, result is null");
103         return false;
104     }
105 
106     if (result->GoToFirstRow() != NativeRdb::E_OK) {
107         TELEPHONY_LOGE("SettingUtils: query error, go to first row error");
108         return false;
109     }
110 
111     int columnIndex = 0;
112     result->GetColumnIndex(SETTING_VALUE, columnIndex);
113     result->GetString(columnIndex, value);
114     result->Close();
115     TELEPHONY_LOGI("SettingUtils: query success");
116     return true;
117 }
118 
Insert(Uri uri,const std::string & key,const std::string & value)119 bool SettingUtils::Insert(Uri uri, const std::string &key, const std::string &value)
120 {
121     TELEPHONY_LOGI("SettingUtils: insert start");
122     if (settingHelper_ == nullptr) {
123         TELEPHONY_LOGE("settingHelper_ is null");
124         return false;
125     }
126     DataShare::DataShareValuesBucket valuesBucket;
127     DataShare::DataShareValueObject keyObj(key);
128     DataShare::DataShareValueObject valueObj(value);
129     valuesBucket.Put(SETTING_KEY, keyObj);
130     valuesBucket.Put(SETTING_VALUE, valueObj);
131     int32_t result = settingHelper_->Insert(uri, valuesBucket);
132     if (result == RDB_INVALID_VALUE) {
133         return false;
134     }
135     TELEPHONY_LOGI("SettingUtils: insert success");
136     settingHelper_->NotifyChange(uri);
137     return true;
138 }
139 
Update(Uri uri,const std::string & key,const std::string & value)140 bool SettingUtils::Update(Uri uri, const std::string &key, const std::string &value)
141 {
142     TELEPHONY_LOGI("SettingUtils:update");
143     if (settingHelper_ == nullptr) {
144         TELEPHONY_LOGE("settingHelper_ is null");
145         return false;
146     }
147     std::string queryValue = "";
148     bool ret = Query(uri, key, queryValue);
149     if (!ret) {
150         return Insert(uri, key, value);
151     }
152 
153     DataShare::DataShareValuesBucket valuesBucket;
154     DataShare::DataShareValueObject valueObj(value);
155     valuesBucket.Put(SETTING_VALUE, valueObj);
156     DataShare::DataSharePredicates predicates;
157     predicates.EqualTo(SETTING_KEY, key);
158     int32_t result = settingHelper_->Update(uri, predicates, valuesBucket);
159     if (result == RDB_INVALID_VALUE) {
160         return false;
161     }
162     TELEPHONY_LOGI("SettingUtils: update success");
163     settingHelper_->NotifyChange(uri);
164     return true;
165 }
166 
AutoTimeObserver(std::shared_ptr<NetworkSearchHandler> & networkSearchHandler)167 AutoTimeObserver::AutoTimeObserver(std::shared_ptr<NetworkSearchHandler> &networkSearchHandler)
168     : networkSearchHandler_(networkSearchHandler)
169 {}
170 
OnChange()171 void AutoTimeObserver::OnChange()
172 {
173     std::shared_ptr<SettingUtils> settingHelper = SettingUtils::GetInstance();
174     if (settingHelper == nullptr) {
175         TELEPHONY_LOGI("settingHelper is null");
176         return;
177     }
178 
179     TELEPHONY_LOGI("AutoTimeObserver::OnChange");
180     if (networkSearchHandler_ != nullptr) {
181         InnerEvent::Pointer event = InnerEvent::Get(SettingEventCode::MSG_AUTO_TIME);
182         networkSearchHandler_->SendEvent(event);
183     }
184 }
185 
AutoTimezoneObserver(std::shared_ptr<NetworkSearchHandler> & networkSearchHandler)186 AutoTimezoneObserver::AutoTimezoneObserver(std::shared_ptr<NetworkSearchHandler> &networkSearchHandler)
187     : networkSearchHandler_(networkSearchHandler)
188 {}
189 
OnChange()190 void AutoTimezoneObserver::OnChange()
191 {
192     std::shared_ptr<SettingUtils> settingHelper = SettingUtils::GetInstance();
193     if (settingHelper == nullptr) {
194         TELEPHONY_LOGI("settingHelper is null");
195         return;
196     }
197 
198     TELEPHONY_LOGI("AutoTimezoneObserver::OnChange");
199     if (networkSearchHandler_ != nullptr) {
200         InnerEvent::Pointer event = InnerEvent::Get(SettingEventCode::MSG_AUTO_TIMEZONE);
201         networkSearchHandler_->SendEvent(event);
202     }
203 }
204 
AirplaneModeObserver(std::shared_ptr<NetworkSearchHandler> & networkSearchHandler)205 AirplaneModeObserver::AirplaneModeObserver(std::shared_ptr<NetworkSearchHandler> &networkSearchHandler)
206     : networkSearchHandler_(networkSearchHandler)
207 {}
208 
OnChange()209 void AirplaneModeObserver::OnChange()
210 {
211     std::shared_ptr<SettingUtils> settingHelper = SettingUtils::GetInstance();
212     if (settingHelper == nullptr) {
213         TELEPHONY_LOGI("settingHelper is null");
214         return;
215     }
216 
217     TELEPHONY_LOGI("AirplaneModeObserver::OnChange");
218     if (networkSearchHandler_ != nullptr) {
219         InnerEvent::Pointer event = InnerEvent::Get(SettingEventCode::MSG_AUTO_AIRPLANE_MODE);
220         networkSearchHandler_->SendEvent(event);
221     }
222 }
223 } // namespace Telephony
224 } // namespace OHOS