Fixed issue with contacts order
This commit is contained in:
parent
9b69d552aa
commit
8d0b571f38
2 changed files with 52 additions and 5 deletions
|
@ -119,6 +119,7 @@ class ContactsListViewModel : ViewModel() {
|
|||
}
|
||||
|
||||
private fun processMagicSearchResults(results: Array<SearchResult>) {
|
||||
Log.i("[Contacts] Processing ${results.size} results")
|
||||
val list = arrayListOf<ContactViewModel>()
|
||||
for (result in results) {
|
||||
val contact = searchMatchingContact(result) ?: Contact(searchResult = result)
|
||||
|
@ -212,8 +213,16 @@ class ContactsListViewModel : ViewModel() {
|
|||
}
|
||||
|
||||
private fun searchMatchingContact(searchResult: SearchResult): Contact? {
|
||||
val address = searchResult.address
|
||||
val friend = searchResult.friend
|
||||
if (friend != null) {
|
||||
val contact: Contact? = friend.userData as? Contact
|
||||
if (contact != null) return contact
|
||||
|
||||
val friendContact = coreContext.contactsManager.findContactByFriend(friend)
|
||||
if (friendContact != null) return friendContact
|
||||
}
|
||||
|
||||
val address = searchResult.address
|
||||
if (address != null) {
|
||||
val contact = coreContext.contactsManager.findContactByAddress(address, ignoreLocalContact = true)
|
||||
if (contact != null) return contact
|
||||
|
|
|
@ -237,6 +237,31 @@ class ContactsManager(private val context: Context) {
|
|||
return friend?.userData as? Contact
|
||||
}
|
||||
|
||||
@Synchronized
|
||||
fun findContactByFriend(friend: Friend): Contact? {
|
||||
val address = friend.address
|
||||
if (address != null) {
|
||||
val friends = coreContext.core.findFriends(address)
|
||||
for (f in friends) {
|
||||
if (f.name == friend.name) {
|
||||
val contact: Contact? = f.userData as? Contact
|
||||
if (contact != null) return contact
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (list in coreContext.core.friendsLists) {
|
||||
for (f in list.friends) {
|
||||
if (f.name == friend.name) {
|
||||
val contact: Contact? = f.userData as? Contact
|
||||
if (contact != null) return contact
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
@Synchronized
|
||||
fun findContactByAddress(address: Address, ignoreLocalContact: Boolean = false): Contact? {
|
||||
if (!ignoreLocalContact) {
|
||||
|
@ -253,10 +278,23 @@ class ContactsManager(private val context: Context) {
|
|||
val cleanStringAddress = cleanAddress.asStringUriOnly()
|
||||
|
||||
val cacheFriend = friendsMap[cleanStringAddress]
|
||||
val friend: Friend? = coreContext.core.findFriend(address)
|
||||
val contact: Contact? = friend?.userData as? Contact
|
||||
if (cacheFriend == null && friend != null) friendsMap[cleanStringAddress] = friend
|
||||
if (contact != null) return contact
|
||||
if (cacheFriend != null) {
|
||||
val contact: Contact? = cacheFriend.userData as? Contact
|
||||
if (contact != null) {
|
||||
Log.i("[Contacts Manager] Found contact $contact from friend in cache: $cacheFriend")
|
||||
return contact
|
||||
}
|
||||
}
|
||||
|
||||
val friends = coreContext.core.findFriends(address)
|
||||
for (friend in friends) {
|
||||
val contact: Contact? = friend?.userData as? Contact
|
||||
if (contact != null) {
|
||||
Log.i("[Contacts Manager] Found contact $contact from friend in Core: $friend")
|
||||
friendsMap[cleanStringAddress] = friend
|
||||
return contact
|
||||
}
|
||||
}
|
||||
|
||||
val username = address.username
|
||||
if (username != null && Patterns.PHONE.matcher(username).matches()) {
|
||||
|
|
Loading…
Reference in a new issue