• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/**
2 * Copyright (c) 2022 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 */
15import commonEvent from "@ohos.commonEventManager";
16import common from "../data/commonData";
17import mmsTable from "../data/tableData";
18import telephoneUtils from "../utils/TelephoneUtil";
19import HiLog from "../utils/HiLog";
20import particleAbility from "@ohos.ability.particleAbility";
21import MmsDatabaseHelper from "../utils/MmsDatabaseHelper";
22import ohosDataAbility from "@ohos.data.dataAbility";
23import telSim from "@ohos.telephony.sms";
24import ohosDataRdb from "@ohos.data.rdb";
25import commonService from "../service/CommonService";
26import http from "@ohos.net.http";
27import NotificationService from "../service/NotificationService";
28import LooseObject from "../data/LooseObject"
29import dataShare from "@ohos.data.dataShare";
30import dataSharePredicates from "@ohos.data.dataSharePredicates";
31import messageService from "../service/ConversationListService";
32
33const TAG = 'MmsStaticSubscriber'
34// database instance object
35var rdbStore = undefined;
36
37var StaticSubscriberExtensionAbility = globalThis.requireNapi('application.StaticSubscriberExtensionAbility');
38
39export default class MmsStaticSubscriber extends StaticSubscriberExtensionAbility {
40    onReceiveEvent(data) {
41        HiLog.i(TAG, 'onRecevieEvent, event:' );
42        // Initializing the Database
43        this.initRdb(data)
44
45    }
46
47    async dealSmsReceiveData(data) {
48        let netType = data.parameters.isCdma ? "3gpp2" : "3gpp";
49        // Synchronize wait operation
50        let promisesAll = [];
51        data.parameters.pdus.forEach(pdu => {
52            let promise = telSim.createMessage(this.convertStrArray(pdu), netType);
53            promisesAll.push(promise);
54        });
55
56        let result: LooseObject = {};
57        let createMessagePromise = Promise.all(promisesAll)
58        createMessagePromise.then((shortMsgList) => {
59            result.code = common.int.SUCCESS;
60            result.telephone = telephoneUtils.formatTelephone(shortMsgList[0].visibleRawAddress);
61            result.content = '';
62            shortMsgList.forEach(shortMessage => {
63                result.content += shortMessage.visibleMessageBody;
64            })
65        }).catch((err) => {
66            HiLog.e(TAG, "dealSmsReceiveData, err: " + JSON.stringify(err.message));
67            result.code = common.int.FAILURE;
68        });
69        await createMessagePromise;
70        let actionData = {
71            slotId: data.parameters.slotId,
72            telephone: result.telephone,
73            content: result.content,
74            isMms: false,
75            mmsSource: []
76        }
77        this.insertMessageDetailBy(actionData, res => {
78            this.sendNotification(result.telephone, res.initDatas[0].id, result.content);
79            this.publishData(result.telephone, result.content);
80        });
81    }
82
83    dealMmsReceiveData(data) {
84        let result = JSON.parse(data.data);
85        this.saveAttachment(result.mmsSource);
86        let content = commonService.getMmsContent(result.mmsSource);
87        let actionData: LooseObject = {};
88        actionData.telephone = result.telephone;
89        actionData.content = content;
90        actionData.isMms = true;
91        actionData.mmsSource = result.mmsSource;
92        actionData.slotId = data.slotId;
93        this.insertMessageDetailBy(actionData, res => {
94            let notificationContent = this.getNotificationContent(result.mmsSource, content);
95            this.sendNotification(result.telephone, res.initDatas[0].id, notificationContent);
96            this.publishData(result.telephone, result.content);
97        });
98    }
99
100    saveAttachment(mmsSource) {
101        for (let item of mmsSource) {
102            let baseUrl = item.msgUriPath;
103            let httpRequest = http.createHttp();
104            httpRequest.request(common.string.MMS_URL,
105                {
106                    method: http.RequestMethod.GET,
107                    header: {
108                        "Content-Type": "application/json",
109                    },
110                    extraData: baseUrl,
111                    readTimeout: 50000,
112                    connectTimeout: 50000
113                }, (err, data) => {
114                    HiLog.i(TAG, "saveAttachment, err: " + JSON.stringify(err.message));
115                }
116            );
117        }
118    }
119
120    getNotificationContent(mmsSource, themeContent) {
121        let content = common.string.EMPTY_STR;
122        if (mmsSource.length === 1) {
123            let item = mmsSource[0];
124            switch (item.msgType) {
125            // Subject
126                case 0:
127                    content = themeContent;
128                    break;
129            // Pictures
130                case 1:
131                    content = "(picture)" + themeContent;
132                    break;
133            // Video
134                case 2:
135                    content = "(video)" + themeContent;
136                    break;
137            // Audio
138                case 3:
139                    content = "(audio)" + themeContent;
140                    break;
141            }
142        } else {
143            content = "(slide)" + mmsSource[0].content;
144        }
145        return content;
146    }
147
148    // Insert Received Data
149    insertMessageDetailBy(param, callback) {
150        let sendResults = [];
151        let sendResult = {
152            slotId: param.slotId,
153            telephone: param.telephone,
154            content: param.content,
155            sendStatus: 0
156        }
157        sendResults.push(sendResult);
158        let hasAttachment = commonService.judgeIsAttachment(param.mmsSource);
159        let actionData: LooseObject = {};
160        actionData.slotId = param.slotId;
161        actionData.sendResults = sendResults;
162        actionData.isReceive = true;
163        actionData.ownNumber = common.string.EMPTY_STR;
164        actionData.isSender = true;
165        actionData.isMms = param.isMms;
166        actionData.mmsSource = param.mmsSource;
167        actionData.hasAttachment = hasAttachment;
168        this.insertSessionAndDetail(actionData, callback);
169    }
170
171    convertStrArray(sourceStr) {
172        let wby = sourceStr;
173        let length = wby.length;
174        let isDouble = (length % 2) == 0;
175        let halfSize = parseInt('' + length / 2);
176        HiLog.i(TAG, "convertStrArray, length=" + length + ", isDouble=" + isDouble);
177        if (isDouble) {
178            let number0xArray = new Array(halfSize);
179            for (let i = 0;i < halfSize; i++) {
180                number0xArray[i] = "0x" + wby.substr(i * 2, 2);
181            }
182            let numberArray = new Array(halfSize);
183            for (let i = 0;i < halfSize; i++) {
184                numberArray[i] = parseInt(number0xArray[i], 16);
185            }
186            return numberArray;
187        } else {
188            let number0xArray = new Array(halfSize + 1);
189            for (let i = 0;i < halfSize; i++) {
190                number0xArray[i] = "0x" + wby.substr(i * 2, 2);
191            }
192            number0xArray[halfSize] = "0x" + wby.substr((halfSize * 2) + 1, 1);
193            let numberArray = new Array(halfSize + 1);
194            for (let i = 0;i < halfSize; i++) {
195                numberArray[i] = parseInt(number0xArray[i], 16);
196            }
197            let last0x = "0x" + wby.substr(wby.length - 1, 1);
198            numberArray[halfSize] = parseInt(last0x);
199            return numberArray;
200        }
201    }
202
203    // Initializing the Database
204    async initRdb(data) {
205        HiLog.i(TAG, "initRdb, createRdbStore start: " );
206        // Creating a Database
207        rdbStore = await ohosDataRdb.getRdbStore(globalThis.AbilityStageConstant,
208            { name: mmsTable.DB.MMSSMS.config.name }, mmsTable.DB.MMSSMS.version);
209        // Creating Database Tables
210        await rdbStore.executeSql(mmsTable.table.session, null);
211
212        if (data.event === common.string.SUBSCRIBER_EVENT) {
213            this.dealSmsReceiveData(data);
214        } else {
215            // MMS message receiving
216            this.dealMmsReceiveData(data);
217        }
218
219    }
220
221    insertSessionAndDetail(actionData, callback) {
222        let sendResults = actionData.sendResults;
223        let isReceive = actionData.isReceive;
224        if (sendResults.length == 0) {
225            return;
226        }
227        let value = this.dealSendResults(sendResults);
228
229        // Check whether a session list has been created.
230        this.querySessionByTelephone(value.telephone, res => {
231            HiLog.i(TAG, " insertSessionAndDetail, querySessionByTelephone code=" + res.code);
232            let response = res.response;
233            HiLog.i(TAG, " insertSessionAndDetail, querySessionByTelephone response.id=" + response.id);
234            if (res.code == common.int.SUCCESS && response.id <= 0) {
235                this.insertNoExitingSession(isReceive, value, actionData, callback);
236            } else {
237                this.insertExitingSession(response, value, actionData, callback);
238            }
239        });
240    }
241
242    insertNoExitingSession(isReceive, value, actionData, callback) {
243        let unreadCount = 0;
244        if (isReceive) {
245            unreadCount = 1;
246        }
247        let valueBucket = {
248            "telephone": value.telephone,
249            "content": value.content,
250            "contacts_num": value.contractsNum,
251            "sms_type": value.smsType,
252            "unread_count": unreadCount,
253            "sending_status": value.sendStatus,
254            "has_draft": 0,
255            "time": value.timestamp,
256            "message_count": 1,
257            "has_mms": actionData.isMms ? 1 : 0,
258            "has_attachment": actionData.hasAttachment ? 1 : 0
259        }
260        this.insertSession(valueBucket, res => {
261            // Invoke the SMS database to insert SMS messages.
262            this.dealInsertMessageDetail(value, actionData, res.rowId, initDatas => {
263                let result = {
264                    rowId: res.rowId,
265                    initDatas: initDatas
266                }
267                callback(result);
268            });
269        });
270    }
271
272    insertExitingSession(response, param, actionData, callback) {
273        let sessionId = response.id;
274        // Invoke the SMS database to insert SMS messages.
275        let threadIds = [sessionId];
276        let time = new Date();
277        let unreadCount = 0;
278        if (actionData.isReceive) {
279            unreadCount = response.unreadCount;
280            unreadCount = unreadCount + 1;
281        }
282        let messageCount = response.messageCount;
283        messageCount = messageCount + 1;
284        let valueBucket = {
285            "content": param.content,
286            "unread_count": unreadCount,
287            "time": time.getTime(),
288            "sending_status": param.sendStatus,
289            "message_count": messageCount,
290            "has_mms": actionData.isMms ? 1 : 0,
291            "has_draft": 0,
292            "has_attachment": actionData.hasAttachment ? 1 : 0
293        };
294        this.updateById(threadIds, valueBucket, res => {
295            // Invoke the SMS database to insert SMS messages.
296            this.dealInsertMessageDetail(param, actionData, sessionId, initDatas => {
297                let result = {
298                    rowId: sessionId,
299                    initDatas: initDatas
300                }
301                callback(result);
302            });
303        });
304    }
305
306    querySessionByTelephone(telephone, callback) {
307        let result: LooseObject = {};
308        let queryPromise = this.querySessionByTelephoneRdb(telephone);
309        Promise.all([queryPromise]).then((res) => {
310            result.code = common.int.SUCCESS;
311            result.response = res[0];
312            callback(result);
313        }).catch((err) => {
314            HiLog.e(TAG, "querySessionByTelephone, error: " + JSON.stringify(err.message));
315            result.code = common.int.FAILURE;
316            callback(result);
317        });
318    }
319
320    // Obtains the session list based on the mobile number.
321    async querySessionByTelephoneRdb(telephone) {
322        // Creating a query condition object
323        let predicates = new ohosDataRdb.RdbPredicates(MmsDatabaseHelper.TABLE.SESSION);
324        // If this parameter is left blank, all list data is queried.
325        if (telephone) {
326            await predicates.equalTo(mmsTable.sessionField.telephone, telephone);
327        }
328        // Obtain the result set.
329        let resultSet = await rdbStore.query(predicates);
330        // Obtain the first entry.
331        resultSet.goToFirstRow();
332        let result: LooseObject = {};
333        result.id = await Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.sessionField.id)));
334        result.time = await Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.sessionField.time)));
335        result.telephone = await resultSet.getString(resultSet.getColumnIndex(mmsTable.sessionField.telephone));
336        result.content = await resultSet.getString(resultSet.getColumnIndex(mmsTable.sessionField.content));
337        result.contactsNum =
338            await Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.sessionField.contactsNum)));
339        result.smsType = await Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.sessionField.smsType)));
340        result.unreadCount =
341            await Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.sessionField.unreadCount)));
342        result.sendStatus =
343            await Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.sessionField.sendStatus)));
344        result.hasDraft = await Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.sessionField.hasDraft)));
345        result.messageCount =
346            await Number(resultSet.getString(resultSet.getColumnIndex(mmsTable.sessionField.messageCount)));
347        return result;
348    }
349
350    // insert
351    insertSession(valueBucket, callback) {
352        this.insertSessionRdb(valueBucket, callback);
353    }
354
355    insertSessionRdb(valueBucket, callback) {
356        HiLog.i(TAG, "insert session rdb 123");
357        let insertPromise = rdbStore.insert(MmsDatabaseHelper.TABLE.SESSION, valueBucket);
358        let result: LooseObject = {};
359        insertPromise.then((ret) => {
360            HiLog.i(TAG, "insert session rdb rowId: " + ret);
361            result.code = common.int.SUCCESS;
362            result.rowId = ret;
363            callback(result);
364        }).catch((err) => {
365            HiLog.e(TAG, "insert session rdb error: " + JSON.stringify(err.message));
366            result.code = common.int.FAILURE;
367            callback(result);
368        });
369    }
370
371    /**
372     * New data
373     */
374    async insert(tableName, valueBucket) {
375        let promise = await rdbStore.insert(tableName, valueBucket);
376        let rowId = 0;
377        promise.then((ret) => {
378            rowId = ret;
379            HiLog.i(TAG, "insert, first success: " + rowId);
380        }).catch((err) => {
381            HiLog.e(TAG, "insert, err: " + JSON.stringify(err.message));
382        })
383        await promise;
384        return rowId;
385    }
386
387    dealInsertMessageDetail(param, actionData, threadId, callback) {
388        // Get the largest groupId
389        this.queryMaxGroupId(actionData, res => {
390            let maxGroupId = res == common.string.EMPTY_STR ? 0 : parseInt(res);
391            maxGroupId = maxGroupId + 1;
392            this.insertMessageDetailByGroupId(param, threadId, maxGroupId, actionData, callback);
393        });
394    }
395
396    insertMessageDetailByGroupId(param, threadId, maxGroupId, actionData, callback) {
397        let initDatas = [];
398        let count = 0;
399        let sendResults = actionData.sendResults;
400        sendResults.forEach(sendResult => {
401            let insertDetail = {
402                slotId: actionData.slotId,
403                receiverNumber: common.string.EMPTY_STR,
404                senderNumber: common.string.EMPTY_STR,
405                smsType: param.smsType,
406                content: param.content,
407                sendStatus: 0,
408                sessionType: 0,
409                threadId: threadId,
410                isSender: actionData.isSender,
411                groupId: maxGroupId,
412                mmsSource: actionData.mmsSource,
413                isMms: actionData.isMms,
414                isRead: -1
415            };
416            if (actionData.isReceive) {
417                insertDetail.receiverNumber = actionData.ownNumber;
418                insertDetail.senderNumber = sendResult.telephone;
419                insertDetail.isRead = 0;
420            }
421            this.insertMessageDetail(insertDetail, result => {
422                count++;
423                HiLog.i(TAG, "insertMessageDetailByGroupId, result: " + result);
424                let initData = {
425                    id: result,
426                    telephone: sendResult.telephone
427                };
428                initDatas.push(initData);
429                if (count == sendResults.length) {
430                    callback(initDatas);
431                }
432            });
433        })
434    }
435
436    dealSendResults(sendResults) {
437        let contractsNum = sendResults.length;
438        let telephone = common.string.EMPTY_STR;
439        let content = common.string.EMPTY_STR;
440        // Sending succeeded.
441        let sendStatus = 0;
442        for (let sendResult of sendResults) {
443            telephone = telephone + sendResult.telephone + common.string.COMMA;
444            content = sendResult.content;
445            sendStatus = sendResult.sendStatus;
446        }
447        telephone = telephone.substring(0, telephone.length - 1);
448        let smsType = 0;
449        if (contractsNum == 1 && telephoneUtils.judgeIsInfoMsg(telephone)) {
450            smsType = 1;
451        }
452        let timestamp = new Date().getTime();
453        let result: LooseObject = {};
454        result.contractsNum = contractsNum;
455        result.telephone = telephoneUtils.dealTelephoneSort(telephone);
456        result.content = content;
457        result.sendStatus = sendStatus;
458        result.smsType = smsType;
459        result.timestamp = timestamp;
460        return result;
461    }
462
463    insertMessageDetail(value, callback) {
464        let actionData: LooseObject = {};
465        let time = new Date();
466        let timeStr = time.getTime() + common.string.EMPTY_STR;
467        var stringValue = {
468            "slot_id": common.int.SIM_ONE,
469            "receiver_number": value.receiverNumber,
470            "sender_number": value.senderNumber,
471            "start_time": timeStr,
472            "end_time": timeStr,
473            "msg_type": value.isMms ? "1" : "0",
474            "sms_type": value.smsType,
475            "msg_title": value.content,
476            "msg_content": value.content,
477            "msg_state": value.sendStatus,
478            "operator_service_number": common.string.EMPTY_STR,
479            "msg_code": common.string.EMPTY_STR,
480            "session_id": value.threadId,
481            "is_lock": "0",
482            "is_read": value.isRead,
483            "is_collect": "0",
484            "session_type": value.sessionType,
485            "is_subsection": "0",
486            "is_sender": value.isSender,
487            "is_send_report": 0,
488            "group_id": value.groupId
489        };
490        if (value.slotId != null) {
491            stringValue.slot_id = value.slotId;
492        }
493        actionData.stringValue = stringValue;
494        this.insertMessageDetailRdb(actionData, msgId => {
495            HiLog.i(TAG, "insertMessageDetail, msgId: " + msgId);
496            if (value.isMms) {
497                value.msgId = msgId;
498                this.batchInsertMmsPart(value);
499            }
500            callback(msgId);
501        });
502    }
503
504    batchInsertMmsPart(value) {
505        let bacthmsParts = [];
506        for (let source of value.mmsSource) {
507            let stringValue = {
508                "msg_id": value.msgId,
509                "group_id": value.groupId,
510                "type": source.msgType,
511                "location_path": source.msgUriPath,
512                "content": source.content,
513                "recording_time": source.time,
514                "part_size": source.fileSize
515            };
516            bacthmsParts.push(stringValue);
517        }
518        for (let stringValue of bacthmsParts) {
519            this.insertMmsPart(stringValue);
520        }
521    }
522
523    async insertMmsPart(stringValue) {
524        let dataAbilityHelper = await dataShare.createDataShareHelper(this.context, common.string.URI_MESSAGE_LOG);
525        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_MMS_PART;
526        dataAbilityHelper.insert(managerUri, stringValue).then(data => {
527        }).catch(error => {
528            HiLog.e(TAG, "insertMmsPart, fail: " + JSON.stringify(error.meaasge));
529        });
530    }
531
532    // Inserting a single SMS message
533    async insertMessageDetailRdb(actionData, callback) {
534        // Obtains the DataAbilityHelper object.
535        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_INFO_TABLE;
536        let dataAbilityHelper = await dataShare.createDataShareHelper(this.context, common.string.URI_MESSAGE_LOG);
537        let promise = dataAbilityHelper.insert(managerUri, actionData.stringValue);
538        await promise.then(data => {
539            callback(data);
540        }).catch(error => {
541            HiLog.e(TAG, "insertMessageDetailRdb, fail: " + JSON.stringify(error.message));
542        });
543    }
544
545    /**
546     * Update data based on the primary key ID.
547     * @param threadIds Session ID
548     * @return
549     */
550    async updateById(threadIds, valueBucket, callback) {
551        HiLog.i(TAG, "updateById, threadIds: " + JSON.stringify(threadIds));
552        if (threadIds.length != 0) {
553            for (let threadId of threadIds) {
554                // Creating a query condition object
555                let predicates = new ohosDataRdb.RdbPredicates(MmsDatabaseHelper.TABLE.SESSION);
556                await predicates.equalTo(mmsTable.sessionField.id, threadId);
557                this.update(predicates, valueBucket, res => {
558                    callback(res);
559                });
560            }
561
562        }
563    }
564
565    /**
566     * Update Interface
567     * @param predicates Update Condition
568     * @param predicates Update Value
569     * @return
570     */
571    async update(predicates, valueBucket, callback) {
572        let changedRows = await rdbStore.update(valueBucket, predicates);
573        callback(changedRows);
574    }
575
576    /**
577     * Query the maximum group ID.
578     * @param actionData
579     * @param callBack
580     * @return
581     */
582    queryMaxGroupId(actionData, callBack) {
583        this.queryMaxGroupIdDb(actionData, res => {
584            HiLog.i(TAG, "queryMaxGroupId, callback");
585            callBack(res.maxGroupId);
586        });
587    }
588
589    // Get the largest groupId
590    async queryMaxGroupIdDb(actionData, callback) {
591        let dataAbilityHelper = await dataShare.createDataShareHelper(this.context, common.string.URI_MESSAGE_LOG);
592        let resultColumns = [
593            "maxGroupId"
594        ];
595        let condition = new dataSharePredicates.DataSharePredicates();
596        let managerUri = common.string.URI_MESSAGE_LOG + common.string.URI_MESSAGE_MAX_GROUP;
597        dataAbilityHelper.query(managerUri, condition, resultColumns).then( resultSet => {
598            let result: LooseObject = {};
599            if (resultSet != undefined) {
600                if (resultSet.goToLastRow()) {
601                    result.maxGroupId = resultSet.getString(0);
602                }
603            }
604            callback(result);
605        }).catch(error => {
606            HiLog.e(TAG, "queryMaxGroupIdDb, error: " + JSON.stringify(error.message));
607        });
608    }
609
610    /**
611     * commonEvent publish data
612     */
613    publishData(telephone, content) {
614        HiLog.i(TAG, "publishData, start");
615        let actionData = {
616            telephone: telephone,
617            content: content
618        };
619        commonEvent.publish(common.string.RECEIVE_TRANSMIT_EVENT, {
620            bundleName: common.string.BUNDLE_NAME,
621            subscriberPermissions: ['ohos.permission.RECEIVE_SMS'],
622            isOrdered: false,
623            data: JSON.stringify(actionData)
624        }, (res) => {
625        });
626    }
627
628    async sendNotification(telephone, msgId, content) {
629        let telephones = [telephone];
630        this.queryContactDataByTelephone(telephones, async (contracts) => {
631            HiLog.i(TAG, "sendNotification, callback");
632            let actionData = this.dealContactParams(contracts, telephone);
633            if (content.length > 15) {
634                content = content.substring(0, 15) + "...";
635            }
636            let title = telephone;
637            if(contracts.length > 0) {
638                title = contracts[0].displayName
639            }
640            let message = {
641                title: title,
642                text: content,
643            };
644            actionData.message = message;
645            actionData.msgId = msgId;
646            actionData.unreadTotal = 0;
647            let params: LooseObject = {
648                mmsContext: this.context
649            };
650            messageService.statisticalData(params, function (res) {
651                if (res.code == common.int.SUCCESS) {
652                    actionData.unreadTotal= res.response.totalListCount;
653                    HiLog.i(TAG, "sendNotification, callback actionData");
654                }
655                NotificationService.getInstance().sendNotify(actionData);
656            });
657        });
658    }
659
660    dealContactParams(contracts, telephone) {
661        let actionData: LooseObject = {};
662        let params = [];
663        if (contracts.length == 0) {
664            params.push({
665                telephone: telephone,
666            });
667        } else {
668            let contact = contracts[0];
669            params.push({
670                contactsName: contact.displayName,
671                telephone: telephone,
672                telephoneFormat: contact.detailInfo,
673            });
674        }
675        actionData.contactObjects = JSON.stringify(params);
676        return actionData;
677    }
678
679    async queryContactDataByTelephone(telephones, callback) {
680        let resultColumns = [
681            mmsTable.contactDataColumns.detailInfo,
682            mmsTable.contactDataColumns.displayName,
683        ];
684        let contactDataAbilityHelper =
685            await dataShare.createDataShareHelper(this.context, common.string.URI_ROW_CONTACTS);
686        let condition = new dataSharePredicates.DataSharePredicates();
687        let contactDataUri = common.string.URI_ROW_CONTACTS + common.string.CONTACT_DATA_URI;
688        condition.in(mmsTable.contactDataColumns.detailInfo, telephones);
689        condition.and();
690        condition.equalTo(mmsTable.contactDataColumns.typeId, "5");
691        contactDataAbilityHelper.query(contactDataUri, condition, resultColumns).then(resultSet => {
692            let contracts = [];
693            if (resultSet != undefined) {
694                while (resultSet.goToNextRow()) {
695                    let contract = {
696                        detailInfo: resultSet.getString(0),
697                        displayName: resultSet.getString(1)
698                    };
699                    contracts.push(contract);
700                }
701            }
702            callback(contracts);
703        }).catch(error => {
704            HiLog.e(TAG, "queryContactDataByTelephone error: " + JSON.stringify(error.message));
705        });
706    }
707
708
709}
710