125c1cde8Sopenharmony_ci/* 225c1cde8Sopenharmony_ci * Copyright (C) 2021 Huawei Device Co., Ltd. 325c1cde8Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 425c1cde8Sopenharmony_ci * you may not use this file except in compliance with the License. 525c1cde8Sopenharmony_ci * You may obtain a copy of the License at 625c1cde8Sopenharmony_ci * 725c1cde8Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 825c1cde8Sopenharmony_ci * 925c1cde8Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1025c1cde8Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1125c1cde8Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1225c1cde8Sopenharmony_ci * See the License for the specific language governing permissions and 1325c1cde8Sopenharmony_ci * limitations under the License. 1425c1cde8Sopenharmony_ci */ 1525c1cde8Sopenharmony_ci 1625c1cde8Sopenharmony_ci#include "rdb_sim_helper.h" 1725c1cde8Sopenharmony_ci 1825c1cde8Sopenharmony_ci#include "data_storage_errors.h" 1925c1cde8Sopenharmony_ci#include "data_storage_log_wrapper.h" 2025c1cde8Sopenharmony_ci#include "rdb_errno.h" 2125c1cde8Sopenharmony_ci#include "rdb_sim_callback.h" 2225c1cde8Sopenharmony_ci#include "rdb_store_config.h" 2325c1cde8Sopenharmony_ci#include "sim_data.h" 2425c1cde8Sopenharmony_ci#include "values_bucket.h" 2525c1cde8Sopenharmony_ci#include "vector" 2625c1cde8Sopenharmony_ci 2725c1cde8Sopenharmony_cinamespace OHOS { 2825c1cde8Sopenharmony_cinamespace Telephony { 2925c1cde8Sopenharmony_ciRdbSimHelper::RdbSimHelper() {} 3025c1cde8Sopenharmony_ci 3125c1cde8Sopenharmony_ciint RdbSimHelper::Init() 3225c1cde8Sopenharmony_ci{ 3325c1cde8Sopenharmony_ci int errCode = NativeRdb::E_OK; 3425c1cde8Sopenharmony_ci NativeRdb::RdbStoreConfig config(dbPath_); 3525c1cde8Sopenharmony_ci config.SetJournalMode(NativeRdb::JournalMode::MODE_TRUNCATE); 3625c1cde8Sopenharmony_ci std::string simInfoStr; 3725c1cde8Sopenharmony_ci CreateSimInfoTableStr(simInfoStr); 3825c1cde8Sopenharmony_ci std::vector<std::string> createTableVec; 3925c1cde8Sopenharmony_ci createTableVec.push_back(simInfoStr); 4025c1cde8Sopenharmony_ci RdbSimCallback callback(createTableVec); 4125c1cde8Sopenharmony_ci CreateRdbStore(config, VERSION, callback, errCode); 4225c1cde8Sopenharmony_ci return errCode; 4325c1cde8Sopenharmony_ci} 4425c1cde8Sopenharmony_ci 4525c1cde8Sopenharmony_civoid RdbSimHelper::UpdateDbPath(const std::string &path) 4625c1cde8Sopenharmony_ci{ 4725c1cde8Sopenharmony_ci dbPath_ = path + DB_NAME; 4825c1cde8Sopenharmony_ci} 4925c1cde8Sopenharmony_ci 5025c1cde8Sopenharmony_civoid RdbSimHelper::CreateSimInfoTableStr(std::string &createTableStr) 5125c1cde8Sopenharmony_ci{ 5225c1cde8Sopenharmony_ci createTableStr.append("CREATE TABLE IF NOT EXISTS ").append(TABLE_SIM_INFO); 5325c1cde8Sopenharmony_ci createTableStr.append("(").append(SimData::SIM_ID).append(" INTEGER PRIMARY KEY AUTOINCREMENT, "); 5425c1cde8Sopenharmony_ci createTableStr.append(SimData::ICC_ID).append(" TEXT NOT NULL, "); 5525c1cde8Sopenharmony_ci createTableStr.append(SimData::CARD_ID).append(" TEXT NOT NULL, "); 5625c1cde8Sopenharmony_ci createTableStr.append(SimData::SLOT_INDEX).append(" INTEGER DEFAULT -1, "); 5725c1cde8Sopenharmony_ci createTableStr.append(SimData::SHOW_NAME).append(" TEXT DEFAULT '', "); 5825c1cde8Sopenharmony_ci createTableStr.append(SimData::PHONE_NUMBER).append(" TEXT DEFAULT '', "); 5925c1cde8Sopenharmony_ci createTableStr.append(SimData::COUNTRY_CODE).append(" TEXT DEFAULT '', "); 6025c1cde8Sopenharmony_ci createTableStr.append(SimData::IMSI).append(" TEXT DEFAULT '', "); 6125c1cde8Sopenharmony_ci createTableStr.append(SimData::IS_MAIN_CARD).append(" INTEGER DEFAULT 0, "); 6225c1cde8Sopenharmony_ci createTableStr.append(SimData::IS_VOICE_CARD).append(" INTEGER DEFAULT 0, "); 6325c1cde8Sopenharmony_ci createTableStr.append(SimData::IS_MESSAGE_CARD).append(" INTEGER DEFAULT 0, "); 6425c1cde8Sopenharmony_ci createTableStr.append(SimData::IS_CELLULAR_DATA_CARD).append(" INTEGER DEFAULT 0, "); 6525c1cde8Sopenharmony_ci createTableStr.append(SimData::IS_ACTIVE).append(" INTEGER DEFAULT 1, "); 6625c1cde8Sopenharmony_ci createTableStr.append(SimData::CARD_TYPE).append(" INTEGER , "); 6725c1cde8Sopenharmony_ci createTableStr.append(SimData::IMS_SWITCH).append(" INTEGER DEFAULT -1, "); 6825c1cde8Sopenharmony_ci createTableStr.append(SimData::LANGUAGE).append(" TEXT DEFAULT '', "); 6925c1cde8Sopenharmony_ci createTableStr.append(SimData::OPKEY).append(" TEXT DEFAULT '', "); 7025c1cde8Sopenharmony_ci createTableStr.append(SimData::MCC).append(" TEXT DEFAULT '', "); 7125c1cde8Sopenharmony_ci createTableStr.append(SimData::MNC).append(" TEXT DEFAULT '', "); 7225c1cde8Sopenharmony_ci createTableStr.append("UNIQUE ("); 7325c1cde8Sopenharmony_ci createTableStr.append(SimData::ICC_ID).append(", "); 7425c1cde8Sopenharmony_ci createTableStr.append(SimData::CARD_ID).append("))"); 7525c1cde8Sopenharmony_ci} 7625c1cde8Sopenharmony_ci 7725c1cde8Sopenharmony_ciint32_t RdbSimHelper::SetDefaultCardByType(int32_t simId, int32_t type) 7825c1cde8Sopenharmony_ci{ 7925c1cde8Sopenharmony_ci int result = BeginTransaction(); 8025c1cde8Sopenharmony_ci if (result != NativeRdb::E_OK) { 8125c1cde8Sopenharmony_ci DATA_STORAGE_LOGE("RdbSimHelper::SetDefaultCardByType BeginTransaction is error!"); 8225c1cde8Sopenharmony_ci return result; 8325c1cde8Sopenharmony_ci } 8425c1cde8Sopenharmony_ci int updateState = 0; 8525c1cde8Sopenharmony_ci int whereState = 1; 8625c1cde8Sopenharmony_ci result = UpdateCardStateByType(type, updateState, whereState); 8725c1cde8Sopenharmony_ci if (result != NativeRdb::E_OK) { 8825c1cde8Sopenharmony_ci DATA_STORAGE_LOGE("RdbSimHelper::SetDefaultCardByType UpdateCardStateByType is error!"); 8925c1cde8Sopenharmony_ci return result; 9025c1cde8Sopenharmony_ci } 9125c1cde8Sopenharmony_ci int changedRows = 0; 9225c1cde8Sopenharmony_ci NativeRdb::ValuesBucket values; 9325c1cde8Sopenharmony_ci switch (type) { 9425c1cde8Sopenharmony_ci case static_cast<int32_t>(SimCardType::MAIN): { 9525c1cde8Sopenharmony_ci values.PutInt(SimData::IS_MAIN_CARD, 1); 9625c1cde8Sopenharmony_ci break; 9725c1cde8Sopenharmony_ci } 9825c1cde8Sopenharmony_ci case static_cast<int32_t>(SimCardType::VOICE): { 9925c1cde8Sopenharmony_ci values.PutInt(SimData::IS_VOICE_CARD, 1); 10025c1cde8Sopenharmony_ci break; 10125c1cde8Sopenharmony_ci } 10225c1cde8Sopenharmony_ci case static_cast<int32_t>(SimCardType::MESSAGE): { 10325c1cde8Sopenharmony_ci values.PutInt(SimData::IS_MESSAGE_CARD, 1); 10425c1cde8Sopenharmony_ci break; 10525c1cde8Sopenharmony_ci } 10625c1cde8Sopenharmony_ci case static_cast<int32_t>(SimCardType::CELLULAR_DATA): { 10725c1cde8Sopenharmony_ci values.PutInt(SimData::IS_CELLULAR_DATA_CARD, 1); 10825c1cde8Sopenharmony_ci break; 10925c1cde8Sopenharmony_ci } 11025c1cde8Sopenharmony_ci default: 11125c1cde8Sopenharmony_ci DATA_STORAGE_LOGE("RdbSimHelper::SetDefaultDataByType is error!"); 11225c1cde8Sopenharmony_ci return DATA_STORAGE_ERROR; 11325c1cde8Sopenharmony_ci } 11425c1cde8Sopenharmony_ci std::string whereClause; 11525c1cde8Sopenharmony_ci whereClause.append(SimData::SIM_ID).append("=").append(std::to_string(simId)); 11625c1cde8Sopenharmony_ci result = Update(changedRows, TABLE_SIM_INFO, values, whereClause); 11725c1cde8Sopenharmony_ci if (result != NativeRdb::E_OK) { 11825c1cde8Sopenharmony_ci DATA_STORAGE_LOGE("RdbSimHelper::SetDefaultCardByType Update is error!"); 11925c1cde8Sopenharmony_ci } 12025c1cde8Sopenharmony_ci result = CommitTransactionAction(); 12125c1cde8Sopenharmony_ci return result; 12225c1cde8Sopenharmony_ci} 12325c1cde8Sopenharmony_ci 12425c1cde8Sopenharmony_ciint32_t RdbSimHelper::UpdateCardStateByType(int32_t type, int32_t updateState, int32_t whereSate) 12525c1cde8Sopenharmony_ci{ 12625c1cde8Sopenharmony_ci int32_t result = DATA_STORAGE_ERROR; 12725c1cde8Sopenharmony_ci bool isExist = false; 12825c1cde8Sopenharmony_ci NativeRdb::ValuesBucket values; 12925c1cde8Sopenharmony_ci std::string whereClause; 13025c1cde8Sopenharmony_ci switch (type) { 13125c1cde8Sopenharmony_ci case static_cast<int32_t>(SimCardType::MAIN): { 13225c1cde8Sopenharmony_ci isExist = true; 13325c1cde8Sopenharmony_ci values.PutInt(SimData::IS_MAIN_CARD, updateState); 13425c1cde8Sopenharmony_ci whereClause.append(SimData::IS_MAIN_CARD).append("=").append(std::to_string(whereSate)); 13525c1cde8Sopenharmony_ci break; 13625c1cde8Sopenharmony_ci } 13725c1cde8Sopenharmony_ci case static_cast<int32_t>(SimCardType::VOICE): { 13825c1cde8Sopenharmony_ci isExist = true; 13925c1cde8Sopenharmony_ci values.PutInt(SimData::IS_VOICE_CARD, updateState); 14025c1cde8Sopenharmony_ci whereClause.append(SimData::IS_VOICE_CARD).append("=").append(std::to_string(whereSate)); 14125c1cde8Sopenharmony_ci break; 14225c1cde8Sopenharmony_ci } 14325c1cde8Sopenharmony_ci case static_cast<int32_t>(SimCardType::MESSAGE): { 14425c1cde8Sopenharmony_ci isExist = true; 14525c1cde8Sopenharmony_ci values.PutInt(SimData::IS_MESSAGE_CARD, updateState); 14625c1cde8Sopenharmony_ci whereClause.append(SimData::IS_MESSAGE_CARD).append("=").append(std::to_string(whereSate)); 14725c1cde8Sopenharmony_ci break; 14825c1cde8Sopenharmony_ci } 14925c1cde8Sopenharmony_ci case static_cast<int32_t>(SimCardType::CELLULAR_DATA): { 15025c1cde8Sopenharmony_ci isExist = true; 15125c1cde8Sopenharmony_ci values.PutInt(SimData::IS_CELLULAR_DATA_CARD, updateState); 15225c1cde8Sopenharmony_ci whereClause.append(SimData::IS_CELLULAR_DATA_CARD).append("=").append(std::to_string(whereSate)); 15325c1cde8Sopenharmony_ci break; 15425c1cde8Sopenharmony_ci } 15525c1cde8Sopenharmony_ci default: 15625c1cde8Sopenharmony_ci break; 15725c1cde8Sopenharmony_ci } 15825c1cde8Sopenharmony_ci if (isExist) { 15925c1cde8Sopenharmony_ci int changedRows = 0; 16025c1cde8Sopenharmony_ci return Update(changedRows, TABLE_SIM_INFO, values, whereClause); 16125c1cde8Sopenharmony_ci } 16225c1cde8Sopenharmony_ci return result; 16325c1cde8Sopenharmony_ci} 16425c1cde8Sopenharmony_ci 16525c1cde8Sopenharmony_ciint RdbSimHelper::CommitTransactionAction() 16625c1cde8Sopenharmony_ci{ 16725c1cde8Sopenharmony_ci int result = Commit(); 16825c1cde8Sopenharmony_ci if (result != NativeRdb::E_OK) { 16925c1cde8Sopenharmony_ci RollBack(); 17025c1cde8Sopenharmony_ci } 17125c1cde8Sopenharmony_ci return result; 17225c1cde8Sopenharmony_ci} 17325c1cde8Sopenharmony_ci 17425c1cde8Sopenharmony_ciint32_t RdbSimHelper::ClearData() 17525c1cde8Sopenharmony_ci{ 17625c1cde8Sopenharmony_ci std::string sql; 17725c1cde8Sopenharmony_ci sql.append("delete from ").append(TABLE_SIM_INFO); 17825c1cde8Sopenharmony_ci return ExecuteSql(sql); 17925c1cde8Sopenharmony_ci} 18025c1cde8Sopenharmony_ci} // namespace Telephony 18125c1cde8Sopenharmony_ci} // namespace OHOS