1import dataShare from '@ohos.data.dataShare' 2import common from '@ohos.app.ability.common' 3import { ApnInfo } from '../common/constant/apnInfo' 4import { ValuesBucket } from '@ohos.data.ValuesBucket' 5import { BusinessError } from '@ohos.base' 6import dataSharePredicates from '@ohos.data.dataSharePredicates' 7import DataShareResultSet from '@ohos.data.DataShareResultSet' 8import { ApnItemInfo } from '../common/constant/apnItemInfo' 9import { ApnDetailDataConst } from '../common/constant/apnData' 10 11 12export class ApnDataStorage { 13 private xmlUri: string = 'datashare:///com.ohos.pdpprofileability/net/pdp_profile/preferapn' 14 private dbUri: string = 'datashare:///com.ohos.pdpprofileability/net/pdp_profile' 15 private dataShareHelper: dataShare.DataShareHelper | undefined = undefined; 16 private xmlShareHelper: dataShare.DataShareHelper | undefined = undefined; 17 private content:Context= undefined 18 19 public async initData(context: Context) { 20 this.content = context 21 if (this.dataShareHelper == null || this.dataShareHelper == undefined) { 22 this.dataShareHelper = await this.createDBHelper(context) 23 } 24 if (this.xmlShareHelper == null || this.xmlShareHelper == undefined) { 25 this.xmlShareHelper = await this.createXmlHelper(context) 26 } 27 } 28 29 async createXmlHelper(context: Context): Promise<dataShare.DataShareHelper> { 30 return await dataShare.createDataShareHelper(context, this.xmlUri) 31 } 32 33 async createDBHelper(context: Context): Promise<dataShare.DataShareHelper> { 34 return await dataShare.createDataShareHelper(context, this.dbUri) 35 } 36 37 38 public async updateXmlPeofileID(simID: number, profileID: number): Promise<boolean> { 39 let success: boolean = false 40 let xmlData = new dataSharePredicates.DataSharePredicates(); 41 let data: ValuesBucket = { 42 'sim_id': 1, 43 'profile_id': profileID, 44 } 45 this.xmlShareHelper.update(this.xmlUri, xmlData, data).then(insertData => { 46 success = true 47 }).catch((err: BusinessError) => { 48 success = false 49 }) 50 return success 51 } 52 53 ResourceToString(resource: Resource): string { 54 return this.content.resourceManager.getStringSync(resource) 55 } 56 57 public async dataDelete(profileID: number): Promise<boolean> { 58 let success: boolean = false 59 let da = new dataSharePredicates.DataSharePredicates(); 60 da.equalTo('profile_id', Number(profileID)); 61 await this.dataShareHelper.delete(this.dbUri, da).then(data => { 62 success = true 63 }).catch((err: BusinessError) => { 64 success = false 65 }) 66 return success 67 } 68 69 70 public async dataInsert(apnInfo: ApnInfo): Promise<boolean> { 71 let success: boolean = false 72 let data = this.getValuesBucket(apnInfo) 73 await this.dataShareHelper.insert(this.dbUri, data).then(insertData => { 74 success = true 75 }).catch((err: BusinessError) => { 76 success = false 77 }) 78 return success 79 } 80 81 82 public async dataUpdate(apnInfo: ApnInfo): Promise<boolean> { 83 let success: boolean = false 84 let data = this.getValuesBucket(apnInfo) 85 let conditionData = new dataSharePredicates.DataSharePredicates(); 86 conditionData.equalTo('profile_id', Number(apnInfo.profile_id)); 87 await this.dataShareHelper.update(this.dbUri, conditionData, data).then(insertData => { 88 success = true 89 }).catch((err: BusinessError) => { 90 success = false 91 }) 92 return success 93 } 94 95 96 getValuesBucket(apnInfo: ApnInfo): ValuesBucket { 97 let data: ValuesBucket = { 98 'profile_name': apnInfo.profile_name, 99 'apn': apnInfo.apn, 100 'proxy_ip_address': apnInfo.proxy_ip_address, 101 'auth_user': apnInfo.auth_user, 102 'auth_pwd': apnInfo.auth_pwd, 103 'home_url': apnInfo.home_url, 104 'mms_ip_address': apnInfo.mms_ip_address, 105 'mcc': apnInfo.mcc, 106 'mnc': apnInfo.mnc, 107 'mccmnc': apnInfo.mcc + apnInfo.mnc, 108 'auth_type': Number(apnInfo.auth_type), 109 'apn_types': apnInfo.apn_types, 110 'apn_protocol': apnInfo.apn_protocol, 111 'apn_roam_protocol': apnInfo.apn_roam_protocol, 112 'is_roaming_apn': 1, 113 'bearing_system_type': Number(apnInfo.bearing_system_type), 114 'edited': 1, 115 'server': apnInfo.server, 116 'mvno_type': apnInfo.mvno_type, 117 'mvno_match_data': apnInfo.mvno_match_data 118 } 119 return data 120 } 121 122 123 public listToApnInfo(list: Array<ApnItemInfo>, edited: number, profileID: number): ApnInfo { 124 let apnInfo = new ApnInfo() 125 if (edited === 1) { 126 apnInfo.profile_id = profileID 127 } 128 for (let i = 0; i < list.length; i++) { 129 let apnItemInfo = list[i] 130 if (apnItemInfo.value.toString() === this.ResourceToString($r('app.string.apn_not_configured')) || 131 apnItemInfo.value.toString() === this.ResourceToString($r('app.string.apn_null'))) { 132 apnItemInfo.value = '' 133 } 134 switch (apnItemInfo.id) { 135 case ApnDetailDataConst.PROFILE_NAME: 136 apnInfo.profile_name = apnItemInfo.value.toString() 137 break 138 case ApnDetailDataConst.APN: 139 apnInfo.apn = apnItemInfo.value.toString() 140 break 141 case ApnDetailDataConst.PROXY_IP_ADDRESS: 142 if (apnItemInfo.value.toString() == '') { 143 apnInfo.proxy_ip_address = '' 144 } else { 145 apnInfo.proxy_ip_address = apnItemInfo.value.toString() 146 } 147 break 148 case ApnDetailDataConst.APNPORT: 149 if (apnItemInfo.value.toString() == '') { 150 apnInfo.proxy_ip_address = apnInfo.proxy_ip_address 151 } else { 152 apnInfo.proxy_ip_address = apnInfo.proxy_ip_address + ':' + apnItemInfo.value.toString() 153 } 154 break 155 case ApnDetailDataConst.AUTH_USER: 156 apnInfo.auth_user = apnItemInfo.value.toString() 157 break 158 case ApnDetailDataConst.AUTH_PWD: 159 apnInfo.auth_pwd = apnItemInfo.value.toString() 160 break 161 case ApnDetailDataConst.SERVER: 162 apnInfo.server = apnItemInfo.value.toString() 163 break 164 case ApnDetailDataConst.HOME_URL: 165 apnInfo.home_url = apnItemInfo.value.toString() 166 break 167 case ApnDetailDataConst.MMS_IP_ADDRESS: 168 if (apnItemInfo.value.toString() == '') { 169 apnInfo.mms_ip_address = '' 170 } else { 171 apnInfo.mms_ip_address = apnItemInfo.value.toString() 172 } 173 break 174 case ApnDetailDataConst.MMSPORT: 175 if (apnItemInfo.value.toString() == '') { 176 apnInfo.mms_ip_address = apnInfo.mms_ip_address 177 } else { 178 apnInfo.mms_ip_address = apnInfo.mms_ip_address + ':' + apnItemInfo.value.toString() 179 } 180 break 181 182 case ApnDetailDataConst.MCC: 183 apnInfo.mcc = apnItemInfo.value.toString() 184 break 185 case ApnDetailDataConst.MNC: 186 apnInfo.mnc = apnItemInfo.value.toString() 187 break 188 case ApnDetailDataConst.AUTH_TYPE: 189 apnInfo.auth_type = Number(apnItemInfo.value) 190 break 191 case ApnDetailDataConst.APN_TYPES: 192 apnInfo.apn_types = apnItemInfo.value.toString() 193 break 194 case ApnDetailDataConst.APN_PROTOCOL : 195 apnInfo.apn_protocol = apnItemInfo.value.toString() 196 break 197 case ApnDetailDataConst.APN_ROAM_PROTOCOL: 198 apnInfo.apn_roam_protocol = apnItemInfo.value.toString() 199 break 200 case ApnDetailDataConst.BEARING_SYSTEM_TYPE: 201 apnInfo.bearing_system_type = Number(apnItemInfo.value) 202 break 203 case ApnDetailDataConst.MVNO_TYPE: 204 apnInfo.mvno_type = apnItemInfo.value.toString() 205 break 206 case ApnDetailDataConst.MVNO_MATCH_DATA: 207 apnInfo.mvno_match_data = apnItemInfo.value.toString() 208 break 209 210 } 211 } 212 return apnInfo 213 } 214 215 216 public async queryApnList(mccmnc: string): Promise<DataShareResultSet> { 217 let resultSet: DataShareResultSet = null 218 let columns = ['*']; 219 let da = new dataSharePredicates.DataSharePredicates(); 220 da.equalTo('mccmnc', mccmnc) 221 .and() 222 .beginWrap() 223 .beginWrap() 224 .beginWrap() 225 .like('apn_types', '%default%') 226 .or() 227 .like('apn_types', '%mms%') 228 .endWrap() 229 .and() 230 .equalTo('edited', 0) 231 .endWrap() 232 .or() 233 .equalTo('edited', 1) 234 .endWrap() 235 try { 236 if (this.dataShareHelper != undefined) { 237 await (this.dataShareHelper as dataShare.DataShareHelper).query(this.dbUri, da, columns) 238 .then((dataShareResultSet: DataShareResultSet) => { 239 resultSet = dataShareResultSet 240 }) 241 .catch((err: BusinessError) => { 242 resultSet = null 243 }); 244 } 245 } catch (err) { 246 let code = (err as BusinessError).code; 247 let message = (err as BusinessError).message; 248 resultSet = null 249 } 250 return resultSet 251 } 252}