Fixed back nav when creating a group chat room

This commit is contained in:
Sylvain Berfini 2021-10-25 10:40:13 +02:00
parent a752549002
commit 7c5feb041a
3 changed files with 25 additions and 6 deletions

View file

@ -340,12 +340,17 @@ internal fun GroupInfoFragment.navigateToChatRoomCreation(args: Bundle?) {
} }
} }
internal fun GroupInfoFragment.navigateToChatRoom(args: Bundle?) { internal fun GroupInfoFragment.navigateToChatRoom(args: Bundle?, created: Boolean) {
if (findNavController().currentDestination?.id == R.id.groupInfoFragment) { if (findNavController().currentDestination?.id == R.id.groupInfoFragment) {
val popUpToFragmentId = if (created) { // To remove all creation fragments from back stack
R.id.chatRoomCreationFragment
} else {
R.id.detailChatRoomFragment
}
findNavController().navigate( findNavController().navigate(
R.id.action_groupInfoFragment_to_detailChatRoomFragment, R.id.action_groupInfoFragment_to_detailChatRoomFragment,
args, args,
popupTo(R.id.detailChatRoomFragment, true) popupTo(popUpToFragmentId, true)
) )
} }
} }

View file

@ -125,8 +125,16 @@ class GroupInfoFragment : SecureFragment<ChatRoomGroupInfoFragmentBinding>() {
viewLifecycleOwner, viewLifecycleOwner,
{ {
it.consume { chatRoom -> it.consume { chatRoom ->
sharedViewModel.selectedChatRoom.value = chatRoom goToChatRoom(chatRoom, true)
navigateToChatRoom(AppUtils.createBundleWithSharedTextAndFiles(sharedViewModel)) }
}
)
viewModel.updatedChatRoomEvent.observe(
viewLifecycleOwner,
{
it.consume { chatRoom ->
goToChatRoom(chatRoom, false)
} }
} }
) )
@ -231,4 +239,9 @@ class GroupInfoFragment : SecureFragment<ChatRoomGroupInfoFragmentBinding>() {
dialog.show() dialog.show()
meAdminStatusChangedDialog = dialog meAdminStatusChangedDialog = dialog
} }
private fun goToChatRoom(chatRoom: ChatRoom, created: Boolean) {
sharedViewModel.selectedChatRoom.value = chatRoom
navigateToChatRoom(AppUtils.createBundleWithSharedTextAndFiles(sharedViewModel), created)
}
} }

View file

@ -43,6 +43,7 @@ class GroupInfoViewModelFactory(private val chatRoom: ChatRoom?) :
class GroupInfoViewModel(val chatRoom: ChatRoom?) : ErrorReportingViewModel() { class GroupInfoViewModel(val chatRoom: ChatRoom?) : ErrorReportingViewModel() {
val createdChatRoomEvent = MutableLiveData<Event<ChatRoom>>() val createdChatRoomEvent = MutableLiveData<Event<ChatRoom>>()
val updatedChatRoomEvent = MutableLiveData<Event<ChatRoom>>()
val subject = MutableLiveData<String>() val subject = MutableLiveData<String>()
@ -193,7 +194,7 @@ class GroupInfoViewModel(val chatRoom: ChatRoom?) : ErrorReportingViewModel() {
chatRoom.addParticipants(toAdd) chatRoom.addParticipants(toAdd)
// Go back to chat room // Go back to chat room
createdChatRoomEvent.value = Event(chatRoom) updatedChatRoomEvent.value = Event(chatRoom)
} }
} }
@ -201,7 +202,7 @@ class GroupInfoViewModel(val chatRoom: ChatRoom?) : ErrorReportingViewModel() {
if (chatRoom != null) { if (chatRoom != null) {
Log.w("[Chat Room Group Info] Leaving group") Log.w("[Chat Room Group Info] Leaving group")
chatRoom.leave() chatRoom.leave()
createdChatRoomEvent.value = Event(chatRoom) updatedChatRoomEvent.value = Event(chatRoom)
} }
} }