Added go to contact / add to contacts option in every 1-1 chat room menu
This commit is contained in:
parent
61134352e9
commit
4883bc8293
8 changed files with 94 additions and 16 deletions
|
@ -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(
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
BIN
app/src/main/res/drawable-xhdpi/menu_contact.png
Normal file
BIN
app/src/main/res/drawable-xhdpi/menu_contact.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 11 KiB |
|
@ -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"
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
||||
|
|
Loading…
Reference in a new issue