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