From a4eb34b2367cb5ea14887aaef818f8f60eb4ee82 Mon Sep 17 00:00:00 2001 From: hubert3 Date: Sat, 2 Aug 2014 14:51:10 +1000 Subject: [PATCH] Only display contacts that have a phone number --- Signal/src/contact/ContactsManager.m | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/Signal/src/contact/ContactsManager.m b/Signal/src/contact/ContactsManager.m index 6f1048afd..6357f1a68 100644 --- a/Signal/src/contact/ContactsManager.m +++ b/Signal/src/contact/ContactsManager.m @@ -181,9 +181,24 @@ void onAddressBookChanged(ABAddressBookRef notifyAddressBook, CFDictionaryRef in NSArray *sortedPeople = (__bridge_transfer NSArray *)allPeopleMutable; + NSPredicate* predicate = [NSPredicate predicateWithBlock: ^BOOL(id record, NSDictionary *bindings) { + ABMultiValueRef phoneNumbers = ABRecordCopyValue( (__bridge ABRecordRef)record, kABPersonPhoneProperty); + BOOL result = NO; + + for (CFIndex i = 0; i < ABMultiValueGetCount(phoneNumbers); i++) { + NSString* phoneNumber = (__bridge_transfer NSString*) ABMultiValueCopyValueAtIndex(phoneNumbers, i); + if ([phoneNumber length]>0) { + result = YES; + break; + } + } + CFRelease(phoneNumbers); + return result; + }]; CFRelease(allPeople); + NSArray* filteredContacts = [sortedPeople filteredArrayUsingPredicate:predicate]; - return [sortedPeople map:^id(id item) { + return [filteredContacts map:^id(id item) { return [self contactForRecord:(__bridge ABRecordRef)item]; }]; }