Fixed navigating to contact without a native ID

This commit is contained in:
Sylvain Berfini 2023-02-24 11:26:31 +01:00
parent 9f5951280a
commit 536bfd0020
5 changed files with 32 additions and 19 deletions

View file

@ -314,11 +314,16 @@ internal fun DetailChatRoomFragment.navigateToContacts(sipUriToAdd: String) {
findMasterNavController().navigate(Uri.parse(deepLink))
}
internal fun DetailChatRoomFragment.navigateToContact(id: String) {
internal fun DetailChatRoomFragment.navigateToNativeContact(id: String) {
val deepLink = "linphone-android://contact/view/$id"
findMasterNavController().navigate(Uri.parse(deepLink))
}
internal fun DetailChatRoomFragment.navigateToFriend(address: String) {
val deepLink = "linphone-android://contact/view-friend/$address"
findMasterNavController().navigate(Uri.parse(deepLink))
}
internal fun DetailChatRoomFragment.navigateToImdn(args: Bundle?) {
if (findNavController().currentDestination?.id == R.id.detailChatRoomFragment) {
findNavController().navigate(
@ -626,11 +631,16 @@ internal fun DetailCallLogFragment.navigateToContacts(sipUriToAdd: String) {
findMasterNavController().navigate(Uri.parse(deepLink))
}
internal fun DetailCallLogFragment.navigateToContact(id: String) {
internal fun DetailCallLogFragment.navigateToNativeContact(id: String) {
val deepLink = "linphone-android://contact/view/$id"
findMasterNavController().navigate(Uri.parse(deepLink))
}
internal fun DetailCallLogFragment.navigateToFriend(address: String) {
val deepLink = "linphone-android://contact/view-friend/$address"
findMasterNavController().navigate(Uri.parse(deepLink))
}
internal fun DetailCallLogFragment.navigateToChatRoom(args: Bundle?) {
if (findNavController().currentDestination?.id == R.id.detailCallLogFragment) {
findMasterNavController().navigate(

View file

@ -1061,15 +1061,15 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
popupWindow.dismiss()
val contactId = viewModel.contact.value?.refKey
if (contactId != null) {
Log.i("[Chat Room] Displaying contact $contactId")
navigateToContact(contactId)
Log.i("[Chat Room] Displaying native contact [$contactId]")
navigateToNativeContact(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)
Log.i("[Chat Room] Displaying friend with address [$address]")
navigateToFriend(address)
}
}
}

View file

@ -237,8 +237,10 @@ class MasterContactsFragment : MasterFragment<ContactMasterFragmentBinding, Cont
val contact = coreContext.contactsManager.findContactById(id)
if (contact != null) {
contactIdToDisplay = null
Log.i("[Contacts] Found matching contact $contact after callback")
Log.i("[Contacts] Found matching contact [$contact] after callback")
adapter.selectedContactEvent.value = Event(contact)
} else {
Log.w("[Contacts] No contact found matching id [$id] after callback")
}
}
adapter.submitList(it)
@ -285,28 +287,30 @@ class MasterContactsFragment : MasterFragment<ContactMasterFragmentBinding, Cont
arguments?.clear()
if (id != null) {
Log.i("[Contacts] Found contact id parameter in arguments: $id")
Log.i("[Contacts] Found contact id parameter in arguments [$id]")
val contact = coreContext.contactsManager.findContactById(id)
if (contact != null) {
Log.i("[Contacts] Found matching contact $contact")
Log.i("[Contacts] Found matching contact [${contact.name}]")
adapter.selectedContactEvent.value = Event(contact)
} else {
Log.w("[Contacts] Matching contact not found yet, waiting for contacts updated callback")
contactIdToDisplay = id
}
} else if (sipUri != null) {
Log.i("[Contacts] Found sipUri parameter in arguments: $sipUri")
Log.i("[Contacts] Found sipUri parameter in arguments [$sipUri]")
sipUriToAdd = sipUri
(activity as MainActivity).showSnackBar(R.string.contact_choose_existing_or_new_to_add_number)
editOnClick = true
} else if (addressString != null) {
val address = Factory.instance().createAddress(addressString)
if (address != null) {
Log.i("[Contacts] Found friend native pointer parameter in arguments: ${address.asStringUriOnly()}")
Log.i("[Contacts] Found friend SIP address parameter in arguments [${address.asStringUriOnly()}]")
val contact = coreContext.contactsManager.findContactByAddress(address)
if (contact != null) {
Log.i("[Contacts] Found matching contact $contact")
adapter.selectedContactEvent.value = Event(contact)
} else {
Log.w("[Contacts] No matching contact found for SIP address [${address.asStringUriOnly()}]")
}
}
}

View file

@ -27,7 +27,6 @@ import org.linphone.R
import org.linphone.activities.*
import org.linphone.activities.main.*
import org.linphone.activities.main.history.viewmodels.CallLogViewModel
import org.linphone.activities.navigateToContact
import org.linphone.activities.navigateToContacts
import org.linphone.core.tools.Log
import org.linphone.databinding.HistoryDetailFragmentBinding
@ -62,7 +61,7 @@ class DetailCallLogFragment : GenericFragment<HistoryDetailFragmentBinding>() {
val copy = viewModel.callLog.remoteAddress.clone()
copy.clean()
val address = copy.asStringUriOnly()
Log.i("[History] Creating contact with SIP URI: $address")
Log.i("[History] Creating contact with SIP URI [$address]")
sharedViewModel.updateContactsAnimationsBasedOnDestination.value = Event(R.id.masterCallLogsFragment)
navigateToContacts(address)
}
@ -71,14 +70,14 @@ class DetailCallLogFragment : GenericFragment<HistoryDetailFragmentBinding>() {
sharedViewModel.updateContactsAnimationsBasedOnDestination.value = Event(R.id.masterCallLogsFragment)
val contactId = viewModel.contact.value?.refKey
if (contactId != null) {
Log.i("[History] Displaying contact $contactId")
navigateToContact(contactId)
Log.i("[History] Displaying native contact [$contactId]")
navigateToNativeContact(contactId)
} else {
val copy = viewModel.callLog.remoteAddress.clone()
copy.clean()
val address = copy.asStringUriOnly()
Log.i("[History] Displaying friend with address $address")
navigateToContact(address)
Log.i("[History] Displaying friend with address [$address]")
navigateToFriend(address)
}
}
@ -91,7 +90,7 @@ class DetailCallLogFragment : GenericFragment<HistoryDetailFragmentBinding>() {
address.clean()
if (coreContext.core.callsNb > 0) {
Log.i("[History] Starting dialer with pre-filled URI ${address.asStringUriOnly()}, is transfer? ${sharedViewModel.pendingCallTransfer}")
Log.i("[History] Starting dialer with pre-filled URI [${address.asStringUriOnly()}], is transfer? ${sharedViewModel.pendingCallTransfer}")
sharedViewModel.updateDialerAnimationsBasedOnDestination.value =
Event(R.id.masterCallLogsFragment)

View file

@ -59,7 +59,7 @@
<ImageView
android:onClick="@{contactClickListener}"
android:visibility="@{viewModel.contact == null || viewModel.contact.refKey == null ? View.GONE : View.VISIBLE}"
android:visibility="@{viewModel.contact == null ? View.GONE : View.VISIBLE}"
android:contentDescription="@string/content_description_go_to_contact"
android:layout_width="0dp"
android:layout_height="match_parent"