Fixed navigation issues in MainActivity
This commit is contained in:
parent
0c4b4d6e3c
commit
610841097c
2 changed files with 36 additions and 16 deletions
|
@ -47,6 +47,7 @@ import org.linphone.activities.main.settings.fragments.*
|
|||
import org.linphone.activities.main.sidemenu.fragments.SideMenuFragment
|
||||
import org.linphone.contact.NativeContact
|
||||
import org.linphone.core.Address
|
||||
import org.linphone.core.tools.Log
|
||||
|
||||
internal fun Fragment.findMasterNavController(): NavController {
|
||||
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 */
|
||||
|
||||
internal fun TabsFragment.navigateToCallHistory() {
|
||||
|
|
|
@ -49,8 +49,7 @@ import kotlinx.coroutines.*
|
|||
import org.linphone.LinphoneApplication.Companion.coreContext
|
||||
import org.linphone.LinphoneApplication.Companion.corePreferences
|
||||
import org.linphone.R
|
||||
import org.linphone.activities.GenericActivity
|
||||
import org.linphone.activities.SnackBarActivity
|
||||
import org.linphone.activities.*
|
||||
import org.linphone.activities.assistant.AssistantActivity
|
||||
import org.linphone.activities.main.viewmodels.CallOverlayViewModel
|
||||
import org.linphone.activities.main.viewmodels.SharedMainViewModel
|
||||
|
@ -255,9 +254,8 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin
|
|||
if (uri != null) {
|
||||
val contactId = coreContext.contactsManager.getAndroidContactIdFromUri(uri)
|
||||
if (contactId != null) {
|
||||
val deepLink = "linphone-android://contact/view/$contactId"
|
||||
Log.i("[Main Activity] Found contact URI parameter in intent: $uri, starting deep link: $deepLink")
|
||||
findNavController(R.id.nav_host_fragment).navigate(Uri.parse(deepLink))
|
||||
Log.i("[Main Activity] Found contact URI parameter in intent: $uri")
|
||||
navigateToContact(contactId)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
@ -284,9 +282,7 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin
|
|||
when {
|
||||
intent.hasExtra("ContactId") -> {
|
||||
val id = intent.getStringExtra("ContactId")
|
||||
val deepLink = "linphone-android://contact/view/$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))
|
||||
navigateToContact(id)
|
||||
}
|
||||
intent.hasExtra("Chat") -> {
|
||||
if (corePreferences.disableChat) return
|
||||
|
@ -429,12 +425,10 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin
|
|||
addressToIM = addressToIM.substring("mmsto:".length)
|
||||
}
|
||||
|
||||
val peerAddress = coreContext.core.interpretUrl(addressToIM)?.asStringUriOnly()
|
||||
val localAddress =
|
||||
coreContext.core.defaultAccount?.params?.identityAddress?.asStringUriOnly()
|
||||
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))
|
||||
val peerAddress = coreContext.core.interpretUrl(addressToIM)?.asStringUriOnly()
|
||||
navigateToChatRoom(localAddress, peerAddress)
|
||||
} else {
|
||||
val shortcutId = intent.getStringExtra("android.intent.extra.shortcut.ID") // Intent.EXTRA_SHORTCUT_ID
|
||||
if (shortcutId != null) {
|
||||
|
@ -442,7 +436,7 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin
|
|||
handleLocusOrShortcut(shortcutId)
|
||||
} else {
|
||||
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) {
|
||||
val localAddress = split[0]
|
||||
val peerAddress = split[1]
|
||||
val deepLink = "linphone-android://chat-room/$localAddress/$peerAddress"
|
||||
findNavController(R.id.nav_host_fragment).navigate(Uri.parse(deepLink))
|
||||
navigateToChatRoom(localAddress, peerAddress)
|
||||
} else {
|
||||
Log.e("[Main Activity] Failed to parse shortcut/locus id: $id")
|
||||
findNavController(R.id.nav_host_fragment).navigate(R.id.action_global_masterChatRoomsFragment)
|
||||
navigateToChatRooms()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue