From d41959a7f25ad3148e2ea51ba91d6057caee09f0 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Thu, 9 Sep 2021 15:07:17 +0200 Subject: [PATCH] Fixed navigating from call history to existing contact + other navigation issues related to contacts --- .../java/org/linphone/activities/Navigation.kt | 5 ++--- .../contact/fragments/DetailContactFragment.kt | 17 +++++++++++++---- .../contact/fragments/MasterContactsFragment.kt | 12 +++++++++++- .../main/viewmodels/SharedMainViewModel.kt | 4 ++++ 4 files changed, 30 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/linphone/activities/Navigation.kt b/app/src/main/java/org/linphone/activities/Navigation.kt index 7f18c78d2..4ba50c37b 100644 --- a/app/src/main/java/org/linphone/activities/Navigation.kt +++ b/app/src/main/java/org/linphone/activities/Navigation.kt @@ -352,7 +352,7 @@ internal fun GroupInfoFragment.navigateToChatRoom(args: Bundle?) { /* Contacts related */ -internal fun MasterContactsFragment.navigateToContact(slidingPane: SlidingPaneLayout) { +internal fun MasterContactsFragment.navigateToContact() { if (findNavController().currentDestination?.id == R.id.masterContactsFragment) { val navHostFragment = childFragmentManager.findFragmentById(R.id.contacts_nav_container) as NavHostFragment @@ -361,7 +361,6 @@ internal fun MasterContactsFragment.navigateToContact(slidingPane: SlidingPaneLa null, popupTo(R.id.emptyContactFragment, true) ) - if (!slidingPane.isOpen) slidingPane.openPane() } } @@ -400,7 +399,7 @@ internal fun ContactEditorFragment.navigateToContact(contact: NativeContact) { findNavController().navigate( R.id.action_contactEditorFragment_to_detailContactFragment, bundle, - popupTo(R.id.masterContactsFragment, false) + popupTo(R.id.contactEditorFragment, true) ) } diff --git a/app/src/main/java/org/linphone/activities/main/contact/fragments/DetailContactFragment.kt b/app/src/main/java/org/linphone/activities/main/contact/fragments/DetailContactFragment.kt index dc645da84..b96b96814 100644 --- a/app/src/main/java/org/linphone/activities/main/contact/fragments/DetailContactFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/contact/fragments/DetailContactFragment.kt @@ -24,7 +24,9 @@ import android.content.Intent import android.net.Uri import android.os.Bundle import android.view.View +import androidx.core.view.doOnPreDraw import androidx.lifecycle.ViewModelProvider +import androidx.navigation.fragment.findNavController import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.R import org.linphone.activities.* @@ -143,13 +145,20 @@ class DetailContactFragment : GenericFragment() { } } ) + + view.doOnPreDraw { + // Notifies fragment is ready to be drawn + sharedViewModel.contactFragmentOpenedEvent.value = Event(true) + } } override fun goBack() { - if (sharedViewModel.isSlidingPaneSlideable.value == true) { - sharedViewModel.closeSlidingPaneEvent.value = Event(true) - } else { - navigateToEmptyContact() + if (!findNavController().popBackStack()) { + if (sharedViewModel.isSlidingPaneSlideable.value == true) { + sharedViewModel.closeSlidingPaneEvent.value = Event(true) + } else { + navigateToEmptyContact() + } } } diff --git a/app/src/main/java/org/linphone/activities/main/contact/fragments/MasterContactsFragment.kt b/app/src/main/java/org/linphone/activities/main/contact/fragments/MasterContactsFragment.kt index 5d35899a3..0d629f01e 100644 --- a/app/src/main/java/org/linphone/activities/main/contact/fragments/MasterContactsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/contact/fragments/MasterContactsFragment.kt @@ -104,6 +104,15 @@ class MasterContactsFragment : MasterFragment> by lazy { + MutableLiveData>() + } + val selectedContact = MutableLiveData() // For correct animations directions