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 */
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)
)
}

View file

@ -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,15 +145,22 @@ class DetailContactFragment : GenericFragment<ContactDetailFragmentBinding>() {
}
}
)
view.doOnPreDraw {
// Notifies fragment is ready to be drawn
sharedViewModel.contactFragmentOpenedEvent.value = Event(true)
}
}
override fun goBack() {
if (!findNavController().popBackStack()) {
if (sharedViewModel.isSlidingPaneSlideable.value == true) {
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
} else {
navigateToEmptyContact()
}
}
}
private fun confirmContactRemoval() {
val dialogViewModel = DialogViewModel(getString(R.string.contact_delete_one_dialog))

View file

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

View file

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