5 // Created by Christian Brunschen on 29/05/2008.
7 * Copyright 2008 ZXing authors
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
22 #import "AddContactAction.h"
23 #import "AddressBook/AddressBook.h"
26 @implementation AddContactAction
29 @synthesize phoneNumbers;
32 @synthesize urlString;
35 + actionWithName:(NSString *)n
36 phoneNumbers:(NSArray *)nums
39 address:(NSString *)ad
41 AddContactAction *aca = [[[self alloc] init] autorelease];
43 aca.phoneNumbers = nums;
52 return NSLocalizedString(@"Add Contact", @"Add Contact");
55 - (void)performActionWithController:(UIViewController *)controller
56 shouldConfirm:(bool)confirm {
57 CFErrorRef *error = NULL;
58 NSCharacterSet *whitespaceSet = [NSCharacterSet whitespaceCharacterSet];
60 ABRecordRef person = ABPersonCreate();
62 NSRange commaRange = [name rangeOfString:@","];
63 if (commaRange.location != NSNotFound) {
64 NSString *lastName = [[name substringToIndex:commaRange.location]
65 stringByTrimmingCharactersInSet:whitespaceSet];
66 ABRecordSetValue(person, kABPersonLastNameProperty, lastName, error);
67 NSArray *firstNames = [[[name substringFromIndex:commaRange.location + commaRange.length]
68 stringByTrimmingCharactersInSet:whitespaceSet]
69 componentsSeparatedByCharactersInSet:whitespaceSet];
70 ABRecordSetValue(person, kABPersonFirstNameProperty, [firstNames objectAtIndex:0], error);
71 for (int i = 1; i < [firstNames count]; i++) {
72 ABRecordSetValue(person, kABPersonMiddleNameProperty, [firstNames objectAtIndex:1], error);
75 NSArray *nameParts = [name componentsSeparatedByCharactersInSet:whitespaceSet];
76 int nParts = nameParts.count;
78 ABRecordSetValue(person, kABPersonFirstNameProperty, name, error);
79 } else if (nParts >= 2) {
80 int lastPart = nParts - 1;
81 ABRecordSetValue(person, kABPersonFirstNameProperty, [nameParts objectAtIndex:0], error);
82 for (int i = 1; i < lastPart; i++) {
83 ABRecordSetValue(person, kABPersonMiddleNameProperty, [nameParts objectAtIndex:i], error);
85 ABRecordSetValue(person, kABPersonLastNameProperty, [nameParts objectAtIndex:lastPart], error);
90 ABRecordSetValue(person, kABPersonNoteProperty, self.note, error);
93 if (self.phoneNumbers && self.phoneNumbers.count > 0) {
94 // multi-values: nultiple phone numbers
95 ABMutableMultiValueRef phoneNumberMultiValue =
96 ABMultiValueCreateMutable(kABStringPropertyType);
97 for (NSString *number in self.phoneNumbers) {
98 ABMultiValueAddValueAndLabel(phoneNumberMultiValue, number,
99 kABPersonPhoneMainLabel, NULL);
101 ABRecordSetValue(person, kABPersonPhoneProperty,
102 phoneNumberMultiValue, error);
106 // a single email address
107 ABMutableMultiValueRef emailMultiValue =
108 ABMultiValueCreateMutable(kABStringPropertyType);
109 ABMultiValueAddValueAndLabel(emailMultiValue, self.email,
111 ABRecordSetValue(person, kABPersonEmailProperty, emailMultiValue, error);
114 if (self.urlString) {
115 // a single url as the home page
116 ABMutableMultiValueRef urlMultiValue =
117 ABMultiValueCreateMutable(kABStringPropertyType);
118 ABMultiValueAddValueAndLabel(urlMultiValue, self.urlString,
119 kABPersonHomePageLabel, NULL);
120 ABRecordSetValue(person, kABPersonURLProperty, urlMultiValue, error);
123 ABUnknownPersonViewController *unknownPersonViewController =
124 [[ABUnknownPersonViewController alloc] init];
125 unknownPersonViewController.displayedPerson = person;
126 unknownPersonViewController.allowsActions = true;
127 unknownPersonViewController.allowsAddingToAddressBook = true;
128 unknownPersonViewController.unknownPersonViewDelegate = self;
131 viewController = [controller retain];
132 [[viewController navigationController] pushViewController:unknownPersonViewController animated:YES];
133 [unknownPersonViewController release];
136 - (void)dismissUnknownPersonViewController:(ABUnknownPersonViewController *)unknownPersonViewController {
137 [[viewController navigationController] popToViewController:viewController animated:YES];
138 [viewController release];
139 viewController = nil;
142 // ABUnknownPersonViewControllerDelegate
144 - (void)unknownPersonViewController:(ABUnknownPersonViewController *)unknownPersonViewController
145 didResolveToPerson:(ABRecordRef)person {
147 [self performSelector:@selector(dismissUnknownPersonViewController:) withObject:unknownPersonViewController afterDelay:0.0];