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 "rdb_sim_helper.h"
17
18 #include "data_storage_errors.h"
19 #include "data_storage_log_wrapper.h"
20 #include "rdb_errno.h"
21 #include "rdb_sim_callback.h"
22 #include "rdb_store_config.h"
23 #include "sim_data.h"
24 #include "values_bucket.h"
25 #include "vector"
26
27 namespace OHOS {
28 namespace Telephony {
RdbSimHelper()29 RdbSimHelper::RdbSimHelper() {}
30
Init()31 int RdbSimHelper::Init()
32 {
33 int errCode = NativeRdb::E_OK;
34 NativeRdb::RdbStoreConfig config(dbPath_);
35 config.SetJournalMode(NativeRdb::JournalMode::MODE_TRUNCATE);
36 std::string simInfoStr;
37 CreateSimInfoTableStr(simInfoStr);
38 std::vector<std::string> createTableVec;
39 createTableVec.push_back(simInfoStr);
40 RdbSimCallback callback(createTableVec);
41 CreateRdbStore(config, VERSION, callback, errCode);
42 return errCode;
43 }
44
UpdateDbPath(const std::string & path)45 void RdbSimHelper::UpdateDbPath(const std::string &path)
46 {
47 dbPath_ = path + DB_NAME;
48 }
49
CreateSimInfoTableStr(std::string & createTableStr)50 void RdbSimHelper::CreateSimInfoTableStr(std::string &createTableStr)
51 {
52 createTableStr.append("CREATE TABLE IF NOT EXISTS ").append(TABLE_SIM_INFO);
53 createTableStr.append("(").append(SimData::SIM_ID).append(" INTEGER PRIMARY KEY AUTOINCREMENT, ");
54 createTableStr.append(SimData::ICC_ID).append(" TEXT NOT NULL, ");
55 createTableStr.append(SimData::CARD_ID).append(" TEXT NOT NULL, ");
56 createTableStr.append(SimData::SLOT_INDEX).append(" INTEGER DEFAULT -1, ");
57 createTableStr.append(SimData::SHOW_NAME).append(" TEXT DEFAULT '', ");
58 createTableStr.append(SimData::PHONE_NUMBER).append(" TEXT DEFAULT '', ");
59 createTableStr.append(SimData::COUNTRY_CODE).append(" TEXT DEFAULT '', ");
60 createTableStr.append(SimData::IMSI).append(" TEXT DEFAULT '', ");
61 createTableStr.append(SimData::IS_MAIN_CARD).append(" INTEGER DEFAULT 0, ");
62 createTableStr.append(SimData::IS_VOICE_CARD).append(" INTEGER DEFAULT 0, ");
63 createTableStr.append(SimData::IS_MESSAGE_CARD).append(" INTEGER DEFAULT 0, ");
64 createTableStr.append(SimData::IS_CELLULAR_DATA_CARD).append(" INTEGER DEFAULT 0, ");
65 createTableStr.append(SimData::IS_ACTIVE).append(" INTEGER DEFAULT 1, ");
66 createTableStr.append(SimData::CARD_TYPE).append(" INTEGER , ");
67 createTableStr.append(SimData::IMS_SWITCH).append(" INTEGER DEFAULT -1, ");
68 createTableStr.append(SimData::LANGUAGE).append(" TEXT DEFAULT '', ");
69 createTableStr.append(SimData::OPKEY).append(" TEXT DEFAULT '', ");
70 createTableStr.append(SimData::MCC).append(" TEXT DEFAULT '', ");
71 createTableStr.append(SimData::MNC).append(" TEXT DEFAULT '', ");
72 createTableStr.append("UNIQUE (");
73 createTableStr.append(SimData::ICC_ID).append(", ");
74 createTableStr.append(SimData::CARD_ID).append("))");
75 }
76
SetDefaultCardByType(int32_t simId,int32_t type)77 int32_t RdbSimHelper::SetDefaultCardByType(int32_t simId, int32_t type)
78 {
79 int result = BeginTransaction();
80 if (result != NativeRdb::E_OK) {
81 DATA_STORAGE_LOGE("RdbSimHelper::SetDefaultCardByType BeginTransaction is error!");
82 return result;
83 }
84 int updateState = 0;
85 int whereState = 1;
86 result = UpdateCardStateByType(type, updateState, whereState);
87 if (result != NativeRdb::E_OK) {
88 DATA_STORAGE_LOGE("RdbSimHelper::SetDefaultCardByType UpdateCardStateByType is error!");
89 return result;
90 }
91 int changedRows = 0;
92 NativeRdb::ValuesBucket values;
93 switch (type) {
94 case static_cast<int32_t>(SimCardType::MAIN): {
95 values.PutInt(SimData::IS_MAIN_CARD, 1);
96 break;
97 }
98 case static_cast<int32_t>(SimCardType::VOICE): {
99 values.PutInt(SimData::IS_VOICE_CARD, 1);
100 break;
101 }
102 case static_cast<int32_t>(SimCardType::MESSAGE): {
103 values.PutInt(SimData::IS_MESSAGE_CARD, 1);
104 break;
105 }
106 case static_cast<int32_t>(SimCardType::CELLULAR_DATA): {
107 values.PutInt(SimData::IS_CELLULAR_DATA_CARD, 1);
108 break;
109 }
110 default:
111 DATA_STORAGE_LOGE("RdbSimHelper::SetDefaultDataByType is error!");
112 return DATA_STORAGE_ERROR;
113 }
114 std::string whereClause;
115 whereClause.append(SimData::SIM_ID).append("=").append(std::to_string(simId));
116 result = Update(changedRows, TABLE_SIM_INFO, values, whereClause);
117 if (result != NativeRdb::E_OK) {
118 DATA_STORAGE_LOGE("RdbSimHelper::SetDefaultCardByType Update is error!");
119 }
120 result = CommitTransactionAction();
121 return result;
122 }
123
UpdateCardStateByType(int32_t type,int32_t updateState,int32_t whereSate)124 int32_t RdbSimHelper::UpdateCardStateByType(int32_t type, int32_t updateState, int32_t whereSate)
125 {
126 int32_t result = DATA_STORAGE_ERROR;
127 bool isExist = false;
128 NativeRdb::ValuesBucket values;
129 std::string whereClause;
130 switch (type) {
131 case static_cast<int32_t>(SimCardType::MAIN): {
132 isExist = true;
133 values.PutInt(SimData::IS_MAIN_CARD, updateState);
134 whereClause.append(SimData::IS_MAIN_CARD).append("=").append(std::to_string(whereSate));
135 break;
136 }
137 case static_cast<int32_t>(SimCardType::VOICE): {
138 isExist = true;
139 values.PutInt(SimData::IS_VOICE_CARD, updateState);
140 whereClause.append(SimData::IS_VOICE_CARD).append("=").append(std::to_string(whereSate));
141 break;
142 }
143 case static_cast<int32_t>(SimCardType::MESSAGE): {
144 isExist = true;
145 values.PutInt(SimData::IS_MESSAGE_CARD, updateState);
146 whereClause.append(SimData::IS_MESSAGE_CARD).append("=").append(std::to_string(whereSate));
147 break;
148 }
149 case static_cast<int32_t>(SimCardType::CELLULAR_DATA): {
150 isExist = true;
151 values.PutInt(SimData::IS_CELLULAR_DATA_CARD, updateState);
152 whereClause.append(SimData::IS_CELLULAR_DATA_CARD).append("=").append(std::to_string(whereSate));
153 break;
154 }
155 default:
156 break;
157 }
158 if (isExist) {
159 int changedRows = 0;
160 return Update(changedRows, TABLE_SIM_INFO, values, whereClause);
161 }
162 return result;
163 }
164
CommitTransactionAction()165 int RdbSimHelper::CommitTransactionAction()
166 {
167 int result = Commit();
168 if (result != NativeRdb::E_OK) {
169 RollBack();
170 }
171 return result;
172 }
173
ClearData()174 int32_t RdbSimHelper::ClearData()
175 {
176 std::string sql;
177 sql.append("delete from ").append(TABLE_SIM_INFO);
178 return ExecuteSql(sql);
179 }
180 } // namespace Telephony
181 } // namespace OHOS