From 4bf28f2b1c52c87a520b5aa6f4f26354d2773c28 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 3 Nov 2020 15:43:45 +0100 Subject: [PATCH] Fixed navigation issue between detail to detail fragments --- .../linphone/activities/main/Navigation.kt | 54 ++++++++++++++----- .../chat/fragments/DetailChatRoomFragment.kt | 11 ++++ .../fragments/DetailContactFragment.kt | 12 +++-- .../contact/viewmodels/ContactViewModel.kt | 1 + .../fragments/DetailCallLogFragment.kt | 2 +- .../history/viewmodels/CallLogViewModel.kt | 1 + .../navigation-sw533dp/contacts_nav_graph.xml | 10 ++-- .../navigation-sw533dp/history_nav_graph.xml | 12 ++--- .../res/navigation/contacts_nav_graph.xml | 14 +++-- .../main/res/navigation/history_nav_graph.xml | 14 ++++- 10 files changed, 93 insertions(+), 38 deletions(-) diff --git a/app/src/main/java/org/linphone/activities/main/Navigation.kt b/app/src/main/java/org/linphone/activities/main/Navigation.kt index 80679485f..ef060ea68 100644 --- a/app/src/main/java/org/linphone/activities/main/Navigation.kt +++ b/app/src/main/java/org/linphone/activities/main/Navigation.kt @@ -370,12 +370,20 @@ internal fun ContactEditorFragment.navigateToContact(contact: NativeContact) { findMasterNavController().navigate(Uri.parse(deepLink), getRightToLeftAnimationNavOptions()) } -internal fun DetailContactFragment.navigateToChatRooms(args: Bundle?) { - findMasterNavController().navigate( - R.id.action_global_masterChatRoomsFragment, - args, - getRightToLeftAnimationNavOptions() - ) +internal fun DetailContactFragment.navigateToChatRoom(args: Bundle?) { + if (!resources.getBoolean(R.bool.isTablet)) { + findNavController().navigate( + R.id.action_detailContactFragment_to_detailChatRoomFragment, + args, + getRightToLeftAnimationNavOptions() + ) + } else { + findMasterNavController().navigate( + R.id.action_global_masterChatRoomsFragment, + args, + getRightToLeftAnimationNavOptions() + ) + } } internal fun DetailContactFragment.navigateToDialer(args: Bundle?) { @@ -432,8 +440,18 @@ internal fun DetailCallLogFragment.navigateToContacts(sipUriToAdd: String) { } internal fun DetailCallLogFragment.navigateToContact(contact: NativeContact) { - val deepLink = "linphone-android://contact/view/${contact.nativeId}" - findMasterNavController().navigate(Uri.parse(deepLink), getRightToLeftAnimationNavOptions()) + if (!resources.getBoolean(R.bool.isTablet)) { + val args = Bundle() + args.putString("id", contact.nativeId) + findMasterNavController().navigate( + R.id.action_detailCallLogFragment_to_detailContactFragment, + args, + getRightToLeftAnimationNavOptions() + ) + } else { + val deepLink = "linphone-android://contact/view/${contact.nativeId}" + findMasterNavController().navigate(Uri.parse(deepLink), getRightToLeftAnimationNavOptions()) + } } internal fun DetailCallLogFragment.navigateToFriend(friendAddress: Address) { @@ -441,12 +459,20 @@ internal fun DetailCallLogFragment.navigateToFriend(friendAddress: Address) { findMasterNavController().navigate(Uri.parse(deepLink), getRightToLeftAnimationNavOptions()) } -internal fun DetailCallLogFragment.navigateToChatRooms(args: Bundle?) { - findMasterNavController().navigate( - R.id.action_global_masterChatRoomsFragment, - args, - getRightToLeftAnimationNavOptions() - ) +internal fun DetailCallLogFragment.navigateToChatRoom(args: Bundle?) { + if (!resources.getBoolean(R.bool.isTablet)) { + findNavController().navigate( + R.id.action_detailCallLogFragment_to_detailChatRoomFragment, + args, + getRightToLeftAnimationNavOptions() + ) + } else { + findMasterNavController().navigate( + R.id.action_global_masterChatRoomsFragment, + args, + getRightToLeftAnimationNavOptions() + ) + } } internal fun DetailCallLogFragment.navigateToDialer(args: Bundle?) { 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 99b3cbaf7..9fa279aba 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 @@ -93,6 +93,17 @@ class DetailChatRoomFragment : MasterFragment() { ViewModelProvider(this).get(SharedMainViewModel::class.java) } + val id = arguments?.getString("id") + arguments?.clear() + if (id != null) { + Log.i("[Contact] Found contact id parameter in arguments: $id") + sharedViewModel.selectedContact.value = coreContext.contactsManager.findContactById(id) + } + val contact = sharedViewModel.selectedContact.value contact ?: return @@ -91,7 +97,7 @@ class DetailContactFragment : GenericFragment() { val args = Bundle() args.putString("LocalSipUri", chatRoom.localAddress.asStringUriOnly()) args.putString("RemoteSipUri", chatRoom.peerAddress.asStringUriOnly()) - navigateToChatRooms(args) + navigateToChatRoom(args) } }) diff --git a/app/src/main/java/org/linphone/activities/main/contact/viewmodels/ContactViewModel.kt b/app/src/main/java/org/linphone/activities/main/contact/viewmodels/ContactViewModel.kt index 96233c61c..380e23b33 100644 --- a/app/src/main/java/org/linphone/activities/main/contact/viewmodels/ContactViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/contact/viewmodels/ContactViewModel.kt @@ -104,6 +104,7 @@ class ContactViewModel(private val c: Contact) : ErrorReportingViewModel(), Cont if (chatRoom != null) { if (chatRoom.state == ChatRoom.State.Created) { + waitForChatRoomCreation.value = false chatRoomCreatedEvent.value = Event(chatRoom) } else { chatRoom.addListener(chatRoomListener) diff --git a/app/src/main/java/org/linphone/activities/main/history/fragments/DetailCallLogFragment.kt b/app/src/main/java/org/linphone/activities/main/history/fragments/DetailCallLogFragment.kt index 7360eae53..f5566ab51 100644 --- a/app/src/main/java/org/linphone/activities/main/history/fragments/DetailCallLogFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/history/fragments/DetailCallLogFragment.kt @@ -107,7 +107,7 @@ class DetailCallLogFragment : GenericFragment() { val args = Bundle() args.putString("LocalSipUri", chatRoom.localAddress.asStringUriOnly()) args.putString("RemoteSipUri", chatRoom.peerAddress.asStringUriOnly()) - navigateToChatRooms(args) + navigateToChatRoom(args) } }) diff --git a/app/src/main/java/org/linphone/activities/main/history/viewmodels/CallLogViewModel.kt b/app/src/main/java/org/linphone/activities/main/history/viewmodels/CallLogViewModel.kt index 82a361666..a2ca9a0ce 100644 --- a/app/src/main/java/org/linphone/activities/main/history/viewmodels/CallLogViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/history/viewmodels/CallLogViewModel.kt @@ -138,6 +138,7 @@ class CallLogViewModel(val callLog: CallLog) : GenericContactViewModel(callLog.r val chatRoom = LinphoneUtils.createOneToOneChatRoom(callLog.remoteAddress, isSecured) if (chatRoom != null) { if (chatRoom.state == ChatRoom.State.Created) { + waitForChatRoomCreation.value = false chatRoomCreatedEvent.value = Event(chatRoom) } else { chatRoom.addListener(chatRoomListener) diff --git a/app/src/main/res/navigation-sw533dp/contacts_nav_graph.xml b/app/src/main/res/navigation-sw533dp/contacts_nav_graph.xml index 860d9ce6a..3c23e640a 100644 --- a/app/src/main/res/navigation-sw533dp/contacts_nav_graph.xml +++ b/app/src/main/res/navigation-sw533dp/contacts_nav_graph.xml @@ -14,6 +14,7 @@ android:id="@+id/action_detailContactFragment_to_contactEditorFragment" app:destination="@id/contactEditorFragment" /> + + - + + - - + android:label="EmptyFragment"/> + + + \ No newline at end of file diff --git a/app/src/main/res/navigation/contacts_nav_graph.xml b/app/src/main/res/navigation/contacts_nav_graph.xml index 27b7b93a0..988669437 100644 --- a/app/src/main/res/navigation/contacts_nav_graph.xml +++ b/app/src/main/res/navigation/contacts_nav_graph.xml @@ -9,19 +9,23 @@ android:id="@+id/detailContactFragment" android:name="org.linphone.activities.main.contact.fragments.DetailContactFragment" tools:layout="@layout/contact_detail_fragment" - android:label="DetailContactFragment" > + android:label="DetailContactFragment"> + + + + + - \ No newline at end of file diff --git a/app/src/main/res/navigation/history_nav_graph.xml b/app/src/main/res/navigation/history_nav_graph.xml index e337fbd72..d8dcadd32 100644 --- a/app/src/main/res/navigation/history_nav_graph.xml +++ b/app/src/main/res/navigation/history_nav_graph.xml @@ -9,6 +9,18 @@ android:id="@+id/detailCallLogFragment" android:name="org.linphone.activities.main.history.fragments.DetailCallLogFragment" tools:layout="@layout/history_detail_fragment" - android:label="DetailCallLogFragment" /> + android:label="DetailCallLogFragment"> + + + + + + \ No newline at end of file