Fixed navigation issues in MainActivity

This commit is contained in:
Sylvain Berfini 2021-11-15 12:16:49 +01:00
parent 0c4b4d6e3c
commit 610841097c
2 changed files with 36 additions and 16 deletions

View file

@ -47,6 +47,7 @@ import org.linphone.activities.main.settings.fragments.*
import org.linphone.activities.main.sidemenu.fragments.SideMenuFragment import org.linphone.activities.main.sidemenu.fragments.SideMenuFragment
import org.linphone.contact.NativeContact import org.linphone.contact.NativeContact
import org.linphone.core.Address import org.linphone.core.Address
import org.linphone.core.tools.Log
internal fun Fragment.findMasterNavController(): NavController { internal fun Fragment.findMasterNavController(): NavController {
return parentFragment?.parentFragment?.findNavController() ?: findNavController() return parentFragment?.parentFragment?.findNavController() ?: findNavController()
@ -72,6 +73,32 @@ internal fun MainActivity.navigateToDialer(args: Bundle?) {
) )
} }
internal fun MainActivity.navigateToChatRooms(args: Bundle? = null) {
findNavController(R.id.nav_host_fragment).navigate(
R.id.action_global_masterChatRoomsFragment,
args,
popupTo(R.id.masterChatRoomsFragment, true)
)
}
internal fun MainActivity.navigateToChatRoom(localAddress: String?, peerAddress: String?) {
val deepLink = "linphone-android://chat-room/$localAddress/$peerAddress"
Log.i("[Main Activity] Starting deep link: $deepLink")
findNavController(R.id.nav_host_fragment).navigate(
Uri.parse(deepLink),
popupTo(R.id.masterChatRoomsFragment, true)
)
}
internal fun MainActivity.navigateToContact(contactId: String?) {
val deepLink = "linphone-android://contact/view/$contactId"
Log.i("[Main Activity] Starting deep link: $deepLink")
findNavController(R.id.nav_host_fragment).navigate(
Uri.parse(deepLink),
popupTo(R.id.masterContactsFragment, true)
)
}
/* Tabs fragment related */ /* Tabs fragment related */
internal fun TabsFragment.navigateToCallHistory() { internal fun TabsFragment.navigateToCallHistory() {

View file

@ -49,8 +49,7 @@ import kotlinx.coroutines.*
import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.LinphoneApplication.Companion.corePreferences
import org.linphone.R import org.linphone.R
import org.linphone.activities.GenericActivity import org.linphone.activities.*
import org.linphone.activities.SnackBarActivity
import org.linphone.activities.assistant.AssistantActivity import org.linphone.activities.assistant.AssistantActivity
import org.linphone.activities.main.viewmodels.CallOverlayViewModel import org.linphone.activities.main.viewmodels.CallOverlayViewModel
import org.linphone.activities.main.viewmodels.SharedMainViewModel import org.linphone.activities.main.viewmodels.SharedMainViewModel
@ -255,9 +254,8 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin
if (uri != null) { if (uri != null) {
val contactId = coreContext.contactsManager.getAndroidContactIdFromUri(uri) val contactId = coreContext.contactsManager.getAndroidContactIdFromUri(uri)
if (contactId != null) { if (contactId != null) {
val deepLink = "linphone-android://contact/view/$contactId" Log.i("[Main Activity] Found contact URI parameter in intent: $uri")
Log.i("[Main Activity] Found contact URI parameter in intent: $uri, starting deep link: $deepLink") navigateToContact(contactId)
findNavController(R.id.nav_host_fragment).navigate(Uri.parse(deepLink))
} }
} }
} else { } else {
@ -284,9 +282,7 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin
when { when {
intent.hasExtra("ContactId") -> { intent.hasExtra("ContactId") -> {
val id = intent.getStringExtra("ContactId") val id = intent.getStringExtra("ContactId")
val deepLink = "linphone-android://contact/view/$id" navigateToContact(id)
Log.i("[Main Activity] Found contact id parameter in intent: $id, starting deep link: $deepLink")
findNavController(R.id.nav_host_fragment).navigate(Uri.parse(deepLink))
} }
intent.hasExtra("Chat") -> { intent.hasExtra("Chat") -> {
if (corePreferences.disableChat) return if (corePreferences.disableChat) return
@ -429,12 +425,10 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin
addressToIM = addressToIM.substring("mmsto:".length) addressToIM = addressToIM.substring("mmsto:".length)
} }
val peerAddress = coreContext.core.interpretUrl(addressToIM)?.asStringUriOnly()
val localAddress = val localAddress =
coreContext.core.defaultAccount?.params?.identityAddress?.asStringUriOnly() coreContext.core.defaultAccount?.params?.identityAddress?.asStringUriOnly()
val deepLink = "linphone-android://chat-room/$localAddress/$peerAddress" val peerAddress = coreContext.core.interpretUrl(addressToIM)?.asStringUriOnly()
Log.i("[Main Activity] Starting deep link: $deepLink") navigateToChatRoom(localAddress, peerAddress)
findNavController(R.id.nav_host_fragment).navigate(Uri.parse(deepLink))
} else { } else {
val shortcutId = intent.getStringExtra("android.intent.extra.shortcut.ID") // Intent.EXTRA_SHORTCUT_ID val shortcutId = intent.getStringExtra("android.intent.extra.shortcut.ID") // Intent.EXTRA_SHORTCUT_ID
if (shortcutId != null) { if (shortcutId != null) {
@ -442,7 +436,7 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin
handleLocusOrShortcut(shortcutId) handleLocusOrShortcut(shortcutId)
} else { } else {
Log.i("[Main Activity] Going into chat rooms list") Log.i("[Main Activity] Going into chat rooms list")
findNavController(R.id.nav_host_fragment).navigate(R.id.action_global_masterChatRoomsFragment) navigateToChatRooms()
} }
} }
} }
@ -452,11 +446,10 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin
if (split.size == 2) { if (split.size == 2) {
val localAddress = split[0] val localAddress = split[0]
val peerAddress = split[1] val peerAddress = split[1]
val deepLink = "linphone-android://chat-room/$localAddress/$peerAddress" navigateToChatRoom(localAddress, peerAddress)
findNavController(R.id.nav_host_fragment).navigate(Uri.parse(deepLink))
} else { } else {
Log.e("[Main Activity] Failed to parse shortcut/locus id: $id") Log.e("[Main Activity] Failed to parse shortcut/locus id: $id")
findNavController(R.id.nav_host_fragment).navigate(R.id.action_global_masterChatRoomsFragment) navigateToChatRooms()
} }
} }