diff --git a/app/src/main/java/org/linphone/contact/ContactsManager.kt b/app/src/main/java/org/linphone/contact/ContactsManager.kt index 0c633bcc6..407e381ad 100644 --- a/app/src/main/java/org/linphone/contact/ContactsManager.kt +++ b/app/src/main/java/org/linphone/contact/ContactsManager.kt @@ -25,6 +25,7 @@ import android.content.ContentResolver import android.content.Context import android.database.ContentObserver import android.net.Uri +import android.os.AsyncTask import android.os.AsyncTask.THREAD_POOL_EXECUTOR import android.provider.ContactsContract import android.util.Patterns @@ -290,15 +291,18 @@ class ContactsManager(private val context: Context) { val contact: Contact = friend.userData as Contact Log.d("[Contacts Manager] Received presence information for contact $contact") - for (listener in contactsUpdatedListeners) { - listener.onContactUpdated(contact) - } - if (corePreferences.storePresenceInNativeContact && PermissionHelper.get().hasWriteContactsPermission()) { if (contact is NativeContact) { storePresenceInNativeContact(contact) } } + if (loadContactsTask?.status == AsyncTask.Status.RUNNING) { + Log.w("[Contacts Manager] Async contacts loader running, skip onContactUpdated listener notify") + } else { + for (listener in contactsUpdatedListeners) { + listener.onContactUpdated(contact) + } + } if (!sipContacts.contains(contact)) { sipContacts.add(contact) @@ -317,6 +321,13 @@ class ContactsManager(private val context: Context) { val contact: Contact = friend.userData as Contact if (contact is NativeContact) { storePresenceInNativeContact(contact) + if (loadContactsTask?.status == AsyncTask.Status.RUNNING) { + Log.w("[Contacts Manager] Async contacts loader running, skip onContactUpdated listener notify") + } else { + for (listener in contactsUpdatedListeners) { + listener.onContactUpdated(contact) + } + } } } } @@ -337,9 +348,6 @@ class ContactsManager(private val context: Context) { } } deferred.await() - for (listener in contactsUpdatedListeners) { - listener.onContactUpdated(contact) - } } } }