Fixed navigating to contact without a native ID
This commit is contained in:
parent
9f5951280a
commit
536bfd0020
5 changed files with 32 additions and 19 deletions
|
@ -314,11 +314,16 @@ internal fun DetailChatRoomFragment.navigateToContacts(sipUriToAdd: String) {
|
||||||
findMasterNavController().navigate(Uri.parse(deepLink))
|
findMasterNavController().navigate(Uri.parse(deepLink))
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun DetailChatRoomFragment.navigateToContact(id: String) {
|
internal fun DetailChatRoomFragment.navigateToNativeContact(id: String) {
|
||||||
val deepLink = "linphone-android://contact/view/$id"
|
val deepLink = "linphone-android://contact/view/$id"
|
||||||
findMasterNavController().navigate(Uri.parse(deepLink))
|
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?) {
|
internal fun DetailChatRoomFragment.navigateToImdn(args: Bundle?) {
|
||||||
if (findNavController().currentDestination?.id == R.id.detailChatRoomFragment) {
|
if (findNavController().currentDestination?.id == R.id.detailChatRoomFragment) {
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
|
@ -626,11 +631,16 @@ internal fun DetailCallLogFragment.navigateToContacts(sipUriToAdd: String) {
|
||||||
findMasterNavController().navigate(Uri.parse(deepLink))
|
findMasterNavController().navigate(Uri.parse(deepLink))
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun DetailCallLogFragment.navigateToContact(id: String) {
|
internal fun DetailCallLogFragment.navigateToNativeContact(id: String) {
|
||||||
val deepLink = "linphone-android://contact/view/$id"
|
val deepLink = "linphone-android://contact/view/$id"
|
||||||
findMasterNavController().navigate(Uri.parse(deepLink))
|
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?) {
|
internal fun DetailCallLogFragment.navigateToChatRoom(args: Bundle?) {
|
||||||
if (findNavController().currentDestination?.id == R.id.detailCallLogFragment) {
|
if (findNavController().currentDestination?.id == R.id.detailCallLogFragment) {
|
||||||
findMasterNavController().navigate(
|
findMasterNavController().navigate(
|
||||||
|
|
|
@ -1061,15 +1061,15 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
|
||||||
popupWindow.dismiss()
|
popupWindow.dismiss()
|
||||||
val contactId = viewModel.contact.value?.refKey
|
val contactId = viewModel.contact.value?.refKey
|
||||||
if (contactId != null) {
|
if (contactId != null) {
|
||||||
Log.i("[Chat Room] Displaying contact $contactId")
|
Log.i("[Chat Room] Displaying native contact [$contactId]")
|
||||||
navigateToContact(contactId)
|
navigateToNativeContact(contactId)
|
||||||
} else {
|
} else {
|
||||||
val copy = viewModel.getRemoteAddress()?.clone()
|
val copy = viewModel.getRemoteAddress()?.clone()
|
||||||
if (copy != null) {
|
if (copy != null) {
|
||||||
copy.clean()
|
copy.clean()
|
||||||
val address = copy.asStringUriOnly()
|
val address = copy.asStringUriOnly()
|
||||||
Log.i("[Chat Room] Displaying friend with address $address")
|
Log.i("[Chat Room] Displaying friend with address [$address]")
|
||||||
navigateToContact(address)
|
navigateToFriend(address)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -237,8 +237,10 @@ class MasterContactsFragment : MasterFragment<ContactMasterFragmentBinding, Cont
|
||||||
val contact = coreContext.contactsManager.findContactById(id)
|
val contact = coreContext.contactsManager.findContactById(id)
|
||||||
if (contact != null) {
|
if (contact != null) {
|
||||||
contactIdToDisplay = 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)
|
adapter.selectedContactEvent.value = Event(contact)
|
||||||
|
} else {
|
||||||
|
Log.w("[Contacts] No contact found matching id [$id] after callback")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
adapter.submitList(it)
|
adapter.submitList(it)
|
||||||
|
@ -285,28 +287,30 @@ class MasterContactsFragment : MasterFragment<ContactMasterFragmentBinding, Cont
|
||||||
arguments?.clear()
|
arguments?.clear()
|
||||||
|
|
||||||
if (id != null) {
|
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)
|
val contact = coreContext.contactsManager.findContactById(id)
|
||||||
if (contact != null) {
|
if (contact != null) {
|
||||||
Log.i("[Contacts] Found matching contact $contact")
|
Log.i("[Contacts] Found matching contact [${contact.name}]")
|
||||||
adapter.selectedContactEvent.value = Event(contact)
|
adapter.selectedContactEvent.value = Event(contact)
|
||||||
} else {
|
} else {
|
||||||
Log.w("[Contacts] Matching contact not found yet, waiting for contacts updated callback")
|
Log.w("[Contacts] Matching contact not found yet, waiting for contacts updated callback")
|
||||||
contactIdToDisplay = id
|
contactIdToDisplay = id
|
||||||
}
|
}
|
||||||
} else if (sipUri != null) {
|
} else if (sipUri != null) {
|
||||||
Log.i("[Contacts] Found sipUri parameter in arguments: $sipUri")
|
Log.i("[Contacts] Found sipUri parameter in arguments [$sipUri]")
|
||||||
sipUriToAdd = sipUri
|
sipUriToAdd = sipUri
|
||||||
(activity as MainActivity).showSnackBar(R.string.contact_choose_existing_or_new_to_add_number)
|
(activity as MainActivity).showSnackBar(R.string.contact_choose_existing_or_new_to_add_number)
|
||||||
editOnClick = true
|
editOnClick = true
|
||||||
} else if (addressString != null) {
|
} else if (addressString != null) {
|
||||||
val address = Factory.instance().createAddress(addressString)
|
val address = Factory.instance().createAddress(addressString)
|
||||||
if (address != null) {
|
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)
|
val contact = coreContext.contactsManager.findContactByAddress(address)
|
||||||
if (contact != null) {
|
if (contact != null) {
|
||||||
Log.i("[Contacts] Found matching contact $contact")
|
Log.i("[Contacts] Found matching contact $contact")
|
||||||
adapter.selectedContactEvent.value = Event(contact)
|
adapter.selectedContactEvent.value = Event(contact)
|
||||||
|
} else {
|
||||||
|
Log.w("[Contacts] No matching contact found for SIP address [${address.asStringUriOnly()}]")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,6 @@ import org.linphone.R
|
||||||
import org.linphone.activities.*
|
import org.linphone.activities.*
|
||||||
import org.linphone.activities.main.*
|
import org.linphone.activities.main.*
|
||||||
import org.linphone.activities.main.history.viewmodels.CallLogViewModel
|
import org.linphone.activities.main.history.viewmodels.CallLogViewModel
|
||||||
import org.linphone.activities.navigateToContact
|
|
||||||
import org.linphone.activities.navigateToContacts
|
import org.linphone.activities.navigateToContacts
|
||||||
import org.linphone.core.tools.Log
|
import org.linphone.core.tools.Log
|
||||||
import org.linphone.databinding.HistoryDetailFragmentBinding
|
import org.linphone.databinding.HistoryDetailFragmentBinding
|
||||||
|
@ -62,7 +61,7 @@ class DetailCallLogFragment : GenericFragment<HistoryDetailFragmentBinding>() {
|
||||||
val copy = viewModel.callLog.remoteAddress.clone()
|
val copy = viewModel.callLog.remoteAddress.clone()
|
||||||
copy.clean()
|
copy.clean()
|
||||||
val address = copy.asStringUriOnly()
|
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)
|
sharedViewModel.updateContactsAnimationsBasedOnDestination.value = Event(R.id.masterCallLogsFragment)
|
||||||
navigateToContacts(address)
|
navigateToContacts(address)
|
||||||
}
|
}
|
||||||
|
@ -71,14 +70,14 @@ class DetailCallLogFragment : GenericFragment<HistoryDetailFragmentBinding>() {
|
||||||
sharedViewModel.updateContactsAnimationsBasedOnDestination.value = Event(R.id.masterCallLogsFragment)
|
sharedViewModel.updateContactsAnimationsBasedOnDestination.value = Event(R.id.masterCallLogsFragment)
|
||||||
val contactId = viewModel.contact.value?.refKey
|
val contactId = viewModel.contact.value?.refKey
|
||||||
if (contactId != null) {
|
if (contactId != null) {
|
||||||
Log.i("[History] Displaying contact $contactId")
|
Log.i("[History] Displaying native contact [$contactId]")
|
||||||
navigateToContact(contactId)
|
navigateToNativeContact(contactId)
|
||||||
} else {
|
} else {
|
||||||
val copy = viewModel.callLog.remoteAddress.clone()
|
val copy = viewModel.callLog.remoteAddress.clone()
|
||||||
copy.clean()
|
copy.clean()
|
||||||
val address = copy.asStringUriOnly()
|
val address = copy.asStringUriOnly()
|
||||||
Log.i("[History] Displaying friend with address $address")
|
Log.i("[History] Displaying friend with address [$address]")
|
||||||
navigateToContact(address)
|
navigateToFriend(address)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,7 +90,7 @@ class DetailCallLogFragment : GenericFragment<HistoryDetailFragmentBinding>() {
|
||||||
address.clean()
|
address.clean()
|
||||||
|
|
||||||
if (coreContext.core.callsNb > 0) {
|
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 =
|
sharedViewModel.updateDialerAnimationsBasedOnDestination.value =
|
||||||
Event(R.id.masterCallLogsFragment)
|
Event(R.id.masterCallLogsFragment)
|
||||||
|
|
||||||
|
|
|
@ -59,7 +59,7 @@
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:onClick="@{contactClickListener}"
|
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:contentDescription="@string/content_description_go_to_contact"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
|
Loading…
Reference in a new issue