Merge branch 'mkirk/respect-contact-sort-pref'

pull/1/head
Michael Kirk 7 years ago
commit 3162160b5e

@ -25,6 +25,8 @@ class ContactsFrameworkContactStoreAdaptee: ContactStoreAdaptee {
private let contactStore = CNContactStore()
private var changeHandler: (() -> Void)?
private var initializedObserver = false
private var lastSortOrder: CNContactSortOrder?
let supportsContactEditing = true
private let allowedContactKeys: [CNKeyDescriptor] = [
@ -52,7 +54,23 @@ class ContactsFrameworkContactStoreAdaptee: ContactStoreAdaptee {
// should only call once
assert(self.changeHandler == nil)
self.changeHandler = changeHandler
self.lastSortOrder = CNContactsUserDefaults.shared().sortOrder
NotificationCenter.default.addObserver(self, selector: #selector(runChangeHandler), name: .CNContactStoreDidChange, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(didBecomeActive), name: .UIApplicationDidBecomeActive, object: nil)
}
@objc
func didBecomeActive() {
let currentSortOrder = CNContactsUserDefaults.shared().sortOrder
guard currentSortOrder != self.lastSortOrder else {
// sort order unchanged
return
}
Logger.info("\(TAG) sort order changed: \(String(describing: self.lastSortOrder)) -> \(String(describing: currentSortOrder))")
self.lastSortOrder = currentSortOrder
self.runChangeHandler()
}
@objc
@ -73,6 +91,7 @@ class ContactsFrameworkContactStoreAdaptee: ContactStoreAdaptee {
var systemContacts = [CNContact]()
do {
let contactFetchRequest = CNContactFetchRequest(keysToFetch: self.allowedContactKeys)
contactFetchRequest.sortOrder = .userDefault
try self.contactStore.enumerateContacts(with: contactFetchRequest) { (contact, _) -> Void in
systemContacts.append(contact)
}
@ -490,8 +509,11 @@ struct HashableArray<Element: Hashable>: Hashable {
var hashValue: Int {
// random generated 32bit number
let base = 224712574
var position = 0
return elements.reduce(base) { (result, element) -> Int in
return result ^ element.hashValue
// Make sure change in sort order invalidates hash
position += 1
return result ^ element.hashValue + position
}
}

Loading…
Cancel
Save