1115cd2caSopenharmony_ci/* 2115cd2caSopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 3115cd2caSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4115cd2caSopenharmony_ci * you may not use this file except in compliance with the License. 5115cd2caSopenharmony_ci * You may obtain a copy of the License at 6115cd2caSopenharmony_ci * 7115cd2caSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8115cd2caSopenharmony_ci * 9115cd2caSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10115cd2caSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11115cd2caSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12115cd2caSopenharmony_ci * See the License for the specific language governing permissions and 13115cd2caSopenharmony_ci * limitations under the License. 14115cd2caSopenharmony_ci */ 15115cd2caSopenharmony_ciconst featureAbility = requireNapi('ability.featureAbility'); 16115cd2caSopenharmony_ciconst contact = requireInternal('contact'); 17115cd2caSopenharmony_ciconst ARGUMENTS_LEN_TWO = 2; 18115cd2caSopenharmony_ci 19115cd2caSopenharmony_ciasync function contactsPickerSelect() { 20115cd2caSopenharmony_ci if (arguments.length === ARGUMENTS_LEN_TWO && typeof arguments[1] !== 'function') { 21115cd2caSopenharmony_ci console.log('[picker] contactsPickerSelect callback invalid'); 22115cd2caSopenharmony_ci throw Error('invalid callback'); 23115cd2caSopenharmony_ci } 24115cd2caSopenharmony_ci 25115cd2caSopenharmony_ci try { 26115cd2caSopenharmony_ci let result; 27115cd2caSopenharmony_ci let context = getContext(this); 28115cd2caSopenharmony_ci if (context) { 29115cd2caSopenharmony_ci let config = { 30115cd2caSopenharmony_ci parameters: { 31115cd2caSopenharmony_ci 'pageFlag': 'page_flag_single_choose' 32115cd2caSopenharmony_ci }, 33115cd2caSopenharmony_ci bundleName: 'com.ohos.contacts', 34115cd2caSopenharmony_ci abilityName: 'com.ohos.contacts.MainAbility' 35115cd2caSopenharmony_ci }; 36115cd2caSopenharmony_ci if (arguments.length > 0 && typeof arguments[0] === 'object') { 37115cd2caSopenharmony_ci let option = arguments[0]; 38115cd2caSopenharmony_ci if (option.isMultiSelect !== undefined) { 39115cd2caSopenharmony_ci config.parameters.pageFlag = 40115cd2caSopenharmony_ci option.isMultiSelect === true ? 'page_flag_multi_choose' : 'page_flag_single_choose'; 41115cd2caSopenharmony_ci } 42115cd2caSopenharmony_ci } 43115cd2caSopenharmony_ci console.log('[picker] contactsPickerSelect config: ' + JSON.stringify(config)); 44115cd2caSopenharmony_ci result = await context.startAbilityForResult(config, { windowMode: 1 }); 45115cd2caSopenharmony_ci } else { 46115cd2caSopenharmony_ci let parameter = { 47115cd2caSopenharmony_ci want: { 48115cd2caSopenharmony_ci parameters: { 49115cd2caSopenharmony_ci 'pageFlag': 'page_flag_single_choose' 50115cd2caSopenharmony_ci }, 51115cd2caSopenharmony_ci bundleName: 'com.ohos.contacts', 52115cd2caSopenharmony_ci abilityName: 'com.ohos.contacts.MainAbility' 53115cd2caSopenharmony_ci } 54115cd2caSopenharmony_ci }; 55115cd2caSopenharmony_ci if (arguments.length > 0 && typeof arguments[0] === 'object') { 56115cd2caSopenharmony_ci let option = arguments[0]; 57115cd2caSopenharmony_ci if (option.isMultiSelect !== undefined) { 58115cd2caSopenharmony_ci parameter.want.parameters.pageFlag = 59115cd2caSopenharmony_ci option.isMultiSelect === true ? 'page_flag_multi_choose' : 'page_flag_single_choose'; 60115cd2caSopenharmony_ci } 61115cd2caSopenharmony_ci } 62115cd2caSopenharmony_ci console.log('[picker] contactsPickerSelect parameter: ' + JSON.stringify(parameter)); 63115cd2caSopenharmony_ci result = await featureAbility.startAbilityForResult(parameter); 64115cd2caSopenharmony_ci } 65115cd2caSopenharmony_ci let contactObject = result.want.parameters.contactObjects; 66115cd2caSopenharmony_ci let params = []; 67115cd2caSopenharmony_ci try { 68115cd2caSopenharmony_ci params = JSON.parse(contactObject); 69115cd2caSopenharmony_ci } catch (Error) { 70115cd2caSopenharmony_ci console.log(`[picker] JSON.parse Error: ${Error}`); 71115cd2caSopenharmony_ci } 72115cd2caSopenharmony_ci let contacts = []; 73115cd2caSopenharmony_ci for (let object of params) { 74115cd2caSopenharmony_ci let contact = { 75115cd2caSopenharmony_ci name: { 76115cd2caSopenharmony_ci fullName: object.contactName 77115cd2caSopenharmony_ci }, 78115cd2caSopenharmony_ci phoneNumbers: [ 79115cd2caSopenharmony_ci { 80115cd2caSopenharmony_ci phoneNumber: object.telephone 81115cd2caSopenharmony_ci } 82115cd2caSopenharmony_ci ] 83115cd2caSopenharmony_ci }; 84115cd2caSopenharmony_ci contacts.push(contact); 85115cd2caSopenharmony_ci } 86115cd2caSopenharmony_ci if (arguments.length === ARGUMENTS_LEN_TWO && typeof arguments[1] === 'function') { 87115cd2caSopenharmony_ci if (result.resultCode === 0) { 88115cd2caSopenharmony_ci return arguments[1](undefined, contacts); 89115cd2caSopenharmony_ci } else { 90115cd2caSopenharmony_ci return arguments[1](result.resultCode, undefined); 91115cd2caSopenharmony_ci } 92115cd2caSopenharmony_ci } else if (arguments.length === 1 && typeof arguments[0] === 'function') { 93115cd2caSopenharmony_ci if (result.resultCode === 0) { 94115cd2caSopenharmony_ci return arguments[0](undefined, contacts); 95115cd2caSopenharmony_ci } else { 96115cd2caSopenharmony_ci return arguments[0](result.resultCode, undefined); 97115cd2caSopenharmony_ci } 98115cd2caSopenharmony_ci } 99115cd2caSopenharmony_ci return new Promise((resolve, reject) => { 100115cd2caSopenharmony_ci if (result.resultCode === 0) { 101115cd2caSopenharmony_ci resolve(contacts); 102115cd2caSopenharmony_ci } else { 103115cd2caSopenharmony_ci console.log('[picker] contactsPickerSelect err, result.resultCode = : ' + result.resultCode); 104115cd2caSopenharmony_ci reject(result.resultCode); 105115cd2caSopenharmony_ci } 106115cd2caSopenharmony_ci }); 107115cd2caSopenharmony_ci } catch (error) { 108115cd2caSopenharmony_ci console.log('[picker] contactsPickerSelect error: ' + error); 109115cd2caSopenharmony_ci } 110115cd2caSopenharmony_ci} 111115cd2caSopenharmony_ci 112115cd2caSopenharmony_ciexport default { 113115cd2caSopenharmony_ci selectContact: contactsPickerSelect, 114115cd2caSopenharmony_ci selectContacts: contactsPickerSelect, 115115cd2caSopenharmony_ci addContact: contact.addContact, 116115cd2caSopenharmony_ci deleteContact: contact.deleteContact, 117115cd2caSopenharmony_ci queryContact: contact.queryContact, 118115cd2caSopenharmony_ci queryContacts: contact.queryContacts, 119115cd2caSopenharmony_ci queryContactsByEmail: contact.queryContactsByEmail, 120115cd2caSopenharmony_ci queryContactsByPhoneNumber: contact.queryContactsByPhoneNumber, 121115cd2caSopenharmony_ci queryGroups: contact.queryGroups, 122115cd2caSopenharmony_ci queryHolders: contact.queryHolders, 123115cd2caSopenharmony_ci queryKey: contact.queryKey, 124115cd2caSopenharmony_ci queryMyCard: contact.queryMyCard, 125115cd2caSopenharmony_ci updateContact: contact.updateContact, 126115cd2caSopenharmony_ci isLocalContact: contact.isLocalContact, 127115cd2caSopenharmony_ci isMyCard: contact.isMyCard, 128115cd2caSopenharmony_ci 129115cd2caSopenharmony_ci Contact: contact.Contact, 130115cd2caSopenharmony_ci ContactAttributes: contact.ContactAttributes, 131115cd2caSopenharmony_ci Attribute: contact.Attribute, 132115cd2caSopenharmony_ci Email: contact.Email, 133115cd2caSopenharmony_ci Event: contact.Event, 134115cd2caSopenharmony_ci Group: contact.Group, 135115cd2caSopenharmony_ci Holder: contact.Holder, 136115cd2caSopenharmony_ci ImAddress: contact.ImAddress, 137115cd2caSopenharmony_ci Name: contact.Name, 138115cd2caSopenharmony_ci NickName: contact.NickName, 139115cd2caSopenharmony_ci Note: contact.Note, 140115cd2caSopenharmony_ci Organization: contact.Organization, 141115cd2caSopenharmony_ci PhoneNumber: contact.PhoneNumber, 142115cd2caSopenharmony_ci Portrait: contact.Portrait, 143115cd2caSopenharmony_ci PostalAddress: contact.PostalAddress, 144115cd2caSopenharmony_ci Relation: contact.Relation, 145115cd2caSopenharmony_ci SipAddress: contact.SipAddress, 146115cd2caSopenharmony_ci Website: contact.Website 147115cd2caSopenharmony_ci}; 148