From db2ce910b9ccbe7dbcc3d9e909f520ed153db2fa Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Wed, 18 Sep 2024 16:28:31 +0200 Subject: [PATCH] Fixed pre-selected contacts not having the checkmark in participants list edition --- .../ui/main/fragment/AddParticipantsFragment.kt | 7 ++++--- .../ui/main/viewmodel/AddParticipantsViewModel.kt | 4 ++++ .../ui/main/viewmodel/AddressSelectionViewModel.kt | 11 +++++++++++ 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/linphone/ui/main/fragment/AddParticipantsFragment.kt b/app/src/main/java/org/linphone/ui/main/fragment/AddParticipantsFragment.kt index 125b650b3..6758e5a96 100644 --- a/app/src/main/java/org/linphone/ui/main/fragment/AddParticipantsFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/fragment/AddParticipantsFragment.kt @@ -81,13 +81,14 @@ class AddParticipantsFragment : GenericAddressPickerFragment() { setupRecyclerView(binding.contactsList) val participants = args.selectedParticipants - if (!participants.isNullOrEmpty()) { - viewModel.addSelectedParticipants(participants) - } viewModel.modelsList.observe( viewLifecycleOwner ) { + if (!participants.isNullOrEmpty()) { + viewModel.addSelectedParticipants(participants) + } + Log.i("$TAG Contacts & suggestions list is ready with [${it.size}] items") adapter.submitList(it) diff --git a/app/src/main/java/org/linphone/ui/main/viewmodel/AddParticipantsViewModel.kt b/app/src/main/java/org/linphone/ui/main/viewmodel/AddParticipantsViewModel.kt index 83f8a7335..b5e8c1e6d 100644 --- a/app/src/main/java/org/linphone/ui/main/viewmodel/AddParticipantsViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/viewmodel/AddParticipantsViewModel.kt @@ -23,6 +23,7 @@ import androidx.annotation.UiThread import androidx.lifecycle.MutableLiveData import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.R +import org.linphone.core.Address import org.linphone.core.tools.Log import org.linphone.ui.main.model.SelectedAddressModel import org.linphone.utils.AppUtils @@ -45,6 +46,7 @@ class AddParticipantsViewModel @UiThread constructor() : AddressSelectionViewMod coreContext.postOnCoreThread { core -> Log.i("$TAG Adding [${participants.size}] pre-selected participants") val list = arrayListOf() + val addresses = arrayListOf
() for (uri in participants) { val address = core.interpretUrl(uri, false) @@ -52,6 +54,7 @@ class AddParticipantsViewModel @UiThread constructor() : AddressSelectionViewMod Log.e("$TAG Failed to parse participant URI [$uri] as address!") continue } + addresses.add(address) val avatarModel = coreContext.contactsManager.getContactAvatarModelForAddress( address @@ -70,6 +73,7 @@ class AddParticipantsViewModel @UiThread constructor() : AddressSelectionViewMod ) ) selection.postValue(list) + updateSelectedParticipants(addresses) } } diff --git a/app/src/main/java/org/linphone/ui/main/viewmodel/AddressSelectionViewModel.kt b/app/src/main/java/org/linphone/ui/main/viewmodel/AddressSelectionViewModel.kt index 2cdc8fc46..89918cf5b 100644 --- a/app/src/main/java/org/linphone/ui/main/viewmodel/AddressSelectionViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/viewmodel/AddressSelectionViewModel.kt @@ -28,6 +28,7 @@ import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.R import org.linphone.contacts.ContactsManager +import org.linphone.core.Address import org.linphone.core.ChatRoom import org.linphone.core.Friend import org.linphone.core.MagicSearch @@ -135,6 +136,16 @@ abstract class AddressSelectionViewModel @UiThread constructor() : DefaultAccoun ) } + @WorkerThread + fun updateSelectedParticipants(selectedAddresses: List
) { + for (address in selectedAddresses) { + val found = modelsList.value.orEmpty().find { + it.address.weakEqual(address) + } + found?.selected?.postValue(true) + } + } + @WorkerThread fun addAddressModelToSelection(model: SelectedAddressModel) { val actual = selection.value.orEmpty()