From 81e1ec4b9ed58e282e1d02a8c3a5b82e65f0cb4b Mon Sep 17 00:00:00 2001 From: Russ Shanahan Date: Wed, 23 Nov 2016 14:30:21 -0500 Subject: [PATCH] Compare both first and last names when sorting (#1487) If two names have the same last name, ensure we fall back on the first name when sorting them. // FREEBIE --- Podfile.lock | 2 +- Signal/src/contact/OWSContactsManager.m | 42 ++----------------------- 2 files changed, 4 insertions(+), 40 deletions(-) diff --git a/Podfile.lock b/Podfile.lock index bef05e428..ba7c3c4c6 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -132,7 +132,7 @@ EXTERNAL SOURCES: CHECKOUT OPTIONS: SignalServiceKit: - :commit: 3083e2929c7dcfe5c60e003dd77c310d26dab177 + :commit: 34ffce89f59356ab23f290866b1c3437f03312ce :git: https://github.com/WhisperSystems/SignalServiceKit.git SocketRocket: :commit: 41b57bb2fc292a814f758441a05243eb38457027 diff --git a/Signal/src/contact/OWSContactsManager.m b/Signal/src/contact/OWSContactsManager.m index e5c896562..5695e0fe8 100644 --- a/Signal/src/contact/OWSContactsManager.m +++ b/Signal/src/contact/OWSContactsManager.m @@ -385,46 +385,10 @@ void onAddressBookChanged(ABAddressBookRef notifyAddressBook, CFDictionaryRef in signalContacts[contact.textSecureIdentifiers.firstObject] = contact; } } - return [signalContacts.allValues sortedArrayUsingComparator:[[self class] contactComparator]]; -} -+ (NSComparator)contactComparator { - return ^NSComparisonResult(id obj1, id obj2) { - Contact *contact1 = (Contact *)obj1; - Contact *contact2 = (Contact *)obj2; - - BOOL firstNameOrdering = ABPersonGetSortOrdering() == kABPersonCompositeNameFormatFirstNameFirst ? YES : NO; - - if (firstNameOrdering) { - if (contact1.firstName) { - if (contact2.firstName) { - return [contact1.firstName caseInsensitiveCompare:contact2.firstName]; - } else { - return [contact1.firstName caseInsensitiveCompare:contact2.lastName]; - } - } else { - if (contact2.firstName) { - return [contact1.lastName caseInsensitiveCompare:contact2.firstName]; - } else { - return [contact1.lastName caseInsensitiveCompare:contact2.lastName]; - } - } - } else { - if (contact1.lastName) { - if (contact2.lastName) { - return [contact1.lastName caseInsensitiveCompare:contact2.lastName]; - } else { - return [contact1.lastName caseInsensitiveCompare:contact2.firstName]; - } - } else { - if (contact2.lastName) { - return [contact1.firstName caseInsensitiveCompare:contact2.lastName]; - } else { - return [contact1.firstName caseInsensitiveCompare:contact2.firstName]; - } - } - }; - }; + BOOL firstNameOrdering = ABPersonGetSortOrdering() == kABPersonCompositeNameFormatFirstNameFirst ? YES : NO; + NSComparator contactsComparator = [Contact comparatorSortingNamesByFirstThenLast:firstNameOrdering]; + return [signalContacts.allValues sortedArrayUsingComparator:contactsComparator]; } - (NSArray *)signalContacts {