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