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>) {
|
private fun processMagicSearchResults(results: Array<SearchResult>) {
|
||||||
|
Log.i("[Contacts] Processing ${results.size} results")
|
||||||
val list = arrayListOf<ContactViewModel>()
|
val list = arrayListOf<ContactViewModel>()
|
||||||
for (result in results) {
|
for (result in results) {
|
||||||
val contact = searchMatchingContact(result) ?: Contact(searchResult = result)
|
val contact = searchMatchingContact(result) ?: Contact(searchResult = result)
|
||||||
|
@ -212,8 +213,16 @@ class ContactsListViewModel : ViewModel() {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun searchMatchingContact(searchResult: SearchResult): Contact? {
|
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) {
|
if (address != null) {
|
||||||
val contact = coreContext.contactsManager.findContactByAddress(address, ignoreLocalContact = true)
|
val contact = coreContext.contactsManager.findContactByAddress(address, ignoreLocalContact = true)
|
||||||
if (contact != null) return contact
|
if (contact != null) return contact
|
||||||
|
|
|
@ -237,6 +237,31 @@ class ContactsManager(private val context: Context) {
|
||||||
return friend?.userData as? Contact
|
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
|
@Synchronized
|
||||||
fun findContactByAddress(address: Address, ignoreLocalContact: Boolean = false): Contact? {
|
fun findContactByAddress(address: Address, ignoreLocalContact: Boolean = false): Contact? {
|
||||||
if (!ignoreLocalContact) {
|
if (!ignoreLocalContact) {
|
||||||
|
@ -253,10 +278,23 @@ class ContactsManager(private val context: Context) {
|
||||||
val cleanStringAddress = cleanAddress.asStringUriOnly()
|
val cleanStringAddress = cleanAddress.asStringUriOnly()
|
||||||
|
|
||||||
val cacheFriend = friendsMap[cleanStringAddress]
|
val cacheFriend = friendsMap[cleanStringAddress]
|
||||||
val friend: Friend? = coreContext.core.findFriend(address)
|
if (cacheFriend != null) {
|
||||||
val contact: Contact? = friend?.userData as? Contact
|
val contact: Contact? = cacheFriend.userData as? Contact
|
||||||
if (cacheFriend == null && friend != null) friendsMap[cleanStringAddress] = friend
|
if (contact != null) {
|
||||||
if (contact != null) return contact
|
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
|
val username = address.username
|
||||||
if (username != null && Patterns.PHONE.matcher(username).matches()) {
|
if (username != null && Patterns.PHONE.matcher(username).matches()) {
|
||||||
|
|
Loading…
Reference in a new issue