diff --git a/Classes/ContactsViewController.m b/Classes/ContactsViewController.m index 117b47506..94d36acf0 100644 --- a/Classes/ContactsViewController.m +++ b/Classes/ContactsViewController.m @@ -138,7 +138,18 @@ static UICompositeViewDescription *compositeDescription = nil; [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" + "Toggle the application in Settings > Privacy > Contacts",nil) + delegate:nil + cancelButtonTitle:NSLocalizedString(@"Continue",nil) + otherButtonTitles:nil]; + [error show]; + [error release]; + [[PhoneMainView instance] changeCurrentView:[DialerViewController compositeViewDescription]]; + } } - (void)viewDidDisappear:(BOOL)animated { diff --git a/Classes/Utils/FastAddressBook.h b/Classes/Utils/FastAddressBook.h index 5550b373b..d93549dae 100644 --- a/Classes/Utils/FastAddressBook.h +++ b/Classes/Utils/FastAddressBook.h @@ -30,6 +30,8 @@ + (NSString*)getContactDisplayName:(ABRecordRef)contact; + (UIImage*)getContactImage:(ABRecordRef)contact thumbnail:(BOOL)thumbnail; - (ABRecordRef)getContact:(NSString*)address; +- (void)reload; ++ (BOOL)isAuthorized; + (NSString*)appendCountryCodeIfPossible:(NSString*)number; + (NSString*)normalizePhoneNumber:(NSString*)number; + (NSString*)normalizeSipURI:(NSString*)address; diff --git a/Classes/Utils/FastAddressBook.m b/Classes/Utils/FastAddressBook.m index ffa5d826a..8028e1c37 100644 --- a/Classes/Utils/FastAddressBook.m +++ b/Classes/Utils/FastAddressBook.m @@ -107,24 +107,44 @@ static void sync_address_book (ABAddressBookRef addressBook, CFDictionaryRef inf return [FastAddressBook appendCountryCodeIfPossible:lNormalizedAddress]; } ++ (BOOL)isAuthorized { + return !ABAddressBookGetAuthorizationStatus || ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized; +} + - (FastAddressBook*)init { if ((self = [super init]) != nil) { addressBookMap = [[NSMutableDictionary alloc] init]; - addressBook = ABAddressBookCreate(); - ABAddressBookRegisterExternalChangeCallback (addressBook, sync_address_book, self); - if (ABAddressBookGetAuthorizationStatus && ABAddressBookGetAuthorizationStatus() != kABAuthorizationStatusNotDetermined) { - ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) { - if (granted) [self loadData]; - }); - } else { - [self loadData]; - } - - + addressBook = nil; + [self reload]; } return self; } +- (void)reload { + if(addressBook != nil) { + ABAddressBookUnregisterExternalChangeCallback(addressBook, sync_address_book, self); + CFRelease(addressBook); + addressBook = nil; + } + NSError *error = nil; + if(ABAddressBookCreateWithOptions) { + addressBook = ABAddressBookCreateWithOptions(NULL, NULL); + } else { + addressBook = ABAddressBookCreate(); + } + if(addressBook != NULL) { + ABAddressBookRegisterExternalChangeCallback (addressBook, sync_address_book, self); + [self loadData]; + } else { + [LinphoneLogger log:LinphoneLoggerError format:@"Create AddressBook: Fail(%@)", [error localizedDescription]]; + if(ABAddressBookGetAuthorizationStatus) { + ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) { + if (granted) [self reload]; + }); + } + } +} + - (void)loadData { ABAddressBookRevert(addressBook); @synchronized (addressBookMap) { diff --git a/Resources/en.lproj/Localizable.strings b/Resources/en.lproj/Localizable.strings index d2a597f68..a85e45a15 100644 Binary files a/Resources/en.lproj/Localizable.strings and b/Resources/en.lproj/Localizable.strings differ diff --git a/Resources/fr.lproj/Localizable.strings b/Resources/fr.lproj/Localizable.strings index 51184f0f6..802abc27b 100644 Binary files a/Resources/fr.lproj/Localizable.strings and b/Resources/fr.lproj/Localizable.strings differ diff --git a/linphone.ldb/Contents.plist b/linphone.ldb/Contents.plist index 548e565a6..e0e84a8c9 100644 --- a/linphone.ldb/Contents.plist +++ b/linphone.ldb/Contents.plist @@ -12050,7 +12050,7 @@ change date - 2012-10-05T12:13:58Z + 2012-10-16T09:25:05Z changed values class @@ -12060,7 +12060,7 @@ flags 0 hash - 1a73bb401d656923b7ded3d958f5bb5b + c50a71e6174b7a7b723ffa38dd90788b name Localizable.strings @@ -12319,6 +12319,31 @@ La cause était: %2$@ snapshots + + change date + 2001-01-01T00:00:00Z + changed values + + class + BLStringKeyObject + comment + No comment provided by engineer. + errors + + flags + 0 + key + Address book + localizations + + en + Address book + fr + Annuaire + + snapshots + + change date 2001-01-01T00:00:00Z @@ -14283,6 +14308,34 @@ La cause était: %2$@ snapshots + + change date + 2001-01-01T00:00:00Z + changed values + + class + BLStringKeyObject + comment + No comment provided by engineer. + errors + + flags + 0 + key + You must authorize the application to have access to address book. +Toggle the application in Settings > Privacy > Contacts + localizations + + en + You must authorize the application to have access to address book. +Toggle the application in Settings > Privacy > Contacts + fr + Vous devez autoriser l'application à accéder à l'annuaire. +Activer l'application dans Réglages > Confidentialité > Contacts + + snapshots + + change date 2001-01-01T00:00:00Z diff --git a/linphone.ldb/Resources/Resources/Localizable/1/Localizable.strings b/linphone.ldb/Resources/Resources/Localizable/1/Localizable.strings index d2a597f68..a85e45a15 100644 Binary files a/linphone.ldb/Resources/Resources/Localizable/1/Localizable.strings and b/linphone.ldb/Resources/Resources/Localizable/1/Localizable.strings differ diff --git a/linphone.xcodeproj/project.pbxproj b/linphone.xcodeproj/project.pbxproj index 3591f4466..fa939349c 100755 --- a/linphone.xcodeproj/project.pbxproj +++ b/linphone.xcodeproj/project.pbxproj @@ -5688,7 +5688,7 @@ HEADER_SEARCH_PATHS = ""; IPHONEOS_DEPLOYMENT_TARGET = 4.0; LIBRARY_SEARCH_PATHS = ""; - PROVISIONING_PROFILE = "FFF4AA57-7302-4F48-B969-20CFC1B10BAF"; + PROVISIONING_PROFILE = "79E53132-649F-48B3-A931-24792E466A11"; SDKROOT = iphoneos; STANDARD_C_PLUS_PLUS_LIBRARY_TYPE = dynamic; TARGETED_DEVICE_FAMILY = "1,2";