Added go to contact / add to contacts option in every 1-1 chat room menu

This commit is contained in:
Sylvain Berfini 2022-05-31 15:41:37 +02:00
parent 61134352e9
commit 4883bc8293
8 changed files with 94 additions and 16 deletions

View file

@ -49,7 +49,6 @@ import org.linphone.activities.main.settings.fragments.*
import org.linphone.activities.main.sidemenu.fragments.SideMenuFragment
import org.linphone.activities.voip.CallActivity
import org.linphone.activities.voip.fragments.*
import org.linphone.core.Address
internal fun Fragment.findMasterNavController(): NavController {
return parentFragment?.parentFragment?.findNavController() ?: findNavController()
@ -317,6 +316,11 @@ internal fun DetailChatRoomFragment.navigateToContacts(sipUriToAdd: String) {
findMasterNavController().navigate(Uri.parse(deepLink))
}
internal fun DetailChatRoomFragment.navigateToContact(id: String) {
val deepLink = "linphone-android://contact/view/$id"
findMasterNavController().navigate(Uri.parse(deepLink))
}
internal fun DetailChatRoomFragment.navigateToImdn(args: Bundle?) {
if (findNavController().currentDestination?.id == R.id.detailChatRoomFragment) {
findNavController().navigate(
@ -644,11 +648,6 @@ internal fun DetailCallLogFragment.navigateToContact(id: String) {
findMasterNavController().navigate(Uri.parse(deepLink))
}
internal fun DetailCallLogFragment.navigateToFriend(friendAddress: Address) {
val deepLink = "linphone-android://contact/new/${friendAddress.asStringUriOnly()}"
findMasterNavController().navigate(Uri.parse(deepLink))
}
internal fun DetailCallLogFragment.navigateToChatRoom(args: Bundle?) {
if (findNavController().currentDestination?.id == R.id.detailCallLogFragment) {
findMasterNavController().navigate(

View file

@ -849,7 +849,7 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
)
val itemSize = AppUtils.getDimension(R.dimen.chat_room_popup_item_height).toInt()
var totalSize = itemSize * 6
var totalSize = itemSize * 7
val notificationsTurnedOff = viewModel.areNotificationsMuted()
if (notificationsTurnedOff) {
@ -860,6 +860,18 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
totalSize -= itemSize
}
if (viewModel.basicChatRoom || viewModel.oneToOneChatRoom) {
if (viewModel.contact.value != null) {
popupView.addToContactsHidden = true
} else {
popupView.goToContactHidden = true
}
} else {
popupView.addToContactsHidden = true
popupView.goToContactHidden = true
totalSize -= itemSize
}
if (viewModel.basicChatRoom) {
popupView.groupInfoHidden = true
totalSize -= itemSize
@ -933,6 +945,32 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
viewModel.muteNotifications(false)
popupWindow.dismiss()
}
popupView.setAddToContactsListener {
popupWindow.dismiss()
val copy = viewModel.getRemoteAddress()?.clone()
if (copy != null) {
copy.clean()
val address = copy.asStringUriOnly()
Log.i("[Chat Room] Creating contact with SIP URI: $address")
navigateToContacts(address)
}
}
popupView.setGoToContactListener {
popupWindow.dismiss()
val contactId = viewModel.contact.value?.refKey
if (contactId != null) {
Log.i("[Chat Room] Displaying contact $contactId")
navigateToContact(contactId)
} else {
val copy = viewModel.getRemoteAddress()?.clone()
if (copy != null) {
copy.clean()
val address = copy.asStringUriOnly()
Log.i("[Chat Room] Displaying friend with address $address")
navigateToContact(address)
}
}
}
popupWindow.showAsDropDown(binding.menu, 0, 0, Gravity.BOTTOM)
}

View file

@ -350,18 +350,24 @@ class ChatRoomViewModel(val chatRoom: ChatRoom) : ViewModel(), ContactDataInterf
lastUpdate.value = TimestampUtils.toString(chatRoom.lastUpdateTime, true)
}
private fun searchMatchingContact() {
val remoteAddress = if (chatRoom.hasCapability(ChatRoomCapabilities.Basic.toInt())) {
fun getRemoteAddress(): Address? {
return if (chatRoom.hasCapability(ChatRoomCapabilities.Basic.toInt())) {
chatRoom.peerAddress
} else {
if (chatRoom.participants.isNotEmpty()) {
chatRoom.participants[0].address
} else {
Log.e("[Chat Room] $chatRoom doesn't have any participant in state ${chatRoom.state}!")
return
null
}
}
contact.value = coreContext.contactsManager.findContactByAddress(remoteAddress)
}
private fun searchMatchingContact() {
val remoteAddress = getRemoteAddress()
if (remoteAddress != null) {
contact.value = coreContext.contactsManager.findContactByAddress(remoteAddress)
}
}
private fun getParticipantsNames() {

View file

@ -31,7 +31,6 @@ import org.linphone.activities.main.history.viewmodels.CallLogViewModel
import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.activities.navigateToContact
import org.linphone.activities.navigateToContacts
import org.linphone.activities.navigateToFriend
import org.linphone.core.tools.Log
import org.linphone.databinding.HistoryDetailFragmentBinding
import org.linphone.utils.Event
@ -72,9 +71,10 @@ class DetailCallLogFragment : GenericFragment<HistoryDetailFragmentBinding>() {
binding.setNewContactClickListener {
val copy = viewModel.callLog.remoteAddress.clone()
copy.clean()
Log.i("[History] Creating contact with SIP URI: ${copy.asStringUriOnly()}")
val address = copy.asStringUriOnly()
Log.i("[History] Creating contact with SIP URI: $address")
sharedViewModel.updateContactsAnimationsBasedOnDestination.value = Event(R.id.masterCallLogsFragment)
navigateToContacts(copy.asStringUriOnly())
navigateToContacts(address)
}
binding.setContactClickListener {
@ -86,8 +86,9 @@ class DetailCallLogFragment : GenericFragment<HistoryDetailFragmentBinding>() {
} else {
val copy = viewModel.callLog.remoteAddress.clone()
copy.clean()
Log.i("[History] Displaying friend with address ${copy.asStringUriOnly()}")
navigateToFriend(copy)
val address = copy.asStringUriOnly()
Log.i("[History] Displaying friend with address $address")
navigateToContact(address)
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View file

@ -37,6 +37,18 @@
<variable
name="unmuteHidden"
type="Boolean" />
<variable
name="addToContactsListener"
type="View.OnClickListener" />
<variable
name="addToContactsHidden"
type="Boolean" />
<variable
name="goToContactListener"
type="View.OnClickListener" />
<variable
name="goToContactHidden"
type="Boolean" />
</data>
<LinearLayout
@ -45,6 +57,26 @@
android:orientation="vertical"
android:background="?attr/backgroundColor">
<TextView
android:layout_width="match_parent"
android:layout_height="@dimen/chat_room_popup_item_height"
android:visibility="@{addToContactsHidden ? View.GONE : View.VISIBLE}"
android:background="@drawable/menu_background"
android:onClick="@{addToContactsListener}"
style="@style/popup_item_font"
android:text="@string/chat_message_context_menu_add_to_contacts"
app:drawableRightCompat="@drawable/menu_add_contact" />
<TextView
android:layout_width="match_parent"
android:layout_height="@dimen/chat_room_popup_item_height"
android:visibility="@{goToContactHidden ? View.GONE : View.VISIBLE}"
android:background="@drawable/menu_background"
android:onClick="@{goToContactListener}"
style="@style/popup_item_font"
android:text="@string/chat_room_context_menu_go_to_contact"
app:drawableRightCompat="@drawable/menu_contact" />
<TextView
android:layout_width="match_parent"
android:layout_height="@dimen/chat_room_popup_item_height"

View file

@ -730,4 +730,5 @@
<string name="chat_message_context_menu_turn_off_notifications">Désactiver les notifications</string>
<string name="chat_message_context_menu_turn_on_notifications">Activer les notifications</string>
<string name="content_description_muted_chat_room">Les notifications sont désactivées pour cette conversation</string>
<string name="chat_room_context_menu_go_to_contact">Voir le contact</string>
</resources>

View file

@ -188,6 +188,7 @@
<string name="chat_room_file_not_found">File not found</string>
<string name="chat_room_context_menu_group_info">Group info</string>
<string name="chat_room_context_menu_participants_devices">Conversation\'s devices</string>
<string name="chat_room_context_menu_go_to_contact">Go to contact</string>
<string name="chat_message_context_menu_ephemeral_messages">Ephemeral messages</string>
<string name="chat_message_context_menu_delete_messages">Delete messages</string>
<string name="chat_message_context_menu_turn_off_notifications">Disable notifications</string>