/* * Copyright (C) 2021 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "cellular_data_settings_rdb_helper.h" #include "cellular_data_constant.h" #include "telephony_log_wrapper.h" namespace OHOS { namespace Telephony { CellularDataSettingsRdbHelper::CellularDataSettingsRdbHelper() {} CellularDataSettingsRdbHelper::~CellularDataSettingsRdbHelper() {} std::shared_ptr CellularDataSettingsRdbHelper::CreateDataAbilityHelper() { sptr saManager = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); if (saManager == nullptr) { TELEPHONY_LOGE("CellularDataRdbHelper GetSystemAbilityManager failed."); return nullptr; } sptr remoteObj = saManager->GetSystemAbility(TELEPHONY_CELLULAR_DATA_SYS_ABILITY_ID); if (remoteObj == nullptr) { TELEPHONY_LOGE("CellularDataRdbHelper GetSystemAbility Service Failed."); return nullptr; } return AppExecFwk::DataAbilityHelper::Creator(remoteObj); } void CellularDataSettingsRdbHelper::UnRegisterSettingsObserver( const Uri &uri, const sptr &dataObserver) { std::shared_ptr settingHelper = CreateDataAbilityHelper(); if (settingHelper == nullptr) { TELEPHONY_LOGE("UnRegister settings observer failed by nullptr"); return; } settingHelper->UnregisterObserver(uri, dataObserver); settingHelper->Release(); } void CellularDataSettingsRdbHelper::RegisterSettingsObserver( const Uri &uri, const sptr &dataObserver) { std::shared_ptr settingHelper = CreateDataAbilityHelper(); if (settingHelper == nullptr) { TELEPHONY_LOGE("Register settings observer by nullptr"); return; } settingHelper->RegisterObserver(uri, dataObserver); settingHelper->Release(); } void CellularDataSettingsRdbHelper::NotifyChange(const Uri &uri) { std::shared_ptr settingHelper = CreateDataAbilityHelper(); if (settingHelper == nullptr) { TELEPHONY_LOGE("notify settings changed fail by nullptr"); return; } settingHelper->NotifyChange(uri); settingHelper->Release(); } int CellularDataSettingsRdbHelper::GetValue(Uri &uri, const std::string &column) { std::shared_ptr settingHelper = CreateDataAbilityHelper(); if (settingHelper == nullptr) { TELEPHONY_LOGE("helper_ is null"); return NULL_POINTER_EXCEPTION; } NativeRdb::DataAbilityPredicates predicates; std::vector columns; predicates.EqualTo(CELLULAR_DATA_COLUMN_KEYWORD, column); std::shared_ptr result = settingHelper->Query(uri, columns, predicates); if (result == nullptr) { TELEPHONY_LOGE("setting DB: query error"); return NULL_POINTER_EXCEPTION; } settingHelper->Release(); result->GoToFirstRow(); int columnIndex; std::string resultValue; result->GetColumnIndex(CELLULAR_DATA_COLUMN_VALUE, columnIndex); result->GetString(columnIndex, resultValue); result->Close(); TELEPHONY_LOGI("Query end resultValue is %{public}s", resultValue.c_str()); return resultValue.empty() ? NULL_POINTER_EXCEPTION : atoi(resultValue.c_str()); } void CellularDataSettingsRdbHelper::PutValue(Uri &uri, const std::string &column, int value) { std::shared_ptr settingHelper = CreateDataAbilityHelper(); if (settingHelper == nullptr) { TELEPHONY_LOGE("helper_ is null"); return; } int existValue = GetValue(uri, column); NativeRdb::ValuesBucket bucket; bucket.PutString(CELLULAR_DATA_COLUMN_VALUE, std::to_string(value)); bucket.PutString(CELLULAR_DATA_COLUMN_KEYWORD, column); int32_t result; if (existValue <= NULL_POINTER_EXCEPTION) { result = settingHelper->Insert(uri, bucket); } else { NativeRdb::DataAbilityPredicates predicates; predicates.EqualTo(CELLULAR_DATA_COLUMN_KEYWORD, column); result = settingHelper->Update(uri, bucket, predicates); } TELEPHONY_LOGI("put value return %{public}d", result); settingHelper->NotifyChange(uri); settingHelper->Release(); } } // namespace Telephony } // namespace OHOS