From 1a2d10d2cc3b0d37517bc391b06d85ffe43f723f Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Thu, 31 May 2018 14:27:14 -0400 Subject: [PATCH 1/2] Fix ordering of contacts picker. --- Signal/src/ViewControllers/ContactsPicker.swift | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/Signal/src/ViewControllers/ContactsPicker.swift b/Signal/src/ViewControllers/ContactsPicker.swift index 767bdc9df..d55969772 100644 --- a/Signal/src/ViewControllers/ContactsPicker.swift +++ b/Signal/src/ViewControllers/ContactsPicker.swift @@ -196,13 +196,20 @@ public class ContactsPicker: OWSViewController, UITableViewDelegate, UITableView } func collatedContacts(_ contacts: [CNContact]) -> [[CNContact]] { - let selector: Selector = #selector(getter: CNContact.nameForCollating) + let sortSelector = #selector(getter: CNContact.nameForCollating) + // 1. Organize the contacts into sections. var collated = Array(repeating: [CNContact](), count: collation.sectionTitles.count) for contact in contacts { - let sectionNumber = collation.section(for: contact, collationStringSelector: selector) + let sectionNumber = collation.section(for: contact, + collationStringSelector: sortSelector) collated[sectionNumber].append(contact) } + // 2. Sort the contents of each section. + collated = collated.map({ (sectionContacts) in + return collation.sortedArray(from: sectionContacts, + collationStringSelector: sortSelector) + }) as! [[CNContact]] return collated } @@ -365,7 +372,7 @@ fileprivate extension CNContact { @objc var nameForCollating: String { get { if self.familyName.isEmpty && self.givenName.isEmpty { - return self.emailAddresses.first?.value as String? ?? "" + return (self.emailAddresses.first?.value as String? ?? "").lowercased().ows_stripped() } let compositeName: String @@ -374,7 +381,7 @@ fileprivate extension CNContact { } else { compositeName = "\(self.givenName) \(self.familyName)" } - return compositeName.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines) + return compositeName.lowercased().ows_stripped() } } } From 0498ceb82ff630ea06d9e5a0cc2c96024a1c7afa Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Thu, 31 May 2018 16:49:29 -0400 Subject: [PATCH 2/2] Respond to CR. --- Signal/src/ViewControllers/ContactsPicker.swift | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/Signal/src/ViewControllers/ContactsPicker.swift b/Signal/src/ViewControllers/ContactsPicker.swift index d55969772..2ed0e49e7 100644 --- a/Signal/src/ViewControllers/ContactsPicker.swift +++ b/Signal/src/ViewControllers/ContactsPicker.swift @@ -185,6 +185,7 @@ public class ContactsPicker: OWSViewController, UITableViewDelegate, UITableView do { let contactFetchRequest = CNContactFetchRequest(keysToFetch: allowedContactKeys) + contactFetchRequest.sortOrder = .userDefault try contactStore.enumerateContacts(with: contactFetchRequest) { (contact, _) -> Void in contacts.append(contact) } @@ -196,20 +197,13 @@ public class ContactsPicker: OWSViewController, UITableViewDelegate, UITableView } func collatedContacts(_ contacts: [CNContact]) -> [[CNContact]] { - let sortSelector = #selector(getter: CNContact.nameForCollating) + let selector: Selector = #selector(getter: CNContact.nameForCollating) - // 1. Organize the contacts into sections. var collated = Array(repeating: [CNContact](), count: collation.sectionTitles.count) for contact in contacts { - let sectionNumber = collation.section(for: contact, - collationStringSelector: sortSelector) + let sectionNumber = collation.section(for: contact, collationStringSelector: selector) collated[sectionNumber].append(contact) } - // 2. Sort the contents of each section. - collated = collated.map({ (sectionContacts) in - return collation.sortedArray(from: sectionContacts, - collationStringSelector: sortSelector) - }) as! [[CNContact]] return collated } @@ -372,7 +366,7 @@ fileprivate extension CNContact { @objc var nameForCollating: String { get { if self.familyName.isEmpty && self.givenName.isEmpty { - return (self.emailAddresses.first?.value as String? ?? "").lowercased().ows_stripped() + return self.emailAddresses.first?.value as String? ?? "" } let compositeName: String @@ -381,7 +375,7 @@ fileprivate extension CNContact { } else { compositeName = "\(self.givenName) \(self.familyName)" } - return compositeName.lowercased().ows_stripped() + return compositeName.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines) } } }