Fixed navigating from call history to existing contact + other navigation issues related to contacts
This commit is contained in:
parent
9a87851583
commit
d41959a7f2
4 changed files with 30 additions and 8 deletions
|
@ -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)
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue