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 */
|
/* 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)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue