Simplified code

This commit is contained in:
Sylvain Berfini 2022-03-03 11:43:49 +01:00
parent 8d0b571f38
commit 4a05302722
3 changed files with 22 additions and 68 deletions

View file

@ -79,9 +79,6 @@ class AsyncContactsLoader(private val context: Context) :
nativeIds.add(contact.nativeId)
} else {
data.contacts.add(contact)
if (contact.sipAddresses.isNotEmpty()) {
data.sipContacts.add(contact)
}
}
} else {
if (friend.refKey != null) {
@ -95,9 +92,6 @@ class AsyncContactsLoader(private val context: Context) :
contact.syncValuesFromFriend()
friend.userData = contact
data.contacts.add(contact)
if (contact.sipAddresses.isNotEmpty()) {
data.sipContacts.add(contact)
}
}
}
}
@ -209,11 +203,6 @@ class AsyncContactsLoader(private val context: Context) :
}
}
if (!corePreferences.hideContactsWithoutPresence) {
if (contact.sipAddresses.isNotEmpty() && !data.sipContacts.contains(contact)) {
data.sipContacts.add(contact)
}
}
data.contacts.add(contact)
}
androidContactsCache.clear()
@ -226,19 +215,13 @@ class AsyncContactsLoader(private val context: Context) :
override fun onPostExecute(data: AsyncContactsData) {
if (isCancelled) return
Log.i("[Contacts Loader] ${data.contacts.size} contacts found in which ${data.sipContacts.size} are SIP")
Log.i("[Contacts Loader] ${data.contacts.size} contacts")
for (contact in data.contacts) {
if (contact is NativeContact) {
contact.createOrUpdateFriendFromNativeContact()
if (contact.friend?.presenceModel?.basicStatus == PresenceBasicStatus.Open && !data.sipContacts.contains(contact)) {
Log.i("[Contacts Loader] Friend $contact has presence information, adding it to SIP list")
data.sipContacts.add(contact)
}
}
}
data.sipContacts.sort()
// Now that contact fetching is asynchronous, this is required to ensure
// presence subscription event will be sent with all friends
@ -266,13 +249,12 @@ class AsyncContactsLoader(private val context: Context) :
}
}
coreContext.contactsManager.updateContacts(data.contacts, data.sipContacts)
coreContext.contactsManager.updateContacts(data.contacts)
Log.i("[Contacts Loader] Synchronization finished")
}
class AsyncContactsData {
val contacts = arrayListOf<Contact>()
val sipContacts = arrayListOf<Contact>()
}
}

View file

@ -73,11 +73,6 @@ class ContactsManager(private val context: Context) {
get
@Synchronized
private set
var sipContacts = ArrayList<Contact>()
@Synchronized
get
@Synchronized
private set
val magicSearch: MagicSearch by lazy {
val magicSearch = coreContext.core.createMagicSearch()
@ -93,7 +88,7 @@ class ContactsManager(private val context: Context) {
@Synchronized
private set
private val friendsMap: HashMap<String, Friend> = HashMap()
private val friendsMap: HashMap<String, Contact> = HashMap()
private val contactsUpdatedListeners = ArrayList<ContactsUpdatedListener>()
@ -103,18 +98,10 @@ class ContactsManager(private val context: Context) {
@Synchronized
override fun onPresenceReceived(list: FriendList, friends: Array<Friend>) {
Log.i("[Contacts Manager] Presence received")
var sipContactsListUpdated = false
for (friend in friends) {
if (refreshContactOnPresenceReceived(friend)) {
sipContactsListUpdated = true
}
}
if (sipContactsListUpdated) {
sipContacts.sort()
Log.i("[Contacts Manager] Notifying observers that list has changed")
notifyListeners()
refreshContactOnPresenceReceived(friend)
}
notifyListeners()
}
}
@ -185,12 +172,9 @@ class ContactsManager(private val context: Context) {
}
@Synchronized
fun updateContacts(all: ArrayList<Contact>, sip: ArrayList<Contact>) {
fun updateContacts(all: ArrayList<Contact>) {
contacts.clear()
sipContacts.clear()
contacts.addAll(all)
sipContacts.addAll(sip)
updateLocalContacts()
@ -231,10 +215,13 @@ class ContactsManager(private val context: Context) {
@Synchronized
fun findContactByPhoneNumber(number: String): Contact? {
val cacheFriend = friendsMap[number]
val friend: Friend? = cacheFriend ?: coreContext.core.findFriendByPhoneNumber(number)
if (cacheFriend == null && friend != null) friendsMap[number] = friend
return friend?.userData as? Contact
val contact = friendsMap[number]
if (contact != null) return contact
val friend = coreContext.core.findFriendByPhoneNumber(number)
val udContact = friend?.userData as? Contact
if (udContact != null) friendsMap[number] = udContact
return udContact
}
@Synchronized
@ -277,21 +264,16 @@ class ContactsManager(private val context: Context) {
cleanAddress.clean() // To remove gruu if any
val cleanStringAddress = cleanAddress.asStringUriOnly()
val cacheFriend = friendsMap[cleanStringAddress]
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 cacheContact = friendsMap[cleanStringAddress]
if (cacheContact != null) {
return cacheContact
}
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
friendsMap[cleanStringAddress] = contact
return contact
}
}
@ -343,11 +325,6 @@ class ContactsManager(private val context: Context) {
}
contacts.clear()
for (contact in sipContacts) {
contact.friend = null
}
sipContacts.clear()
val core = coreContext.core
for (list in core.friendsLists) list.removeListener(friendListListener)
}
@ -405,8 +382,8 @@ class ContactsManager(private val context: Context) {
}
@Synchronized
private fun refreshContactOnPresenceReceived(friend: Friend): Boolean {
if (friend.userData == null) return false
private fun refreshContactOnPresenceReceived(friend: Friend) {
if (friend.userData == null) return
val contact: Contact = friend.userData as Contact
Log.d("[Contacts Manager] Received presence information for contact $contact")
@ -420,13 +397,6 @@ class ContactsManager(private val context: Context) {
} else {
notifyListeners(contact)
}
if (!sipContacts.contains(contact)) {
sipContacts.add(contact)
return true
}
return false
}
@Synchronized

View file

@ -223,7 +223,9 @@ class NativeContact(val nativeId: String, private val lookupKey: String? = null)
for (number in rawPhoneNumbers) friend.addPhoneNumber(number)
friend.done()
if (created) coreContext.core.defaultFriendList?.addFriend(friend)
if (created) {
coreContext.core.defaultFriendList?.addFriend(friend)
}
}
}