Fixed back nav when creating a group chat room
This commit is contained in:
parent
a752549002
commit
7c5feb041a
3 changed files with 25 additions and 6 deletions
|
@ -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)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue