From df09bcad769ea6b3012fe03275613fa2b35832a3 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Wed, 1 Oct 2025 11:41:40 +0200 Subject: [PATCH] Hide SIP address field from contact editor when hide SIP addresses flag is set, and fixed issue where dialog with only 1 item would be displayed --- .../org/linphone/contacts/ContactsManager.kt | 25 ++++++++++--------- .../ui/call/fragment/ActiveCallFragment.kt | 9 ------- .../ui/call/viewmodel/CurrentCallViewModel.kt | 12 ++------- .../fragment/StartConversationFragment.kt | 10 -------- .../viewmodel/StartConversationViewModel.kt | 20 +++------------ .../viewmodel/ContactNewOrEditViewModel.kt | 6 +++++ .../contacts/viewmodel/ContactViewModel.kt | 12 ++------- .../history/viewmodel/HistoryViewModel.kt | 12 ++------- .../java/org/linphone/utils/LinphoneUtils.kt | 2 +- .../contact_new_or_edit_fragment.xml | 2 ++ .../layout/contact_new_or_edit_fragment.xml | 2 ++ 11 files changed, 34 insertions(+), 78 deletions(-) diff --git a/app/src/main/java/org/linphone/contacts/ContactsManager.kt b/app/src/main/java/org/linphone/contacts/ContactsManager.kt index efae440f3..46f360b9c 100644 --- a/app/src/main/java/org/linphone/contacts/ContactsManager.kt +++ b/app/src/main/java/org/linphone/contacts/ContactsManager.kt @@ -789,6 +789,7 @@ fun Friend.getPerson(): Person { @WorkerThread fun Friend.getListOfSipAddresses(): ArrayList
{ val addressesList = arrayListOf
() + if (corePreferences.hideSipAddresses) return addressesList for (address in addresses) { if (addressesList.find { it.weakEqual(address) } == null) { @@ -803,19 +804,19 @@ fun Friend.getListOfSipAddresses(): ArrayList
{ fun Friend.getListOfSipAddressesAndPhoneNumbers(listener: ContactNumberOrAddressClickListener): ArrayList { val addressesAndNumbers = arrayListOf() - if (!corePreferences.hideSipAddresses) { - for (address in getListOfSipAddresses()) { - val data = ContactNumberOrAddressModel( - this, - address, - address.asStringUriOnly(), - true, // SIP addresses are always enabled - listener, - true - ) - addressesAndNumbers.add(data) - } + // Will return an empty list if corePreferences.hideSipAddresses == true + for (address in getListOfSipAddresses()) { + val data = ContactNumberOrAddressModel( + this, + address, + address.asStringUriOnly(), + true, // SIP addresses are always enabled + listener, + true + ) + addressesAndNumbers.add(data) } + if (corePreferences.hidePhoneNumbers) { return addressesAndNumbers } diff --git a/app/src/main/java/org/linphone/ui/call/fragment/ActiveCallFragment.kt b/app/src/main/java/org/linphone/ui/call/fragment/ActiveCallFragment.kt index 0d1cac9fc..ead2822ca 100644 --- a/app/src/main/java/org/linphone/ui/call/fragment/ActiveCallFragment.kt +++ b/app/src/main/java/org/linphone/ui/call/fragment/ActiveCallFragment.kt @@ -361,15 +361,6 @@ class ActiveCallFragment : GenericCallFragment() { } } - callViewModel.chatRoomCreationErrorEvent.observe(viewLifecycleOwner) { - it.consume { error -> - (requireActivity() as GenericActivity).showRedToast( - getString(error), - R.drawable.warning_circle - ) - } - } - callViewModel.goToConversationEvent.observe(viewLifecycleOwner) { it.consume { conversationId -> if (findNavController().currentDestination?.id == R.id.activeCallFragment) { diff --git a/app/src/main/java/org/linphone/ui/call/viewmodel/CurrentCallViewModel.kt b/app/src/main/java/org/linphone/ui/call/viewmodel/CurrentCallViewModel.kt index 169c1a66b..7ad686537 100644 --- a/app/src/main/java/org/linphone/ui/call/viewmodel/CurrentCallViewModel.kt +++ b/app/src/main/java/org/linphone/ui/call/viewmodel/CurrentCallViewModel.kt @@ -220,10 +220,6 @@ class CurrentCallViewModel MutableLiveData>() } - val chatRoomCreationErrorEvent: MutableLiveData> by lazy { - MutableLiveData>() - } - // Conference val conferenceModel = ConferenceViewModel() @@ -429,9 +425,7 @@ class CurrentCallViewModel Log.e("$TAG Conversation [$id] creation has failed!") chatRoom.removeListener(this) operationInProgress.postValue(false) - chatRoomCreationErrorEvent.postValue( - Event(R.string.conversation_failed_to_create_toast) - ) + showRedToast(R.string.conversation_failed_to_create_toast, R.drawable.warning_circle) } } } @@ -1434,9 +1428,7 @@ class CurrentCallViewModel "$TAG Failed to create 1-1 conversation with [${remoteAddress.asStringUriOnly()}]!" ) operationInProgress.postValue(false) - chatRoomCreationErrorEvent.postValue( - Event(R.string.conversation_failed_to_create_toast) - ) + showRedToast(R.string.conversation_failed_to_create_toast, R.drawable.warning_circle) } } diff --git a/app/src/main/java/org/linphone/ui/main/chat/fragment/StartConversationFragment.kt b/app/src/main/java/org/linphone/ui/main/chat/fragment/StartConversationFragment.kt index 807ea9fe3..84faf4247 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/fragment/StartConversationFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/fragment/StartConversationFragment.kt @@ -99,16 +99,6 @@ class StartConversationFragment : GenericAddressPickerFragment() { } } - viewModel.chatRoomCreationErrorEvent.observe(viewLifecycleOwner) { - it.consume { error -> - Log.i("$TAG Conversation creation error, showing red toast") - (requireActivity() as GenericActivity).showRedToast( - getString(error), - R.drawable.warning_circle - ) - } - } - viewModel.defaultAccountChangedEvent.observe(viewLifecycleOwner) { it.consume { viewModel.updateGroupChatButtonVisibility() diff --git a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/StartConversationViewModel.kt b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/StartConversationViewModel.kt index 98e0a6920..2a428d532 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/StartConversationViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/StartConversationViewModel.kt @@ -52,10 +52,6 @@ class StartConversationViewModel val operationInProgress = MutableLiveData() - val chatRoomCreationErrorEvent: MutableLiveData> by lazy { - MutableLiveData>() - } - val chatRoomCreatedEvent: MutableLiveData> by lazy { MutableLiveData>() } @@ -78,9 +74,7 @@ class StartConversationViewModel Log.e("$TAG Conversation [$id] creation has failed!") chatRoom.removeListener(this) operationInProgress.postValue(false) - chatRoomCreationErrorEvent.postValue( - Event(R.string.conversation_failed_to_create_toast) - ) + showRedToast(R.string.conversation_failed_to_create_toast, R.drawable.warning_circle) } } } @@ -159,9 +153,7 @@ class StartConversationViewModel } else { Log.e("$TAG Failed to create group conversation [$groupChatRoomSubject]!") operationInProgress.postValue(false) - chatRoomCreationErrorEvent.postValue( - Event(R.string.conversation_failed_to_create_toast) - ) + showRedToast(R.string.conversation_failed_to_create_toast, R.drawable.warning_circle) } } } @@ -212,9 +204,7 @@ class StartConversationViewModel "$TAG Account is in secure mode, can't chat with SIP address of different domain [${remote.asStringUriOnly()}]" ) operationInProgress.postValue(false) - chatRoomCreationErrorEvent.postValue( - Event(R.string.conversation_invalid_participant_due_to_security_mode_toast) - ) + showRedToast(R.string.conversation_invalid_participant_due_to_security_mode_toast, R.drawable.warning_circle) return } @@ -247,9 +237,7 @@ class StartConversationViewModel } else { Log.e("$TAG Failed to create 1-1 conversation with [${remote.asStringUriOnly()}]!") operationInProgress.postValue(false) - chatRoomCreationErrorEvent.postValue( - Event(R.string.conversation_failed_to_create_toast) - ) + showRedToast(R.string.conversation_failed_to_create_toast, R.drawable.warning_circle) } } else { Log.w( 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 da7c88ee0..02bdf318a 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 @@ -66,6 +66,8 @@ class ContactNewOrEditViewModel val sipAddresses = ArrayList() + val hideSipAddresses = MutableLiveData() + val phoneNumbers = ArrayList() val company = MutableLiveData() @@ -82,6 +84,10 @@ class ContactNewOrEditViewModel val removeNewNumberOrAddressFieldEvent = MutableLiveData>() + init { + hideSipAddresses.postValue(corePreferences.hideSipAddresses) + } + @UiThread fun findFriendByRefKey(refKey: String?) { reset() diff --git a/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactViewModel.kt b/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactViewModel.kt index e90988a89..ac2ea4254 100644 --- a/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactViewModel.kt @@ -99,10 +99,6 @@ class ContactViewModel val operationInProgress = MutableLiveData() - val chatRoomCreationErrorEvent: MutableLiveData> by lazy { - MutableLiveData>() - } - val showLongPressMenuForNumberOrAddressEvent: MutableLiveData> by lazy { MutableLiveData>() } @@ -214,9 +210,7 @@ class ContactViewModel Log.e("$TAG Conversation [$id] creation has failed!") chatRoom.removeListener(this) operationInProgress.postValue(false) - chatRoomCreationErrorEvent.postValue( - Event(R.string.conversation_failed_to_create_toast) - ) + showRedToast(R.string.conversation_failed_to_create_toast, R.drawable.warning_circle) } } } @@ -579,9 +573,7 @@ class ContactViewModel "$TAG Failed to create 1-1 conversation with [${remote.asStringUriOnly()}]!" ) operationInProgress.postValue(false) - chatRoomCreationErrorEvent.postValue( - Event(R.string.conversation_failed_to_create_toast) - ) + showRedToast(R.string.conversation_failed_to_create_toast, R.drawable.warning_circle) } } } diff --git a/app/src/main/java/org/linphone/ui/main/history/viewmodel/HistoryViewModel.kt b/app/src/main/java/org/linphone/ui/main/history/viewmodel/HistoryViewModel.kt index 5cc06ba3d..2da405721 100644 --- a/app/src/main/java/org/linphone/ui/main/history/viewmodel/HistoryViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/history/viewmodel/HistoryViewModel.kt @@ -67,10 +67,6 @@ class HistoryViewModel val callLogFoundEvent = MutableLiveData>() - val chatRoomCreationErrorEvent: MutableLiveData> by lazy { - MutableLiveData>() - } - val goToMeetingConversationEvent: MutableLiveData> by lazy { MutableLiveData>() } @@ -125,9 +121,7 @@ class HistoryViewModel Log.e("$TAG Conversation [$id] creation has failed!") chatRoom.removeListener(this) operationInProgress.postValue(false) - chatRoomCreationErrorEvent.postValue( - Event(R.string.conversation_failed_to_create_toast) - ) + showRedToast(R.string.conversation_failed_to_create_toast, R.drawable.warning_circle) } } } @@ -307,9 +301,7 @@ class HistoryViewModel "$TAG Failed to create 1-1 conversation with [${remote.asStringUriOnly()}]!" ) operationInProgress.postValue(false) - chatRoomCreationErrorEvent.postValue( - Event(R.string.conversation_failed_to_create_toast) - ) + showRedToast(R.string.conversation_failed_to_create_toast, R.drawable.warning_circle) } } } diff --git a/app/src/main/java/org/linphone/utils/LinphoneUtils.kt b/app/src/main/java/org/linphone/utils/LinphoneUtils.kt index 63907f3dd..511df23d7 100644 --- a/app/src/main/java/org/linphone/utils/LinphoneUtils.kt +++ b/app/src/main/java/org/linphone/utils/LinphoneUtils.kt @@ -142,7 +142,7 @@ class LinphoneUtils { } val defaultDomain = corePreferences.defaultDomain - val currentDomain = friend.core.defaultAccount?.params?.identityAddress?.domain + val currentDomain = getDefaultAccount()?.params?.identityAddress?.domain if (defaultDomain != currentDomain) return null var defaultDomainAddressesCount = 0 diff --git a/app/src/main/res/layout-land/contact_new_or_edit_fragment.xml b/app/src/main/res/layout-land/contact_new_or_edit_fragment.xml index 9fe2cc458..d86f80682 100644 --- a/app/src/main/res/layout-land/contact_new_or_edit_fragment.xml +++ b/app/src/main/res/layout-land/contact_new_or_edit_fragment.xml @@ -316,6 +316,7 @@ android:layout_height="wrap_content" android:layout_marginEnd="16dp" android:text="@string/sip_address" + android:visibility="@{viewModel.hideSipAddresses ? View.GONE : View.VISIBLE}" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="@id/sip_addresses"/> @@ -326,6 +327,7 @@ android:layout_marginStart="16dp" android:layout_marginEnd="16dp" android:orientation="vertical" + android:visibility="@{viewModel.hideSipAddresses ? View.GONE : View.VISIBLE}" app:layout_constraintWidth_max="@dimen/text_input_max_width" app:layout_constraintTop_toBottomOf="@id/sip_addresses_label" app:layout_constraintStart_toStartOf="parent" diff --git a/app/src/main/res/layout/contact_new_or_edit_fragment.xml b/app/src/main/res/layout/contact_new_or_edit_fragment.xml index b9526e0e1..d0580d955 100644 --- a/app/src/main/res/layout/contact_new_or_edit_fragment.xml +++ b/app/src/main/res/layout/contact_new_or_edit_fragment.xml @@ -224,6 +224,7 @@ android:layout_marginTop="30dp" android:layout_marginEnd="16dp" android:text="@string/sip_address" + android:visibility="@{viewModel.hideSipAddresses ? View.GONE : View.VISIBLE}" app:layout_constraintTop_toBottomOf="@id/last_name" app:layout_constraintStart_toStartOf="@id/sip_addresses"/> @@ -234,6 +235,7 @@ android:layout_marginStart="16dp" android:layout_marginEnd="16dp" android:orientation="vertical" + android:visibility="@{viewModel.hideSipAddresses ? View.GONE : View.VISIBLE}" app:layout_constraintWidth_max="@dimen/text_input_max_width" app:layout_constraintTop_toBottomOf="@id/sip_addresses_label" app:layout_constraintStart_toStartOf="parent"