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.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() {
|
||||||
|
|
|
@ -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()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue