Fixed navigation issues on tablets & foldables

This commit is contained in:
Sylvain Berfini 2021-09-10 11:05:02 +02:00
parent d41959a7f2
commit a648ac3b1e

View file

@ -159,10 +159,10 @@ internal fun MasterChatRoomsFragment.navigateToChatRoom(args: Bundle) {
val navHostFragment = val navHostFragment =
childFragmentManager.findFragmentById(R.id.chat_nav_container) as NavHostFragment childFragmentManager.findFragmentById(R.id.chat_nav_container) as NavHostFragment
val previousBackStackEntry = navHostFragment.navController.currentBackStackEntry val previousBackStackEntry = navHostFragment.navController.currentBackStackEntry
val popUpToFragmentId = if (previousBackStackEntry == null || previousBackStackEntry.destination.id == R.id.emptyChatFragment) { val popUpToFragmentId = when (previousBackStackEntry?.destination?.id) {
R.id.emptyChatFragment R.id.detailChatRoomFragment -> R.id.detailChatRoomFragment
} else { R.id.chatRoomCreationFragment -> R.id.chatRoomCreationFragment
R.id.chatRoomCreationFragment else -> R.id.emptyChatFragment
} }
navHostFragment.navController.navigate( navHostFragment.navController.navigate(
R.id.action_global_detailChatRoomFragment, R.id.action_global_detailChatRoomFragment,
@ -179,10 +179,10 @@ internal fun MasterChatRoomsFragment.navigateToChatRoomCreation(
val navHostFragment = val navHostFragment =
childFragmentManager.findFragmentById(R.id.chat_nav_container) as NavHostFragment childFragmentManager.findFragmentById(R.id.chat_nav_container) as NavHostFragment
val previousBackStackEntry = navHostFragment.navController.currentBackStackEntry val previousBackStackEntry = navHostFragment.navController.currentBackStackEntry
val popUpToFragmentId = if (previousBackStackEntry == null || previousBackStackEntry.destination.id == R.id.emptyChatFragment) { val popUpToFragmentId = when (previousBackStackEntry?.destination?.id) {
R.id.emptyChatFragment R.id.detailChatRoomFragment -> R.id.detailChatRoomFragment
} else { R.id.chatRoomCreationFragment -> R.id.chatRoomCreationFragment
R.id.detailChatRoomFragment else -> R.id.emptyChatFragment
} }
navHostFragment.navController.navigate( navHostFragment.navController.navigate(
R.id.action_global_chatRoomCreationFragment, R.id.action_global_chatRoomCreationFragment,
@ -317,7 +317,7 @@ internal fun ChatRoomCreationFragment.navigateToChatRoom(args: Bundle) {
findNavController().navigate( findNavController().navigate(
R.id.action_chatRoomCreationFragment_to_detailChatRoomFragment, R.id.action_chatRoomCreationFragment_to_detailChatRoomFragment,
args, args,
popupTo(R.id.emptyChatFragment, true) popupTo(R.id.detailChatRoomFragment, true)
) )
} }
} }
@ -345,7 +345,7 @@ internal fun GroupInfoFragment.navigateToChatRoom(args: Bundle?) {
findNavController().navigate( findNavController().navigate(
R.id.action_groupInfoFragment_to_detailChatRoomFragment, R.id.action_groupInfoFragment_to_detailChatRoomFragment,
args, args,
popupTo(R.id.emptyChatFragment, true) popupTo(R.id.detailChatRoomFragment, true)
) )
} }
} }
@ -356,10 +356,16 @@ internal fun MasterContactsFragment.navigateToContact() {
if (findNavController().currentDestination?.id == R.id.masterContactsFragment) { if (findNavController().currentDestination?.id == R.id.masterContactsFragment) {
val navHostFragment = val navHostFragment =
childFragmentManager.findFragmentById(R.id.contacts_nav_container) as NavHostFragment childFragmentManager.findFragmentById(R.id.contacts_nav_container) as NavHostFragment
val previousBackStackEntry = navHostFragment.navController.currentBackStackEntry
val popUpToFragmentId = when (previousBackStackEntry?.destination?.id) {
R.id.detailContactFragment -> R.id.detailContactFragment
R.id.contactEditorFragment -> R.id.contactEditorFragment
else -> R.id.emptyContactFragment
}
navHostFragment.navController.navigate( navHostFragment.navController.navigate(
R.id.action_global_detailContactFragment, R.id.action_global_detailContactFragment,
null, null,
popupTo(R.id.emptyContactFragment, true) popupTo(popUpToFragmentId, true)
) )
} }
} }
@ -454,7 +460,7 @@ internal fun MasterCallLogsFragment.navigateToCallHistory(slidingPane: SlidingPa
navHostFragment.navController.navigate( navHostFragment.navController.navigate(
R.id.action_global_detailCallLogFragment, R.id.action_global_detailCallLogFragment,
null, null,
popupTo(R.id.emptyCallHistoryFragment, true) popupTo(R.id.detailCallLogFragment, true)
) )
if (!slidingPane.isOpen) slidingPane.openPane() if (!slidingPane.isOpen) slidingPane.openPane()
} }