diff --git a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationInfoFragment.kt b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationInfoFragment.kt index e8509c7f1..1e3013d5e 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationInfoFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationInfoFragment.kt @@ -19,6 +19,9 @@ */ package org.linphone.ui.main.chat.fragment +import android.content.ClipData +import android.content.ClipboardManager +import android.content.Context import android.os.Bundle import android.view.Gravity import android.view.LayoutInflater @@ -309,6 +312,14 @@ class ConversationInfoFragment : SlidingPaneChildFragment() { binding.setDeleteHistoryClickListener { showDeleteHistoryConfirmationDialog() } + + binding.setCopySipUriClickListener { + copyAddressToClipboard(viewModel.sipUri.value.orEmpty()) + } + + binding.setCopyPeerSipUriClickListener { + copyAddressToClipboard(viewModel.peerSipUri.value.orEmpty()) + } } private fun showParticipantAdminPopupMenu(view: View, participantModel: ParticipantModel) { @@ -416,4 +427,14 @@ class ConversationInfoFragment : SlidingPaneChildFragment() { dialog.show() } + + private fun copyAddressToClipboard(value: String) { + val clipboard = requireContext().getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager + clipboard.setPrimaryClip(ClipData.newPlainText("SIP address", value)) + val message = getString(R.string.sip_address_copied_to_clipboard_toast) + (requireActivity() as GenericActivity).showGreenToast( + message, + R.drawable.check + ) + } } diff --git a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationInfoViewModel.kt b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationInfoViewModel.kt index df339cbce..c2bfe0ba9 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationInfoViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationInfoViewModel.kt @@ -61,6 +61,10 @@ class ConversationInfoViewModel @UiThread constructor() : AbstractConversationVi val sipUri = MutableLiveData() + val peerSipUri = MutableLiveData() + + val showPeerSipUri = MutableLiveData() + val isReadOnly = MutableLiveData() val isMyselfAdmin = MutableLiveData() @@ -242,11 +246,12 @@ class ConversationInfoViewModel @UiThread constructor() : AbstractConversationVi } init { + expandParticipants.value = true + showPeerSipUri.value = false + coreContext.postOnCoreThread { coreContext.contactsManager.addListener(contactsListener) } - - expandParticipants.value = true } override fun onCleared() { @@ -491,6 +496,12 @@ class ConversationInfoViewModel @UiThread constructor() : AbstractConversationVi } } + @UiThread + fun showDebugInfo(): Boolean { + showPeerSipUri.value = true + return true + } + @UiThread fun updateSubject(newSubject: String) { coreContext.postOnCoreThread { @@ -531,6 +542,7 @@ class ConversationInfoViewModel @UiThread constructor() : AbstractConversationVi } subject.postValue(chatRoom.subject) + peerSipUri.postValue(chatRoom.peerAddress.asStringUriOnly()) val firstParticipant = chatRoom.participants.firstOrNull() if (firstParticipant != null) { diff --git a/app/src/main/java/org/linphone/ui/main/settings/fragment/AccountProfileFragment.kt b/app/src/main/java/org/linphone/ui/main/settings/fragment/AccountProfileFragment.kt index 4ab1492da..1d6378ad8 100644 --- a/app/src/main/java/org/linphone/ui/main/settings/fragment/AccountProfileFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/settings/fragment/AccountProfileFragment.kt @@ -138,6 +138,10 @@ class AccountProfileFragment : GenericMainFragment() { copyAddressToClipboard(viewModel.sipAddress.value.orEmpty()) } + binding.setCopyDeviceIdClickListener { + copyAddressToClipboard(viewModel.deviceId.value.orEmpty()) + } + binding.setPrefixTooltipClickListener { showHelpPopup() } diff --git a/app/src/main/java/org/linphone/ui/main/settings/viewmodel/AccountProfileViewModel.kt b/app/src/main/java/org/linphone/ui/main/settings/viewmodel/AccountProfileViewModel.kt index 200638092..8bf428ad5 100644 --- a/app/src/main/java/org/linphone/ui/main/settings/viewmodel/AccountProfileViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/settings/viewmodel/AccountProfileViewModel.kt @@ -74,6 +74,10 @@ class AccountProfileViewModel @UiThread constructor() : GenericViewModel() { val hideAccountSettings = MutableLiveData() + val deviceId = MutableLiveData() + + val showDeviceId = MutableLiveData() + val accountRemovedEvent: MutableLiveData> by lazy { MutableLiveData>() } @@ -146,8 +150,9 @@ class AccountProfileViewModel @UiThread constructor() : GenericViewModel() { init { expandDetails.value = true expandDevices.value = false + showDeviceId.value = false - coreContext.postOnCoreThread { core -> + coreContext.postOnCoreThread { hideAccountSettings.postValue(corePreferences.hideAccountSettings) dialPlansLabelList.add("") // To allow removing selected dial plan @@ -230,6 +235,7 @@ class AccountProfileViewModel @UiThread constructor() : GenericViewModel() { selectedDialPlan.postValue(index) } } + deviceId.postValue(account.contactAddress?.getUriParam("gr")) accountFoundEvent.postValue(Event(true)) } else { @@ -366,4 +372,10 @@ class AccountProfileViewModel @UiThread constructor() : GenericViewModel() { ) } } + + @UiThread + fun showDebugInfo(): Boolean { + showDeviceId.value = true + return true + } } diff --git a/app/src/main/res/layout/account_profile_fragment.xml b/app/src/main/res/layout/account_profile_fragment.xml index f220fed9a..1353d4c65 100644 --- a/app/src/main/res/layout/account_profile_fragment.xml +++ b/app/src/main/res/layout/account_profile_fragment.xml @@ -17,6 +17,9 @@ + @@ -59,15 +62,23 @@ android:layout_width="0dp" android:layout_height="@dimen/top_bar_height" android:layout_marginStart="10dp" - android:layout_marginEnd="10dp" android:gravity="center_vertical" android:text="@string/manage_account_title" android:textColor="?attr/color_main1_500" android:textSize="16sp" - app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintEnd_toStartOf="@id/show_menu" app:layout_constraintStart_toEndOf="@id/back" app:layout_constraintTop_toTopOf="parent"/> + + + + + + + app:layout_constraintTop_toBottomOf="@id/device_id"/> + + @@ -57,12 +63,19 @@ android:visibility="invisible" android:layout_width="0dp" android:layout_height="@dimen/top_bar_height" - android:layout_marginStart="10dp" - android:layout_marginEnd="10dp" - app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintEnd_toStartOf="@id/show_menu" app:layout_constraintStart_toEndOf="@id/back" app:layout_constraintTop_toTopOf="parent"/> + + + + + app:layout_constraintTop_toBottomOf="@id/peer_address" /> Adresse SIP + ID du téléphone utilisateur@domaine Nom d\'affichage Domaine diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 061e8f448..73a4a342f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -43,6 +43,7 @@ SIP address + Device ID username@domain Display name Domain