12d43be4eSopenharmony_ci/* 22d43be4eSopenharmony_ci * Copyright (C) 2021 Huawei Device Co., Ltd. 32d43be4eSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 42d43be4eSopenharmony_ci * you may not use this file except in compliance with the License. 52d43be4eSopenharmony_ci * You may obtain a copy of the License at 62d43be4eSopenharmony_ci * 72d43be4eSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 82d43be4eSopenharmony_ci * 92d43be4eSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 102d43be4eSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 112d43be4eSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 122d43be4eSopenharmony_ci * See the License for the specific language governing permissions and 132d43be4eSopenharmony_ci * limitations under the License. 142d43be4eSopenharmony_ci */ 152d43be4eSopenharmony_ci 162d43be4eSopenharmony_ci#include "data_switch_settings.h" 172d43be4eSopenharmony_ci 182d43be4eSopenharmony_ci#include "cellular_data_constant.h" 192d43be4eSopenharmony_ci#include "cellular_data_error.h" 202d43be4eSopenharmony_ci#include "cellular_data_settings_rdb_helper.h" 212d43be4eSopenharmony_ci#include "core_manager_inner.h" 222d43be4eSopenharmony_ci#include "telephony_log_wrapper.h" 232d43be4eSopenharmony_ci 242d43be4eSopenharmony_cinamespace OHOS { 252d43be4eSopenharmony_cinamespace Telephony { 262d43be4eSopenharmony_ciDataSwitchSettings::DataSwitchSettings(int32_t slotId) : slotId_(slotId) {} 272d43be4eSopenharmony_ci 282d43be4eSopenharmony_civoid DataSwitchSettings::LoadSwitchValue() 292d43be4eSopenharmony_ci{ 302d43be4eSopenharmony_ci bool dataEnabled = false; 312d43be4eSopenharmony_ci bool dataRoamingEnabled = false; 322d43be4eSopenharmony_ci QueryUserDataStatus(dataEnabled); 332d43be4eSopenharmony_ci QueryUserDataRoamingStatus(dataRoamingEnabled); 342d43be4eSopenharmony_ci TELEPHONY_LOGI("slotId:%{public}d userDataOn_:%{public}d userDataRoaming_:%{public}d policyDataOn_:%{public}d", 352d43be4eSopenharmony_ci slotId_, userDataOn_, userDataRoaming_, policyDataOn_); 362d43be4eSopenharmony_ci} 372d43be4eSopenharmony_ci 382d43be4eSopenharmony_cibool DataSwitchSettings::IsInternalDataOn() const 392d43be4eSopenharmony_ci{ 402d43be4eSopenharmony_ci return internalDataOn_; 412d43be4eSopenharmony_ci} 422d43be4eSopenharmony_ci 432d43be4eSopenharmony_civoid DataSwitchSettings::SetInternalDataOn(bool internalDataOn) 442d43be4eSopenharmony_ci{ 452d43be4eSopenharmony_ci internalDataOn_ = internalDataOn; 462d43be4eSopenharmony_ci} 472d43be4eSopenharmony_ci 482d43be4eSopenharmony_ciint32_t DataSwitchSettings::SetUserDataOn(bool userDataOn) 492d43be4eSopenharmony_ci{ 502d43be4eSopenharmony_ci // For the VSIM card, no need to save switch state. 512d43be4eSopenharmony_ci if (slotId_ == CELLULAR_DATA_VSIM_SLOT_ID) { 522d43be4eSopenharmony_ci TELEPHONY_LOGI("SetUserDataOn, no need for slot %{public}d", slotId_); 532d43be4eSopenharmony_ci return TELEPHONY_ERR_SUCCESS; 542d43be4eSopenharmony_ci } 552d43be4eSopenharmony_ci std::shared_ptr<CellularDataSettingsRdbHelper> settingsRdbHelper = CellularDataSettingsRdbHelper::GetInstance(); 562d43be4eSopenharmony_ci if (settingsRdbHelper == nullptr) { 572d43be4eSopenharmony_ci TELEPHONY_LOGE("settingsRdbHelper == nullptr!"); 582d43be4eSopenharmony_ci return TELEPHONY_ERR_LOCAL_PTR_NULL; 592d43be4eSopenharmony_ci } 602d43be4eSopenharmony_ci int value = (userDataOn ? static_cast<int>(DataSwitchCode::CELLULAR_DATA_ENABLED) 612d43be4eSopenharmony_ci : static_cast<int>(DataSwitchCode::CELLULAR_DATA_DISABLED)); 622d43be4eSopenharmony_ci TELEPHONY_LOGI("value:%{public}d", value); 632d43be4eSopenharmony_ci Uri userDataEnableUri(CELLULAR_DATA_SETTING_DATA_ENABLE_URI); 642d43be4eSopenharmony_ci int32_t result = settingsRdbHelper->PutValue(userDataEnableUri, CELLULAR_DATA_COLUMN_ENABLE, value); 652d43be4eSopenharmony_ci if (result == TELEPHONY_ERR_SUCCESS) { 662d43be4eSopenharmony_ci userDataOn_ = userDataOn; 672d43be4eSopenharmony_ci } 682d43be4eSopenharmony_ci return result; 692d43be4eSopenharmony_ci} 702d43be4eSopenharmony_ci 712d43be4eSopenharmony_ciint32_t DataSwitchSettings::SetIntelliSwitchOn(bool userSwitchOn) 722d43be4eSopenharmony_ci{ 732d43be4eSopenharmony_ci std::shared_ptr<CellularDataSettingsRdbHelper> settingsRdbHelper = CellularDataSettingsRdbHelper::GetInstance(); 742d43be4eSopenharmony_ci if (settingsRdbHelper == nullptr) { 752d43be4eSopenharmony_ci TELEPHONY_LOGE("settingsRdbHelper == nullptr!"); 762d43be4eSopenharmony_ci return TELEPHONY_ERR_LOCAL_PTR_NULL; 772d43be4eSopenharmony_ci } 782d43be4eSopenharmony_ci int value = (userSwitchOn ? static_cast<int>(IntelligenceSwitchCode::INTELLIGENCE_SWITCH_ENABLED) 792d43be4eSopenharmony_ci : static_cast<int>(IntelligenceSwitchCode::INTELLIGENCE_SWITCH_DISABLED)); 802d43be4eSopenharmony_ci TELEPHONY_LOGI("value:%{public}d", value); 812d43be4eSopenharmony_ci Uri intelliSwitchEnableUri(CELLULAR_DATA_SETTING_INTELLIGENCE_SWITCH_URI); 822d43be4eSopenharmony_ci int32_t result = settingsRdbHelper->PutValue(intelliSwitchEnableUri, INTELLIGENCE_SWITCH_COLUMN_ENABLE, value); 832d43be4eSopenharmony_ci if (result == TELEPHONY_ERR_SUCCESS) { 842d43be4eSopenharmony_ci intelliSwitchOn_ = userSwitchOn; 852d43be4eSopenharmony_ci } 862d43be4eSopenharmony_ci return result; 872d43be4eSopenharmony_ci} 882d43be4eSopenharmony_ci 892d43be4eSopenharmony_ciint32_t DataSwitchSettings::QueryUserDataStatus(bool &dataEnabled) 902d43be4eSopenharmony_ci{ 912d43be4eSopenharmony_ci // For the VSIM card, the cellular data switch is always ON. 922d43be4eSopenharmony_ci if (slotId_ == CELLULAR_DATA_VSIM_SLOT_ID) { 932d43be4eSopenharmony_ci userDataOn_ = true; 942d43be4eSopenharmony_ci dataEnabled = true; 952d43be4eSopenharmony_ci return TELEPHONY_ERR_SUCCESS; 962d43be4eSopenharmony_ci } 972d43be4eSopenharmony_ci std::shared_ptr<CellularDataSettingsRdbHelper> settingsRdbHelper = CellularDataSettingsRdbHelper::GetInstance(); 982d43be4eSopenharmony_ci if (settingsRdbHelper == nullptr) { 992d43be4eSopenharmony_ci TELEPHONY_LOGE("settingsRdbHelper is nullptr!"); 1002d43be4eSopenharmony_ci return TELEPHONY_ERR_LOCAL_PTR_NULL; 1012d43be4eSopenharmony_ci } 1022d43be4eSopenharmony_ci Uri userDataEnableUri(CELLULAR_DATA_SETTING_DATA_ENABLE_URI); 1032d43be4eSopenharmony_ci int32_t userDataEnable = static_cast<int32_t>(DataSwitchCode::CELLULAR_DATA_ENABLED); 1042d43be4eSopenharmony_ci int32_t ret = settingsRdbHelper->GetValue(userDataEnableUri, CELLULAR_DATA_COLUMN_ENABLE, userDataEnable); 1052d43be4eSopenharmony_ci if (ret != TELEPHONY_ERR_SUCCESS) { 1062d43be4eSopenharmony_ci TELEPHONY_LOGE("Slot%{public}d: Get data Value failed!", slotId_); 1072d43be4eSopenharmony_ci return TELEPHONY_ERR_LOCAL_PTR_NULL; 1082d43be4eSopenharmony_ci } 1092d43be4eSopenharmony_ci userDataOn_ = (userDataEnable == static_cast<int32_t>(DataSwitchCode::CELLULAR_DATA_ENABLED)); 1102d43be4eSopenharmony_ci dataEnabled = userDataOn_; 1112d43be4eSopenharmony_ci return TELEPHONY_ERR_SUCCESS; 1122d43be4eSopenharmony_ci} 1132d43be4eSopenharmony_ci 1142d43be4eSopenharmony_ciint32_t DataSwitchSettings::QueryIntelligenceSwitchStatus(bool &switchEnabled) 1152d43be4eSopenharmony_ci{ 1162d43be4eSopenharmony_ci std::shared_ptr<CellularDataSettingsRdbHelper> settingsRdbHelper = CellularDataSettingsRdbHelper::GetInstance(); 1172d43be4eSopenharmony_ci if (settingsRdbHelper == nullptr) { 1182d43be4eSopenharmony_ci TELEPHONY_LOGE("settingsRdbHelper is nullptr!"); 1192d43be4eSopenharmony_ci return TELEPHONY_ERR_LOCAL_PTR_NULL; 1202d43be4eSopenharmony_ci } 1212d43be4eSopenharmony_ci Uri intelliSwitchEnableUri(CELLULAR_DATA_SETTING_INTELLIGENCE_SWITCH_URI); 1222d43be4eSopenharmony_ci int32_t intelliSwitchEnable = static_cast<int32_t>(IntelligenceSwitchCode::INTELLIGENCE_SWITCH_DISABLED); 1232d43be4eSopenharmony_ci int32_t ret = settingsRdbHelper->GetValue(intelliSwitchEnableUri, 1242d43be4eSopenharmony_ci INTELLIGENCE_SWITCH_COLUMN_ENABLE, intelliSwitchEnable); 1252d43be4eSopenharmony_ci if (ret != TELEPHONY_ERR_SUCCESS) { 1262d43be4eSopenharmony_ci TELEPHONY_LOGE("GetValue failed!"); 1272d43be4eSopenharmony_ci } 1282d43be4eSopenharmony_ci intelliSwitchOn_ = 1292d43be4eSopenharmony_ci (intelliSwitchEnable == static_cast<int32_t>(IntelligenceSwitchCode::INTELLIGENCE_SWITCH_ENABLED)); 1302d43be4eSopenharmony_ci switchEnabled = intelliSwitchOn_; 1312d43be4eSopenharmony_ci return TELEPHONY_ERR_SUCCESS; 1322d43be4eSopenharmony_ci} 1332d43be4eSopenharmony_ci 1342d43be4eSopenharmony_ciint32_t DataSwitchSettings::SetUserDataRoamingOn(bool dataRoamingEnabled) 1352d43be4eSopenharmony_ci{ 1362d43be4eSopenharmony_ci // For the VSIM card, no need to save switch state. 1372d43be4eSopenharmony_ci if (slotId_ == CELLULAR_DATA_VSIM_SLOT_ID) { 1382d43be4eSopenharmony_ci TELEPHONY_LOGI("SetUserDataRoamingOn, no need for slot %{public}d", slotId_); 1392d43be4eSopenharmony_ci return TELEPHONY_ERR_SUCCESS; 1402d43be4eSopenharmony_ci } 1412d43be4eSopenharmony_ci std::shared_ptr<CellularDataSettingsRdbHelper> settingsRdbHelper = CellularDataSettingsRdbHelper::GetInstance(); 1422d43be4eSopenharmony_ci if (settingsRdbHelper == nullptr) { 1432d43be4eSopenharmony_ci TELEPHONY_LOGE("settingsRdbHelper is nullptr!"); 1442d43be4eSopenharmony_ci return TELEPHONY_ERR_LOCAL_PTR_NULL; 1452d43be4eSopenharmony_ci } 1462d43be4eSopenharmony_ci int32_t simId = CoreManagerInner::GetInstance().GetSimId(slotId_); 1472d43be4eSopenharmony_ci if (simId <= INVALID_SIM_ID) { 1482d43be4eSopenharmony_ci TELEPHONY_LOGE("Slot%{public}d: failed due to invalid sim id %{public}d", slotId_, simId); 1492d43be4eSopenharmony_ci return TELEPHONY_ERR_SLOTID_INVALID; 1502d43be4eSopenharmony_ci } 1512d43be4eSopenharmony_ci int value = (dataRoamingEnabled ? static_cast<int>(RoamingSwitchCode::CELLULAR_DATA_ROAMING_ENABLED) 1522d43be4eSopenharmony_ci : static_cast<int>(RoamingSwitchCode::CELLULAR_DATA_ROAMING_DISABLED)); 1532d43be4eSopenharmony_ci TELEPHONY_LOGI("value:%{public}d", value); 1542d43be4eSopenharmony_ci Uri userDataRoamingUri(std::string(CELLULAR_DATA_SETTING_DATA_ROAMING_URI) + std::to_string(simId)); 1552d43be4eSopenharmony_ci int32_t result = settingsRdbHelper->PutValue( 1562d43be4eSopenharmony_ci userDataRoamingUri, std::string(CELLULAR_DATA_COLUMN_ROAMING) + std::to_string(simId), value); 1572d43be4eSopenharmony_ci if (result == TELEPHONY_ERR_SUCCESS) { 1582d43be4eSopenharmony_ci userDataRoaming_ = dataRoamingEnabled; 1592d43be4eSopenharmony_ci } 1602d43be4eSopenharmony_ci return result; 1612d43be4eSopenharmony_ci} 1622d43be4eSopenharmony_ci 1632d43be4eSopenharmony_ciint32_t DataSwitchSettings::QueryUserDataRoamingStatus(bool &dataRoamingEnabled) 1642d43be4eSopenharmony_ci{ 1652d43be4eSopenharmony_ci // For the VSIM card, the cellular data roaming switch is always ON. 1662d43be4eSopenharmony_ci if (slotId_ == CELLULAR_DATA_VSIM_SLOT_ID) { 1672d43be4eSopenharmony_ci userDataRoaming_ = true; 1682d43be4eSopenharmony_ci dataRoamingEnabled = true; 1692d43be4eSopenharmony_ci return TELEPHONY_ERR_SUCCESS; 1702d43be4eSopenharmony_ci } 1712d43be4eSopenharmony_ci std::shared_ptr<CellularDataSettingsRdbHelper> settingsRdbHelper = CellularDataSettingsRdbHelper::GetInstance(); 1722d43be4eSopenharmony_ci if (settingsRdbHelper == nullptr) { 1732d43be4eSopenharmony_ci TELEPHONY_LOGE("settingsRdbHelper is nullptr!"); 1742d43be4eSopenharmony_ci return TELEPHONY_ERR_LOCAL_PTR_NULL; 1752d43be4eSopenharmony_ci } 1762d43be4eSopenharmony_ci int32_t simId = CoreManagerInner::GetInstance().GetSimId(slotId_); 1772d43be4eSopenharmony_ci if (simId <= INVALID_SIM_ID) { 1782d43be4eSopenharmony_ci TELEPHONY_LOGE("Slot%{public}d: invalid sim id %{public}d", slotId_, simId); 1792d43be4eSopenharmony_ci return TELEPHONY_ERR_LOCAL_PTR_NULL; 1802d43be4eSopenharmony_ci } 1812d43be4eSopenharmony_ci Uri userDataRoamingUri(std::string(CELLULAR_DATA_SETTING_DATA_ROAMING_URI) + std::to_string(simId)); 1822d43be4eSopenharmony_ci int32_t userDataRoamingValue = static_cast<int32_t>(RoamingSwitchCode::CELLULAR_DATA_ROAMING_DISABLED); 1832d43be4eSopenharmony_ci int32_t ret = settingsRdbHelper->GetValue( 1842d43be4eSopenharmony_ci userDataRoamingUri, std::string(CELLULAR_DATA_COLUMN_ROAMING) + std::to_string(simId), userDataRoamingValue); 1852d43be4eSopenharmony_ci if (ret != TELEPHONY_ERR_SUCCESS) { 1862d43be4eSopenharmony_ci TELEPHONY_LOGE("GetValue failed!"); 1872d43be4eSopenharmony_ci return ret; 1882d43be4eSopenharmony_ci } 1892d43be4eSopenharmony_ci userDataRoaming_ = (userDataRoamingValue == static_cast<int32_t>(RoamingSwitchCode::CELLULAR_DATA_ROAMING_ENABLED)); 1902d43be4eSopenharmony_ci dataRoamingEnabled = userDataRoaming_; 1912d43be4eSopenharmony_ci return TELEPHONY_ERR_SUCCESS; 1922d43be4eSopenharmony_ci} 1932d43be4eSopenharmony_ci 1942d43be4eSopenharmony_cibool DataSwitchSettings::IsPolicyDataOn() const 1952d43be4eSopenharmony_ci{ 1962d43be4eSopenharmony_ci return policyDataOn_; 1972d43be4eSopenharmony_ci} 1982d43be4eSopenharmony_ci 1992d43be4eSopenharmony_civoid DataSwitchSettings::SetPolicyDataOn(bool policyDataOn) 2002d43be4eSopenharmony_ci{ 2012d43be4eSopenharmony_ci policyDataOn_ = policyDataOn; 2022d43be4eSopenharmony_ci} 2032d43be4eSopenharmony_ci 2042d43be4eSopenharmony_cibool DataSwitchSettings::IsCarrierDataOn() const 2052d43be4eSopenharmony_ci{ 2062d43be4eSopenharmony_ci return carrierDataOn_; 2072d43be4eSopenharmony_ci} 2082d43be4eSopenharmony_ci 2092d43be4eSopenharmony_civoid DataSwitchSettings::SetCarrierDataOn(bool carrierDataOn) 2102d43be4eSopenharmony_ci{ 2112d43be4eSopenharmony_ci carrierDataOn_ = carrierDataOn; 2122d43be4eSopenharmony_ci} 2132d43be4eSopenharmony_ci 2142d43be4eSopenharmony_cibool DataSwitchSettings::IsAllowActiveData() const 2152d43be4eSopenharmony_ci{ 2162d43be4eSopenharmony_ci if (userDataOn_ && policyDataOn_ && internalDataOn_) { 2172d43be4eSopenharmony_ci return true; 2182d43be4eSopenharmony_ci } else { 2192d43be4eSopenharmony_ci TELEPHONY_LOGD("Activation not allowed[user:%{public}d policy:%{public}d internal:%{public}d]", userDataOn_, 2202d43be4eSopenharmony_ci policyDataOn_, internalDataOn_); 2212d43be4eSopenharmony_ci return false; 2222d43be4eSopenharmony_ci } 2232d43be4eSopenharmony_ci} 2242d43be4eSopenharmony_ci 2252d43be4eSopenharmony_cibool DataSwitchSettings::IsUserDataOn() 2262d43be4eSopenharmony_ci{ 2272d43be4eSopenharmony_ci return userDataOn_; 2282d43be4eSopenharmony_ci} 2292d43be4eSopenharmony_ci 2302d43be4eSopenharmony_cibool DataSwitchSettings::IsUserDataRoamingOn() 2312d43be4eSopenharmony_ci{ 2322d43be4eSopenharmony_ci return userDataRoaming_; 2332d43be4eSopenharmony_ci} 2342d43be4eSopenharmony_ci 2352d43be4eSopenharmony_civoid DataSwitchSettings::UpdateUserDataRoamingOn(bool dataRoaming) 2362d43be4eSopenharmony_ci{ 2372d43be4eSopenharmony_ci userDataRoaming_ = dataRoaming; 2382d43be4eSopenharmony_ci} 2392d43be4eSopenharmony_ci} // namespace Telephony 2402d43be4eSopenharmony_ci} // namespace OHOS