From c556d14fb08a12f0dab22be2f73f8a18536b798b Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 29 Sep 2025 13:59:50 +0200 Subject: [PATCH] Fixed ConcurrentModificationException that could happen during contact edition --- .../viewmodel/ContactNewOrEditViewModel.kt | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactNewOrEditViewModel.kt b/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactNewOrEditViewModel.kt index 4f7d61800..da7c88ee0 100644 --- a/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactNewOrEditViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactNewOrEditViewModel.kt @@ -262,10 +262,14 @@ class ContactNewOrEditViewModel fun addSipAddress(address: String = "", requestFieldToBeAddedInUi: Boolean = false) { val newModel = NewOrEditNumberOrAddressModel(address, true, "", { if (address.isEmpty()) { - addSipAddress(requestFieldToBeAddedInUi = true) + coreContext.postOnCoreThread { + addSipAddress(requestFieldToBeAddedInUi = true) + } } }, { model -> - removeModel(model) + coreContext.postOnCoreThread { + removeModel(model) + } }) sipAddresses.add(newModel) @@ -282,10 +286,14 @@ class ContactNewOrEditViewModel ) { val newModel = NewOrEditNumberOrAddressModel(number, false, label, { if (number.isEmpty()) { - addPhoneNumber(requestFieldToBeAddedInUi = true) + coreContext.postOnCoreThread { + addPhoneNumber(requestFieldToBeAddedInUi = true) + } } }, { model -> - removeModel(model) + coreContext.postOnCoreThread { + removeModel(model) + } }) phoneNumbers.add(newModel) @@ -294,14 +302,14 @@ class ContactNewOrEditViewModel } } - @UiThread + @WorkerThread private fun removeModel(model: NewOrEditNumberOrAddressModel) { if (model.isSip) { sipAddresses.remove(model) } else { phoneNumbers.remove(model) } - removeNewNumberOrAddressFieldEvent.value = Event(model) + removeNewNumberOrAddressFieldEvent.postValue(Event(model)) } @UiThread