• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 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 "cellular_data_settings_rdb_helper.h"
17 
18 #include "cellular_data_constant.h"
19 #include "telephony_log_wrapper.h"
20 
21 namespace OHOS {
22 namespace Telephony {
CellularDataSettingsRdbHelper()23 CellularDataSettingsRdbHelper::CellularDataSettingsRdbHelper() {}
24 
~CellularDataSettingsRdbHelper()25 CellularDataSettingsRdbHelper::~CellularDataSettingsRdbHelper() {}
26 
CreateDataAbilityHelper()27 std::shared_ptr<AppExecFwk::DataAbilityHelper> CellularDataSettingsRdbHelper::CreateDataAbilityHelper()
28 {
29     sptr<ISystemAbilityManager> saManager = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
30     if (saManager == nullptr) {
31         TELEPHONY_LOGE("CellularDataRdbHelper GetSystemAbilityManager failed.");
32         return nullptr;
33     }
34     sptr<IRemoteObject> remoteObj = saManager->GetSystemAbility(TELEPHONY_CELLULAR_DATA_SYS_ABILITY_ID);
35     if (remoteObj == nullptr) {
36         TELEPHONY_LOGE("CellularDataRdbHelper GetSystemAbility Service Failed.");
37         return nullptr;
38     }
39     return AppExecFwk::DataAbilityHelper::Creator(remoteObj);
40 }
41 
UnRegisterSettingsObserver(const Uri & uri,const sptr<AAFwk::IDataAbilityObserver> & dataObserver)42 void CellularDataSettingsRdbHelper::UnRegisterSettingsObserver(
43     const Uri &uri, const sptr<AAFwk::IDataAbilityObserver> &dataObserver)
44 {
45     std::shared_ptr<AppExecFwk::DataAbilityHelper> settingHelper = CreateDataAbilityHelper();
46     if (settingHelper == nullptr) {
47         TELEPHONY_LOGE("UnRegister settings observer failed by nullptr");
48         return;
49     }
50     settingHelper->UnregisterObserver(uri, dataObserver);
51     settingHelper->Release();
52 }
53 
RegisterSettingsObserver(const Uri & uri,const sptr<AAFwk::IDataAbilityObserver> & dataObserver)54 void CellularDataSettingsRdbHelper::RegisterSettingsObserver(
55     const Uri &uri, const sptr<AAFwk::IDataAbilityObserver> &dataObserver)
56 {
57     std::shared_ptr<AppExecFwk::DataAbilityHelper> settingHelper = CreateDataAbilityHelper();
58     if (settingHelper == nullptr) {
59         TELEPHONY_LOGE("Register settings observer by nullptr");
60         return;
61     }
62     settingHelper->RegisterObserver(uri, dataObserver);
63     settingHelper->Release();
64 }
65 
NotifyChange(const Uri & uri)66 void CellularDataSettingsRdbHelper::NotifyChange(const Uri &uri)
67 {
68     std::shared_ptr<AppExecFwk::DataAbilityHelper> settingHelper = CreateDataAbilityHelper();
69     if (settingHelper == nullptr) {
70         TELEPHONY_LOGE("notify settings changed fail by nullptr");
71         return;
72     }
73     settingHelper->NotifyChange(uri);
74     settingHelper->Release();
75 }
76 
GetValue(Uri & uri,const std::string & column)77 int CellularDataSettingsRdbHelper::GetValue(Uri &uri, const std::string &column)
78 {
79     std::shared_ptr<AppExecFwk::DataAbilityHelper> settingHelper = CreateDataAbilityHelper();
80     if (settingHelper == nullptr) {
81         TELEPHONY_LOGE("helper_ is null");
82         return NULL_POINTER_EXCEPTION;
83     }
84     NativeRdb::DataAbilityPredicates predicates;
85     std::vector<std::string> columns;
86     predicates.EqualTo(CELLULAR_DATA_COLUMN_KEYWORD, column);
87     std::shared_ptr<NativeRdb::AbsSharedResultSet> result = settingHelper->Query(uri, columns, predicates);
88     if (result == nullptr) {
89         TELEPHONY_LOGE("setting DB: query error");
90         return NULL_POINTER_EXCEPTION;
91     }
92     settingHelper->Release();
93     result->GoToFirstRow();
94     int columnIndex;
95     std::string resultValue;
96     result->GetColumnIndex(CELLULAR_DATA_COLUMN_VALUE, columnIndex);
97     result->GetString(columnIndex, resultValue);
98     result->Close();
99     TELEPHONY_LOGI("Query end resultValue is %{public}s", resultValue.c_str());
100     return resultValue.empty() ? NULL_POINTER_EXCEPTION : atoi(resultValue.c_str());
101 }
102 
PutValue(Uri & uri,const std::string & column,int value)103 void CellularDataSettingsRdbHelper::PutValue(Uri &uri, const std::string &column, int value)
104 {
105     std::shared_ptr<AppExecFwk::DataAbilityHelper> settingHelper = CreateDataAbilityHelper();
106     if (settingHelper == nullptr) {
107         TELEPHONY_LOGE("helper_ is null");
108         return;
109     }
110     int existValue = GetValue(uri, column);
111     NativeRdb::ValuesBucket bucket;
112     bucket.PutString(CELLULAR_DATA_COLUMN_VALUE, std::to_string(value));
113     bucket.PutString(CELLULAR_DATA_COLUMN_KEYWORD, column);
114     int32_t result;
115     if (existValue <= NULL_POINTER_EXCEPTION) {
116         result = settingHelper->Insert(uri, bucket);
117     } else {
118         NativeRdb::DataAbilityPredicates predicates;
119         predicates.EqualTo(CELLULAR_DATA_COLUMN_KEYWORD, column);
120         result = settingHelper->Update(uri, bucket, predicates);
121     }
122     TELEPHONY_LOGI("put value return %{public}d", result);
123     settingHelper->NotifyChange(uri);
124     settingHelper->Release();
125 }
126 } // namespace Telephony
127 } // namespace OHOS
128