• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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}