diff --git a/app/src/main/java/org/linphone/contact/ContactsManager.kt b/app/src/main/java/org/linphone/contact/ContactsManager.kt index 3e10e7e12..383f0a6c4 100644 --- a/app/src/main/java/org/linphone/contact/ContactsManager.kt +++ b/app/src/main/java/org/linphone/contact/ContactsManager.kt @@ -111,9 +111,7 @@ class ContactsManager(private val context: Context) { if (sipContactsListUpdated) { sipContacts.sort() Log.i("[Contacts Manager] Notifying observers that list has changed") - for (listener in contactsUpdatedListeners) { - listener.onContactsUpdated() - } + notifyListeners() } } } @@ -193,9 +191,7 @@ class ContactsManager(private val context: Context) { updateLocalContacts() Log.i("[Contacts Manager] Async fetching finished, notifying observers") - for (listener in contactsUpdatedListeners) { - listener.onContactsUpdated() - } + notifyListeners() } @Synchronized @@ -266,6 +262,22 @@ class ContactsManager(private val context: Context) { contactsUpdatedListeners.remove(listener) } + @Synchronized + fun notifyListeners() { + val list = contactsUpdatedListeners.toMutableList() + for (listener in list) { + listener.onContactsUpdated() + } + } + + @Synchronized + fun notifyListeners(contact: Contact) { + val list = contactsUpdatedListeners.toMutableList() + for (listener in list) { + listener.onContactUpdated(contact) + } + } + @Synchronized fun destroy() { context.contentResolver.unregisterContentObserver(contactsObserver) @@ -351,9 +363,7 @@ class ContactsManager(private val context: Context) { 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) - } + notifyListeners(contact) } if (!sipContacts.contains(contact)) { @@ -376,9 +386,7 @@ class ContactsManager(private val context: Context) { 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) - } + notifyListeners(contact) } } }