From d0b5b8f3941298e6701f512e0e5135f1a04c8f47 Mon Sep 17 00:00:00 2001 From: Guillaume BIENKOWSKI Date: Thu, 13 Feb 2014 11:11:31 +0100 Subject: [PATCH] Add the ability to use the System contact view, which is the ABPeoplePicker. This has the drawback that we can't (yet?) add contacts anymore, but it allows for remote directories (LDAP, exchange) searches. --- Classes/Base.lproj/ContactsViewController.xib | 26 +----- Classes/ContactsViewController.h | 6 +- Classes/ContactsViewController.m | 86 +++++++++++++++---- Resources/linphonerc | 1 + Resources/linphonerc~ipad | 1 + 5 files changed, 79 insertions(+), 41 deletions(-) diff --git a/Classes/Base.lproj/ContactsViewController.xib b/Classes/Base.lproj/ContactsViewController.xib index 0936796a0..d16430f4d 100644 --- a/Classes/Base.lproj/ContactsViewController.xib +++ b/Classes/Base.lproj/ContactsViewController.xib @@ -11,8 +11,7 @@ - - + @@ -113,32 +112,9 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Classes/ContactsViewController.h b/Classes/ContactsViewController.h index c21948896..c580d82bf 100644 --- a/Classes/ContactsViewController.h +++ b/Classes/ContactsViewController.h @@ -18,6 +18,7 @@ */ #import +#import #import "UICompositeViewController.h" #import "ContactsTableViewController.h" @@ -44,11 +45,14 @@ typedef enum _ContactSelectionMode { @end -@interface ContactsViewController : UIViewController { +@interface ContactsViewController : UIViewController { + BOOL use_systemView; } @property (nonatomic, retain) IBOutlet ContactsTableViewController* tableController; @property (nonatomic, retain) IBOutlet UITableView *tableView; +@property (nonatomic, retain) IBOutlet UINavigationController* sysViewController; +@property (retain, nonatomic) IBOutlet UIView *toolBar; @property (nonatomic, retain) IBOutlet UIButton* allButton; @property (nonatomic, retain) IBOutlet UIButton* linphoneButton; @property (nonatomic, retain) IBOutlet UIButton *backButton; diff --git a/Classes/ContactsViewController.m b/Classes/ContactsViewController.m index d3b54c122..b188f9b0c 100644 --- a/Classes/ContactsViewController.m +++ b/Classes/ContactsViewController.m @@ -76,10 +76,13 @@ static BOOL sEmailFilter = FALSE; @synthesize tableController; @synthesize tableView; +@synthesize sysViewController; + @synthesize allButton; @synthesize linphoneButton; @synthesize backButton; @synthesize addButton; +@synthesize toolBar; typedef enum _HistoryView { History_All, @@ -130,25 +133,43 @@ static UICompositeViewDescription *compositeDescription = nil; - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; - if ([[UIDevice currentDevice].systemVersion doubleValue] < 5.0) { - [tableController viewWillDisappear:animated]; - } } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; - if ([[UIDevice currentDevice].systemVersion doubleValue] < 5.0) { - [tableController viewWillAppear:animated]; - } - [self update]; + BOOL use_system = [[LinphoneManager instance] lpConfigBoolForKey:@"use_system_contacts"]; + if( use_system && !self.sysViewController){// use system contacts + ABPeoplePickerNavigationController* picker = [[ABPeoplePickerNavigationController alloc] init]; + picker.peoplePickerDelegate = self; + picker.view.frame = self.view.frame; + + [self.view addSubview:picker.view]; + + self.sysViewController = picker; + + } else if( !use_system && !self.tableController ){ + + CGRect subViewFrame= self.view.frame; + // let the toolBar be visible + subViewFrame.origin.y += self.toolBar.frame.size.height; + + self.tableController = [[ContactsTableViewController alloc] init]; + self.tableView = [[UITableView alloc] init]; + + self.tableController.view = self.tableView; + self.tableView.frame = subViewFrame; + + self.tableView.dataSource = self.tableController; + self.tableView.delegate = self.tableController; + + [self.view addSubview:tableView]; + [self update]; + } } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; - if ([[UIDevice currentDevice].systemVersion doubleValue] < 5.0) { - [tableController viewDidAppear:animated]; - } if(![FastAddressBook isAuthorized]) { UIAlertView* error = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Address book",nil) message:NSLocalizedString(@"You must authorize the application to have access to address book.\n" @@ -164,9 +185,6 @@ static UICompositeViewDescription *compositeDescription = nil; - (void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; - if ([[UIDevice currentDevice].systemVersion doubleValue] < 5.0) { - [tableController viewDidDisappear:animated]; - } } - (void)viewDidLoad { @@ -205,10 +223,10 @@ static UICompositeViewDescription *compositeDescription = nil; } else { allButton.selected = FALSE; } - + if(view == History_Linphone) { [ContactSelection setSipFilter:[LinphoneManager instance].contactFilter]; - [ContactSelection setEmailFilter:FALSE]; + [ContactSelection setEmailFilter:FALSE]; [tableController loadData]; linphoneButton.selected = TRUE; } else { @@ -265,4 +283,42 @@ static UICompositeViewDescription *compositeDescription = nil; [[PhoneMainView instance] popCurrentView]; } + +#pragma mark - ABPeoplePickerDelegate + +-(void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker +{ + [[PhoneMainView instance] popCurrentView]; + return; +} + +- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker + shouldContinueAfterSelectingPerson:(ABRecordRef)person { + return true; + +} + +- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker + shouldContinueAfterSelectingPerson:(ABRecordRef)person + property:(ABPropertyID)property + identifier:(ABMultiValueIdentifier)identifier { + + CFTypeRef multiValue = ABRecordCopyValue(person, property); + CFIndex valueIdx = ABMultiValueGetIndexForIdentifier(multiValue,identifier); + NSString *phoneNumber = (NSString *)ABMultiValueCopyValueAtIndex(multiValue, valueIdx); + // Go to dialer view + DialerViewController *controller = DYNAMIC_CAST([[PhoneMainView instance] changeCurrentView:[DialerViewController compositeViewDescription]], DialerViewController); + if(controller != nil) { + [controller call:phoneNumber displayName:(NSString*)ABRecordCopyCompositeName(person)]; + } + [phoneNumber release]; + CFRelease(multiValue); + return false; +} + + +- (void)viewDidUnload { +[self setToolBar:nil]; +[super viewDidUnload]; +} @end diff --git a/Resources/linphonerc b/Resources/linphonerc index 992f3b19c..ee656d368 100644 --- a/Resources/linphonerc +++ b/Resources/linphonerc @@ -26,6 +26,7 @@ upload_bw=380 rotation_preference=auto animations_preference=1 edge_opt_preference=0 +use_system_contacts=0 [default_values] reg_expires=600 \ No newline at end of file diff --git a/Resources/linphonerc~ipad b/Resources/linphonerc~ipad index cf9188553..a0164663f 100644 --- a/Resources/linphonerc~ipad +++ b/Resources/linphonerc~ipad @@ -26,6 +26,7 @@ upload_bw=512 rotation_preference=auto animations_preference=1 edge_opt_preference=0 +use_system_contacts=0 [default_values] reg_expires=600