From 4c83e823fc2762c9f342295478849906dd89ee98 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 11 Apr 2022 11:38:42 +0200 Subject: [PATCH] Trying to fix concurrent exception in contacts loader --- .../main/java/org/linphone/contact/ContactLoader.kt | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/linphone/contact/ContactLoader.kt b/app/src/main/java/org/linphone/contact/ContactLoader.kt index 689006616..b1ce95cc0 100644 --- a/app/src/main/java/org/linphone/contact/ContactLoader.kt +++ b/app/src/main/java/org/linphone/contact/ContactLoader.kt @@ -56,8 +56,6 @@ class ContactLoader : LoaderManager.LoaderCallbacks { ) } - private val friends = HashMap() - override fun onCreateLoader(id: Int, args: Bundle?): Loader { Log.i("[Contacts Loader] Loader created") coreContext.contactsManager.fetchInProgress.value = true @@ -74,11 +72,12 @@ class ContactLoader : LoaderManager.LoaderCallbacks { override fun onLoadFinished(loader: Loader, cursor: Cursor) { Log.i("[Contacts Loader] Load finished, found ${cursor.count} entries in cursor") - friends.clear() val core = coreContext.core val linphoneMime = loader.context.getString(R.string.linphone_address_mime_type) coreContext.lifecycleScope.launch { + val friends = HashMap() + withContext(Dispatchers.IO) { while (!cursor.isClosed && cursor.moveToNext()) { try { @@ -191,13 +190,15 @@ class ContactLoader : LoaderManager.LoaderCallbacks { } if (fl != core.defaultFriendList) core.addFriendList(fl) - for (friend in friends.values) { + + val friendsList = friends.values + for (friend in friendsList) { fl.addLocalFriend(friend) } + fl.updateSubscriptions() Log.i("[Contacts Loader] Friends added & subscription updated") - friends.clear() coreContext.contactsManager.fetchFinished() } }