Updated chooseContact implementation for allowEditing

Need to get the contact information after any edits to make
sure latest information is being returned.


Project: http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/commit/4d88bcc1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/tree/4d88bcc1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/diff/4d88bcc1

Branch: refs/heads/master
Commit: 4d88bcc12dc483d751115430142fd6ef5173376b
Parents: f4ee4ee
Author: Becky Gibson <becka...@apache.org>
Authored: Thu Aug 16 11:17:11 2012 -0400
Committer: Becky Gibson <becka...@apache.org>
Committed: Thu Aug 16 11:19:50 2012 -0400

----------------------------------------------------------------------
 CordovaLib/Classes/CDVContacts.h |    6 +++---
 CordovaLib/Classes/CDVContacts.m |   30 +++++++++++++++++++++---------
 2 files changed, 24 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/blob/4d88bcc1/CordovaLib/Classes/CDVContacts.h
----------------------------------------------------------------------
diff --git a/CordovaLib/Classes/CDVContacts.h b/CordovaLib/Classes/CDVContacts.h
index dc3b774..9868514 100755
--- a/CordovaLib/Classes/CDVContacts.h
+++ b/CordovaLib/Classes/CDVContacts.h
@@ -107,14 +107,14 @@
 {
        BOOL allowsEditing;
        NSString* callbackId;
-       NSMutableDictionary *options;
+       NSDictionary *options;
        NSDictionary *pickedContactDictionary;
 }
 
 @property BOOL allowsEditing;
 @property (copy) NSString* callbackId;
-@property (nonatomic, retain) NSMutableDictionary *options;
-@property (nonatomic, retain) NSDictionary *pickedContactDictionary;
+@property (nonatomic, strong) NSDictionary *options;
+@property (nonatomic, strong) NSDictionary *pickedContactDictionary;
 
 @end
 

http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/blob/4d88bcc1/CordovaLib/Classes/CDVContacts.m
----------------------------------------------------------------------
diff --git a/CordovaLib/Classes/CDVContacts.m b/CordovaLib/Classes/CDVContacts.m
index 93b0e2d..774e7b9 100755
--- a/CordovaLib/Classes/CDVContacts.m
+++ b/CordovaLib/Classes/CDVContacts.m
@@ -179,7 +179,7 @@
        pickerController.peoplePickerDelegate = self;
        pickerController.callbackId = callbackId;
        pickerController.options = options;
-       pickerController.pickedContactDictionary = [NSDictionary 
dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:kABRecordInvalidID], 
@"id", nil];
+       pickerController.pickedContactDictionary = [NSDictionary 
dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:kABRecordInvalidID], 
kW3ContactId, nil];
        pickerController.allowsEditing = (BOOL)[options existsValue:@"true" 
forKey:@"allowsEditing"];
        
     if ([self.viewController 
respondsToSelector:@selector(presentViewController:::)]) {
@@ -194,24 +194,25 @@
 {
        
        CDVContactsPicker* picker = (CDVContactsPicker*)peoplePicker;
+    NSNumber* pickedId =  [NSNumber numberWithInt: 
ABRecordGetRecordID(person)];
 
-       // Retreive pickedContact information
-       CDVContact* pickedContact = [[[CDVContact alloc] 
initFromABRecord:(ABRecordRef)person] autorelease];
-       NSArray *fields = [picker.options objectForKey:@"fields"] ?: [NSArray 
arrayWithObjects:@"id", nil];
-       NSDictionary *returnFields = [[CDVContact class] calcReturnFields: 
fields];
-       picker.pickedContactDictionary = [pickedContact 
toDictionary:returnFields];
-       
        if (picker.allowsEditing) {
                
                ABPersonViewController* personController = 
[[ABPersonViewController alloc] init];
                personController.displayedPerson = person;
                personController.personViewDelegate = self;
                personController.allowsEditing = picker.allowsEditing;
-               
+        // store id so can get info in 
peoplePickerNavigationControllerDidCancel
+        picker.pickedContactDictionary = [NSDictionary 
dictionaryWithObjectsAndKeys:pickedId, kW3ContactId, nil];
                
                [peoplePicker pushViewController:personController animated:YES];
        } else {
-               // return the pickedContact information
+        // Retreive and return pickedContact information
+        CDVContact* pickedContact = [[CDVContact alloc] 
initFromABRecord:(ABRecordRef)person];
+        NSArray *fields = [picker.options objectForKey:@"fields"];
+        NSDictionary *returnFields = [[CDVContact class] calcReturnFields: 
fields];
+        picker.pickedContactDictionary = [pickedContact 
toDictionary:returnFields];
+
                CDVPluginResult *result = [CDVPluginResult resultWithStatus: 
CDVCommandStatus_OK messageAsDictionary: picker.pickedContactDictionary];
                [self writeJavascript:[result toSuccessCallbackString: 
picker.callbackId]];
                
@@ -234,6 +235,17 @@
 {
        // return contactId or invalid if none picked
        CDVContactsPicker* picker = (CDVContactsPicker*)peoplePicker;
+    if (picker.allowsEditing) {
+        // get the info after possible edit
+        ABAddressBookRef addrBook = ABAddressBookCreate();
+        ABRecordRef person = ABAddressBookGetPersonWithRecordID(addrBook, 
[[picker.pickedContactDictionary objectForKey:kW3ContactId] integerValue]);
+        CDVContact* pickedContact = [[CDVContact alloc] 
initFromABRecord:(ABRecordRef)person];
+        NSArray *fields = [picker.options objectForKey:@"fields"];
+        NSDictionary *returnFields = [[CDVContact class] calcReturnFields: 
fields];
+        picker.pickedContactDictionary = [pickedContact 
toDictionary:returnFields];
+        CFRelease(addrBook);
+
+    }
        CDVPluginResult* result = [CDVPluginResult 
resultWithStatus:CDVCommandStatus_OK 
messageAsDictionary:picker.pickedContactDictionary];
        [self writeJavascript:[result 
toSuccessCallbackString:picker.callbackId]];
        

Reply via email to