123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- /*
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
- */
- #import <Foundation/Foundation.h>
- #import <AddressBook/ABAddressBook.h>
- #import <AddressBookUI/AddressBookUI.h>
- #import <Cordova/CDVPlugin.h>
- #import "CDVContact.h"
- @interface CDVContacts : CDVPlugin <ABNewPersonViewControllerDelegate,
- ABPersonViewControllerDelegate,
- ABPeoplePickerNavigationControllerDelegate
- >
- {
- ABAddressBookRef addressBook;
- }
- /*
- * newContact - create a new contact via the GUI
- *
- * arguments:
- * 1: successCallback: this is the javascript function that will be called with the newly created contactId
- */
- - (void)newContact:(CDVInvokedUrlCommand*)command;
- /*
- * displayContact - IN PROGRESS
- *
- * arguments:
- * 1: recordID of the contact to display in the iPhone contact display
- * 2: successCallback - currently not used
- * 3: error callback
- * options:
- * allowsEditing: set to true to allow the user to edit the contact - currently not supported
- */
- - (void)displayContact:(CDVInvokedUrlCommand*)command;
- /*
- * chooseContact
- *
- * arguments:
- * 1: this is the javascript function that will be called with the contact data as a JSON object (as the first param)
- * options:
- * allowsEditing: set to true to not choose the contact, but to edit it in the iPhone contact editor
- */
- - (void)chooseContact:(CDVInvokedUrlCommand*)command;
- - (void)newPersonViewController:(ABNewPersonViewController*)newPersonViewController didCompleteWithNewPerson:(ABRecordRef)person;
- - (BOOL)personViewController:(ABPersonViewController*)personViewController shouldPerformDefaultActionForPerson:(ABRecordRef)person
- property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifierForValue;
- /*
- * Launches the Contact Picker to select a single contact.
- *
- * arguments:
- * 1: this is the javascript function that will be called with the contact data as a JSON object (as the first param)
- * options:
- * desiredFields: ContactFields array to be returned back
- */
- - (void)pickContact:(CDVInvokedUrlCommand*)command;
- /*
- * search - searches for contacts. Only person records are currently supported.
- *
- * arguments:
- * 1: successcallback - this is the javascript function that will be called with the array of found contacts
- * 2: errorCallback - optional javascript function to be called in the event of an error with an error code.
- * options: dictionary containing ContactFields and ContactFindOptions
- * fields - ContactFields array
- * findOptions - ContactFindOptions object as dictionary
- *
- */
- - (void)search:(CDVInvokedUrlCommand*)command;
- /*
- * save - saves a new contact or updates and existing contact
- *
- * arguments:
- * 1: success callback - this is the javascript function that will be called with the JSON representation of the saved contact
- * search calls a fixed navigator.service.contacts._findCallback which then calls the success callback stored before making the call into obj-c
- */
- - (void)save:(CDVInvokedUrlCommand*)command;
- /*
- * remove - removes a contact from the address book
- *
- * arguments:
- * 1: 1: successcallback - this is the javascript function that will be called with a (now) empty contact object
- *
- * options: dictionary containing Contact object to remove
- * contact - Contact object as dictionary
- */
- - (void)remove:(CDVInvokedUrlCommand*)command;
- // - (void) dealloc;
- @end
- @interface CDVContactsPicker : ABPeoplePickerNavigationController
- {
- BOOL allowsEditing;
- NSString* callbackId;
- NSDictionary* options;
- NSDictionary* pickedContactDictionary;
- }
- @property BOOL allowsEditing;
- @property (copy) NSString* callbackId;
- @property (nonatomic, strong) NSDictionary* options;
- @property (nonatomic, strong) NSDictionary* pickedContactDictionary;
- @end
- @interface CDVNewContactsController : ABNewPersonViewController
- {
- NSString* callbackId;
- }
- @property (copy) NSString* callbackId;
- @end
- /* ABPersonViewController does not have any UI to dismiss. Adding navigationItems to it does not work properly, the navigationItems are lost when the app goes into the background.
- The solution was to create an empty NavController in front of the ABPersonViewController. This
- causes the ABPersonViewController to have a back button. By subclassing the ABPersonViewController,
- we can override viewWillDisappear and take down the entire NavigationController at that time.
- */
- @interface CDVDisplayContactViewController : ABPersonViewController
- {}
- @property (nonatomic, strong) CDVPlugin* contactsPlugin;
- @end
- @interface CDVAddressBookAccessError : NSObject
- {}
- @property (assign) CDVContactError errorCode;
- - (CDVAddressBookAccessError*)initWithCode:(CDVContactError)code;
- @end
- typedef void (^ CDVAddressBookWorkerBlock)(
- ABAddressBookRef addressBook,
- CDVAddressBookAccessError* error
- );
- @interface CDVAddressBookHelper : NSObject
- {}
- - (void)createAddressBook:(CDVAddressBookWorkerBlock)workerBlock;
- @end
|