From 135ca527eef9854698b65f94e83b4423342e4522 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 5 Nov 2024 17:01:28 +0100 Subject: [PATCH] Clicking on already selected contact will remove it from the selection --- .../fragment/GenericAddressPickerFragment.kt | 17 +++++++++++++++++ .../main/viewmodel/AddressSelectionViewModel.kt | 4 ++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/linphone/ui/main/fragment/GenericAddressPickerFragment.kt b/app/src/main/java/org/linphone/ui/main/fragment/GenericAddressPickerFragment.kt index 1ba8edf89..65bebfd45 100644 --- a/app/src/main/java/org/linphone/ui/main/fragment/GenericAddressPickerFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/fragment/GenericAddressPickerFragment.kt @@ -147,6 +147,23 @@ abstract class GenericAddressPickerFragment : GenericMainFragment() { } private fun handleClickOnContactModel(model: ConversationContactOrSuggestionModel) { + if (model.selected.value == true) { + Log.i( + "$TAG User clicked on already selected item [${model.name}], removing it from selection" + ) + val found = viewModel.selection.value.orEmpty().find { + it.address.weakEqual(model.address) || it.avatarModel?.friend == model.friend + } + if (found != null) { + coreContext.postOnCoreThread { + viewModel.removeAddressModelFromSelection(found) + } + return + } else { + Log.e("$TAG Failed to find already selected entry matching the one clicked") + } + } + coreContext.postOnCoreThread { core -> val friend = model.friend if (friend == null) { 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 ed64fc883..13aab7f24 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 @@ -159,7 +159,7 @@ abstract class AddressSelectionViewModel @UiThread constructor() : DefaultAccoun list.addAll(actual) val found = modelsList.value.orEmpty().find { - it.address.weakEqual(model.address) + it.address.weakEqual(model.address) || it.friend == model.avatarModel?.friend } found?.selected?.postValue(true) @@ -191,7 +191,7 @@ abstract class AddressSelectionViewModel @UiThread constructor() : DefaultAccoun list.remove(model) val found = modelsList.value.orEmpty().find { - it.address.weakEqual(model.address) + it.address.weakEqual(model.address) || it.friend == model.avatarModel?.friend } found?.selected?.postValue(false)