From 2131458ac16587a1071f62636faa4987e7326e4a Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 2 Mar 2021 11:22:41 +0100 Subject: [PATCH] Don't use arguments to pass list of Addresses between fragments, might crash in a writeToParcel --- .../java/org/linphone/activities/Navigation.kt | 4 ++-- .../chat/fragments/ChatRoomCreationFragment.kt | 13 +++++-------- .../main/chat/fragments/DetailChatRoomFragment.kt | 1 + .../main/chat/fragments/GroupInfoFragment.kt | 14 +++++++------- .../main/chat/fragments/MasterChatRoomsFragment.kt | 2 ++ .../main/viewmodels/SharedMainViewModel.kt | 2 ++ 6 files changed, 19 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/org/linphone/activities/Navigation.kt b/app/src/main/java/org/linphone/activities/Navigation.kt index f58dec43b..0bf8df5db 100644 --- a/app/src/main/java/org/linphone/activities/Navigation.kt +++ b/app/src/main/java/org/linphone/activities/Navigation.kt @@ -348,11 +348,11 @@ internal fun DetailChatRoomFragment.navigateToEphemeralInfo() { } } -internal fun ChatRoomCreationFragment.navigateToGroupInfo(args: Bundle?) { +internal fun ChatRoomCreationFragment.navigateToGroupInfo() { if (findNavController().currentDestination?.id == R.id.chatRoomCreationFragment) { findNavController().navigate( R.id.action_chatRoomCreationFragment_to_groupInfoFragment, - args, + null, getRightToLeftAnimationNavOptions() ) } diff --git a/app/src/main/java/org/linphone/activities/main/chat/fragments/ChatRoomCreationFragment.kt b/app/src/main/java/org/linphone/activities/main/chat/fragments/ChatRoomCreationFragment.kt index 3171a6d79..b5e148a83 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/fragments/ChatRoomCreationFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/fragments/ChatRoomCreationFragment.kt @@ -35,7 +35,6 @@ import org.linphone.activities.main.fragments.SecureFragment import org.linphone.activities.main.navigateToChatRoom import org.linphone.activities.main.navigateToGroupInfo import org.linphone.activities.main.viewmodels.SharedMainViewModel -import org.linphone.core.Address import org.linphone.core.tools.Log import org.linphone.databinding.ChatRoomCreationFragmentBinding import org.linphone.utils.PermissionHelper @@ -128,14 +127,13 @@ class ChatRoomCreationFragment : SecureFragment } }) - addParticipantsFromBundle() + addParticipantsFromSharedViewModel() // Next button is only used to go to group chat info fragment binding.setNextClickListener { sharedViewModel.createEncryptedChatRoom = viewModel.isEncrypted.value == true - val args = Bundle() - args.putSerializable("participants", viewModel.selectedAddresses.value) - navigateToGroupInfo(args) + sharedViewModel.chatRoomParticipants.value = viewModel.selectedAddresses.value + navigateToGroupInfo() } viewModel.onErrorEvent.observe(viewLifecycleOwner, { @@ -150,9 +148,8 @@ class ChatRoomCreationFragment : SecureFragment } } - @Suppress("UNCHECKED_CAST") - private fun addParticipantsFromBundle() { - val participants = arguments?.getSerializable("participants") as? ArrayList
+ private fun addParticipantsFromSharedViewModel() { + val participants = sharedViewModel.chatRoomParticipants.value if (participants != null && participants.size > 0) { viewModel.selectedAddresses.value = participants } diff --git a/app/src/main/java/org/linphone/activities/main/chat/fragments/DetailChatRoomFragment.kt b/app/src/main/java/org/linphone/activities/main/chat/fragments/DetailChatRoomFragment.kt index 73111abbc..66a44f9aa 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/fragments/DetailChatRoomFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/fragments/DetailChatRoomFragment.kt @@ -398,6 +398,7 @@ class DetailChatRoomFragment : MasterFragment() { } }) - addParticipantsFromBundle() + addParticipantsFromSharedViewModel() binding.setBackClickListener { findNavController().popBackStack() @@ -128,13 +128,14 @@ class GroupInfoFragment : SecureFragment() { binding.setParticipantsClickListener { sharedViewModel.createEncryptedChatRoom = viewModel.isEncrypted.value == true - val args = Bundle() - args.putBoolean("createGroup", true) val list = arrayListOf
() for (participant in viewModel.participants.value.orEmpty()) { list.add(participant.address) } - args.putSerializable("participants", list) + sharedViewModel.chatRoomParticipants.value = list + + val args = Bundle() + args.putBoolean("createGroup", true) navigateToChatRoomCreation(args) } @@ -161,9 +162,8 @@ class GroupInfoFragment : SecureFragment() { }) } - @Suppress("UNCHECKED_CAST") - private fun addParticipantsFromBundle() { - val participants = arguments?.getSerializable("participants") as? ArrayList
+ private fun addParticipantsFromSharedViewModel() { + val participants = sharedViewModel.chatRoomParticipants.value if (participants != null && participants.size > 0) { val list = arrayListOf() diff --git a/app/src/main/java/org/linphone/activities/main/chat/fragments/MasterChatRoomsFragment.kt b/app/src/main/java/org/linphone/activities/main/chat/fragments/MasterChatRoomsFragment.kt index 9305974d8..bc6fafbce 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/fragments/MasterChatRoomsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/fragments/MasterChatRoomsFragment.kt @@ -157,11 +157,13 @@ class MasterChatRoomsFragment : MasterFragment>() + /* Contacts */ val selectedContact = MutableLiveData()