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";