Fixed navigating from call history to existing contact + other navigation issues related to contacts

This commit is contained in:
Sylvain Berfini 2021-09-09 15:07:17 +02:00
parent 9a87851583
commit d41959a7f2
4 changed files with 30 additions and 8 deletions

View file

@ -352,7 +352,7 @@ internal fun GroupInfoFragment.navigateToChatRoom(args: Bundle?) {
/* Contacts related */ /* Contacts related */
internal fun MasterContactsFragment.navigateToContact(slidingPane: SlidingPaneLayout) { internal fun MasterContactsFragment.navigateToContact() {
if (findNavController().currentDestination?.id == R.id.masterContactsFragment) { if (findNavController().currentDestination?.id == R.id.masterContactsFragment) {
val navHostFragment = val navHostFragment =
childFragmentManager.findFragmentById(R.id.contacts_nav_container) as NavHostFragment childFragmentManager.findFragmentById(R.id.contacts_nav_container) as NavHostFragment
@ -361,7 +361,6 @@ internal fun MasterContactsFragment.navigateToContact(slidingPane: SlidingPaneLa
null, null,
popupTo(R.id.emptyContactFragment, true) popupTo(R.id.emptyContactFragment, true)
) )
if (!slidingPane.isOpen) slidingPane.openPane()
} }
} }
@ -400,7 +399,7 @@ internal fun ContactEditorFragment.navigateToContact(contact: NativeContact) {
findNavController().navigate( findNavController().navigate(
R.id.action_contactEditorFragment_to_detailContactFragment, R.id.action_contactEditorFragment_to_detailContactFragment,
bundle, bundle,
popupTo(R.id.masterContactsFragment, false) popupTo(R.id.contactEditorFragment, true)
) )
} }

View file

@ -24,7 +24,9 @@ import android.content.Intent
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.core.view.doOnPreDraw
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.R import org.linphone.R
import org.linphone.activities.* import org.linphone.activities.*
@ -143,13 +145,20 @@ class DetailContactFragment : GenericFragment<ContactDetailFragmentBinding>() {
} }
} }
) )
view.doOnPreDraw {
// Notifies fragment is ready to be drawn
sharedViewModel.contactFragmentOpenedEvent.value = Event(true)
}
} }
override fun goBack() { override fun goBack() {
if (sharedViewModel.isSlidingPaneSlideable.value == true) { if (!findNavController().popBackStack()) {
sharedViewModel.closeSlidingPaneEvent.value = Event(true) if (sharedViewModel.isSlidingPaneSlideable.value == true) {
} else { sharedViewModel.closeSlidingPaneEvent.value = Event(true)
navigateToEmptyContact() } else {
navigateToEmptyContact()
}
} }
} }

View file

@ -104,6 +104,15 @@ class MasterContactsFragment : MasterFragment<ContactMasterFragmentBinding, Cont
} }
) )
sharedViewModel.contactFragmentOpenedEvent.observe(
viewLifecycleOwner,
{
it.consume {
binding.slidingPane.openPane()
}
}
)
sharedViewModel.closeSlidingPaneEvent.observe( sharedViewModel.closeSlidingPaneEvent.observe(
viewLifecycleOwner, viewLifecycleOwner,
{ {
@ -225,7 +234,7 @@ class MasterContactsFragment : MasterFragment<ContactMasterFragmentBinding, Cont
editOnClick = false editOnClick = false
sipUriToAdd = null sipUriToAdd = null
} else { } else {
navigateToContact(binding.slidingPane) navigateToContact()
} }
} }
} }
@ -271,6 +280,7 @@ class MasterContactsFragment : MasterFragment<ContactMasterFragmentBinding, Cont
binding.setNewContactClickListener { binding.setNewContactClickListener {
// Remove any previously selected contact // Remove any previously selected contact
sharedViewModel.selectedContact.value = null sharedViewModel.selectedContact.value = null
editOnClick = false
navigateToContactEditor(sipUriToAdd, binding.slidingPane) navigateToContactEditor(sipUriToAdd, binding.slidingPane)
} }

View file

@ -68,6 +68,10 @@ class SharedMainViewModel : ViewModel() {
/* Contacts */ /* Contacts */
val contactFragmentOpenedEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
}
val selectedContact = MutableLiveData<Contact>() val selectedContact = MutableLiveData<Contact>()
// For correct animations directions // For correct animations directions