Reworked navigation

This commit is contained in:
Sylvain Berfini 2023-09-07 13:27:12 +02:00
parent cbc46ed2e0
commit fa7c6907be
24 changed files with 121 additions and 136 deletions

17
.idea/deploymentTargetDropDown.xml generated Normal file
View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetDropDown">
<runningDeviceTargetSelectedWithDropDown>
<Target>
<type value="RUNNING_DEVICE_TARGET" />
<deviceKey>
<Key>
<type value="SERIAL_NUMBER" />
<value value="1A051FDEE005XG" />
</Key>
</deviceKey>
</Target>
</runningDeviceTargetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2023-09-07T11:13:39.568123492Z" />
</component>
</project>

View file

@ -74,7 +74,6 @@ class CallFragment : GenericFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
postponeEnterTransition() postponeEnterTransition()
binding.lifecycleOwner = viewLifecycleOwner binding.lifecycleOwner = viewLifecycleOwner

View file

@ -23,6 +23,8 @@ import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.view.animation.Animation
import android.view.animation.AnimationUtils
import androidx.annotation.UiThread import androidx.annotation.UiThread
import androidx.core.view.doOnPreDraw import androidx.core.view.doOnPreDraw
import androidx.navigation.findNavController import androidx.navigation.findNavController
@ -47,13 +49,20 @@ class CallsFragment : GenericFragment() {
return binding.root return binding.root
} }
override fun onCreateAnimation(transit: Int, enter: Boolean, nextAnim: Int): Animation? {
if (findNavController().currentDestination?.id == R.id.startCallFragment) {
// Holds fragment in place while new contact fragment slides over it
return AnimationUtils.loadAnimation(activity, R.anim.hold)
}
return AnimationUtils.loadAnimation(activity, R.anim.hold)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
postponeEnterTransition()
binding.lifecycleOwner = viewLifecycleOwner binding.lifecycleOwner = viewLifecycleOwner
postponeEnterTransition()
sharedViewModel.callsListReadyToBeDisplayedEvent.observe(viewLifecycleOwner) { sharedViewModel.callsListReadyToBeDisplayedEvent.observe(viewLifecycleOwner) {
it.consume { it.consume {
startPostponedEnterTransition() startPostponedEnterTransition()
@ -88,12 +97,18 @@ class CallsFragment : GenericFragment() {
} }
} }
sharedViewModel.showStartCallEvent.observe(viewLifecycleOwner) {
it.consume {
findNavController().navigate(R.id.action_global_startCallFragment)
}
}
sharedViewModel.showCallLogEvent.observe( sharedViewModel.showCallLogEvent.observe(
viewLifecycleOwner viewLifecycleOwner
) { ) {
it.consume { callId -> it.consume { callId ->
Log.i("[Calls Fragment] Displaying call log with call ID [$callId]") Log.i("[Calls Fragment] Displaying call log with call ID [$callId]")
val navController = binding.callsRightNavContainer.findNavController() val navController = binding.callsNavContainer.findNavController()
val action = CallFragmentDirections.actionGlobalCallFragment( val action = CallFragmentDirections.actionGlobalCallFragment(
callId callId
) )
@ -105,7 +120,7 @@ class CallsFragment : GenericFragment() {
it.consume { it.consume {
if (findNavController().currentDestination?.id == R.id.callsFragment) { if (findNavController().currentDestination?.id == R.id.callsFragment) {
// To prevent any previously seen contact to show up when navigating back to here later // To prevent any previously seen contact to show up when navigating back to here later
binding.callsRightNavContainer.findNavController().popBackStack() binding.callsNavContainer.findNavController().popBackStack()
val action = val action =
CallsFragmentDirections.actionCallsFragmentToConversationsFragment() CallsFragmentDirections.actionCallsFragmentToConversationsFragment()
@ -118,7 +133,7 @@ class CallsFragment : GenericFragment() {
it.consume { it.consume {
if (findNavController().currentDestination?.id == R.id.callsFragment) { if (findNavController().currentDestination?.id == R.id.callsFragment) {
// To prevent any previously seen contact to show up when navigating back to here later // To prevent any previously seen contact to show up when navigating back to here later
binding.callsRightNavContainer.findNavController().popBackStack() binding.callsNavContainer.findNavController().popBackStack()
val action = CallsFragmentDirections.actionCallsFragmentToContactsFragment() val action = CallsFragmentDirections.actionCallsFragmentToContactsFragment()
findNavController().navigate(action) findNavController().navigate(action)

View file

@ -27,14 +27,11 @@ import android.view.Gravity
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.view.animation.Animation
import android.view.animation.AnimationUtils
import android.widget.PopupWindow import android.widget.PopupWindow
import androidx.annotation.UiThread import androidx.annotation.UiThread
import androidx.core.view.doOnPreDraw import androidx.core.view.doOnPreDraw
import androidx.databinding.DataBindingUtil import androidx.databinding.DataBindingUtil
import androidx.navigation.fragment.findNavController import androidx.lifecycle.ViewModelProvider
import androidx.navigation.navGraphViewModels
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.R import org.linphone.R
@ -59,20 +56,10 @@ class CallsListFragment : GenericFragment() {
private lateinit var binding: CallsListFragmentBinding private lateinit var binding: CallsListFragmentBinding
private val listViewModel: CallsListViewModel by navGraphViewModels( private lateinit var listViewModel: CallsListViewModel
R.id.callsListFragment
)
private lateinit var adapter: CallsListAdapter private lateinit var adapter: CallsListAdapter
override fun onCreateAnimation(transit: Int, enter: Boolean, nextAnim: Int): Animation? {
if (findNavController().currentDestination?.id == R.id.startCallFragment) {
// Holds fragment in place while new contact fragment slides over it
return AnimationUtils.loadAnimation(activity, R.anim.hold)
}
return super.onCreateAnimation(transit, enter, nextAnim)
}
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, inflater: LayoutInflater,
container: ViewGroup?, container: ViewGroup?,
@ -83,12 +70,15 @@ class CallsListFragment : GenericFragment() {
} }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
postponeEnterTransition()
listViewModel = requireActivity().run {
ViewModelProvider(this)[CallsListViewModel::class.java]
}
binding.lifecycleOwner = viewLifecycleOwner binding.lifecycleOwner = viewLifecycleOwner
binding.viewModel = listViewModel binding.viewModel = listViewModel
postponeEnterTransition()
adapter = CallsListAdapter(viewLifecycleOwner) adapter = CallsListAdapter(viewLifecycleOwner)
binding.callsList.setHasFixedSize(true) binding.callsList.setHasFixedSize(true)
binding.callsList.adapter = adapter binding.callsList.adapter = adapter
@ -186,7 +176,7 @@ class CallsListFragment : GenericFragment() {
} }
binding.setStartCallClickListener { binding.setStartCallClickListener {
findNavController().navigate(R.id.action_global_startCallFragment) sharedViewModel.showStartCallEvent.value = Event(true)
} }
sharedViewModel.defaultAccountChangedEvent.observe(viewLifecycleOwner) { sharedViewModel.defaultAccountChangedEvent.observe(viewLifecycleOwner) {

View file

@ -100,7 +100,6 @@ class StartCallFragment : GenericFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
postponeEnterTransition() postponeEnterTransition()
binding.lifecycleOwner = viewLifecycleOwner binding.lifecycleOwner = viewLifecycleOwner

View file

@ -79,7 +79,6 @@ class ContactFragment : GenericFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
postponeEnterTransition() postponeEnterTransition()
binding.lifecycleOwner = viewLifecycleOwner binding.lifecycleOwner = viewLifecycleOwner

View file

@ -23,6 +23,8 @@ import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.view.animation.Animation
import android.view.animation.AnimationUtils
import androidx.annotation.UiThread import androidx.annotation.UiThread
import androidx.core.view.doOnPreDraw import androidx.core.view.doOnPreDraw
import androidx.navigation.findNavController import androidx.navigation.findNavController
@ -51,13 +53,20 @@ class ContactsFragment : GenericFragment() {
return binding.root return binding.root
} }
override fun onCreateAnimation(transit: Int, enter: Boolean, nextAnim: Int): Animation? {
if (findNavController().currentDestination?.id == R.id.newContactFragment) {
// Holds fragment in place while new contact fragment slides over it
return AnimationUtils.loadAnimation(activity, R.anim.hold)
}
return super.onCreateAnimation(transit, enter, nextAnim)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
postponeEnterTransition()
binding.lifecycleOwner = viewLifecycleOwner binding.lifecycleOwner = viewLifecycleOwner
postponeEnterTransition()
sharedViewModel.contactsListReadyToBeDisplayedEvent.observe(viewLifecycleOwner) { sharedViewModel.contactsListReadyToBeDisplayedEvent.observe(viewLifecycleOwner) {
it.consume { it.consume {
Log.i("$TAG Contacts list is ready, starting postponed enter transition") Log.i("$TAG Contacts list is ready, starting postponed enter transition")
@ -107,7 +116,7 @@ class ContactsFragment : GenericFragment() {
) { ) {
it.consume { refKey -> it.consume { refKey ->
Log.i("$TAG Displaying contact with ref key [$refKey]") Log.i("$TAG Displaying contact with ref key [$refKey]")
val navController = binding.contactsRightNavContainer.findNavController() val navController = binding.contactsNavContainer.findNavController()
val action = ContactFragmentDirections.actionGlobalContactFragment( val action = ContactFragmentDirections.actionGlobalContactFragment(
refKey refKey
) )
@ -120,7 +129,7 @@ class ContactsFragment : GenericFragment() {
) { ) {
it.consume { it.consume {
Log.i("$TAG Opening contact editor for creating new contact") Log.i("$TAG Opening contact editor for creating new contact")
val navController = binding.contactsLeftNavContainer.findNavController() val navController = findNavController()
navController.navigate(R.id.action_global_newContactFragment) navController.navigate(R.id.action_global_newContactFragment)
} }
} }
@ -129,7 +138,7 @@ class ContactsFragment : GenericFragment() {
it.consume { it.consume {
if (findNavController().currentDestination?.id == R.id.contactsFragment) { if (findNavController().currentDestination?.id == R.id.contactsFragment) {
// To prevent any previously seen contact to show up when navigating back to here later // To prevent any previously seen contact to show up when navigating back to here later
binding.contactsRightNavContainer.findNavController().popBackStack() binding.contactsNavContainer.findNavController().popBackStack()
val action = ContactsFragmentDirections.actionContactsFragmentToConversationsFragment() val action = ContactsFragmentDirections.actionContactsFragmentToConversationsFragment()
findNavController().navigate(action) findNavController().navigate(action)
@ -141,7 +150,7 @@ class ContactsFragment : GenericFragment() {
it.consume { it.consume {
if (findNavController().currentDestination?.id == R.id.contactsFragment) { if (findNavController().currentDestination?.id == R.id.contactsFragment) {
// To prevent any previously seen contact to show up when navigating back to here later // To prevent any previously seen contact to show up when navigating back to here later
binding.contactsRightNavContainer.findNavController().popBackStack() binding.contactsNavContainer.findNavController().popBackStack()
val action = ContactsFragmentDirections.actionContactsFragmentToCallsFragment() val action = ContactsFragmentDirections.actionContactsFragmentToCallsFragment()
findNavController().navigate(action) findNavController().navigate(action)

View file

@ -25,13 +25,10 @@ import android.provider.ContactsContract
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.view.animation.Animation
import android.view.animation.AnimationUtils
import androidx.annotation.UiThread import androidx.annotation.UiThread
import androidx.core.content.FileProvider import androidx.core.content.FileProvider
import androidx.core.view.doOnPreDraw import androidx.core.view.doOnPreDraw
import androidx.navigation.fragment.findNavController import androidx.lifecycle.ViewModelProvider
import androidx.navigation.navGraphViewModels
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import java.io.File import java.io.File
import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.coreContext
@ -54,21 +51,11 @@ class ContactsListFragment : GenericFragment() {
private lateinit var binding: ContactsListFragmentBinding private lateinit var binding: ContactsListFragmentBinding
private val listViewModel: ContactsListViewModel by navGraphViewModels( private lateinit var listViewModel: ContactsListViewModel
R.id.contactsListFragment
)
private lateinit var adapter: ContactsListAdapter private lateinit var adapter: ContactsListAdapter
private lateinit var favouritesAdapter: ContactsListAdapter private lateinit var favouritesAdapter: ContactsListAdapter
override fun onCreateAnimation(transit: Int, enter: Boolean, nextAnim: Int): Animation? {
if (findNavController().currentDestination?.id == R.id.newContactFragment) {
// Holds fragment in place while new contact fragment slides over it
return AnimationUtils.loadAnimation(activity, R.anim.hold)
}
return super.onCreateAnimation(transit, enter, nextAnim)
}
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, inflater: LayoutInflater,
container: ViewGroup?, container: ViewGroup?,
@ -80,9 +67,12 @@ class ContactsListFragment : GenericFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
postponeEnterTransition() postponeEnterTransition()
listViewModel = requireActivity().run {
ViewModelProvider(this)[ContactsListViewModel::class.java]
}
binding.lifecycleOwner = viewLifecycleOwner binding.lifecycleOwner = viewLifecycleOwner
binding.viewModel = listViewModel binding.viewModel = listViewModel

View file

@ -95,12 +95,11 @@ class EditContactFragment : GenericFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
postponeEnterTransition()
binding.lifecycleOwner = viewLifecycleOwner binding.lifecycleOwner = viewLifecycleOwner
binding.viewModel = viewModel binding.viewModel = viewModel
postponeEnterTransition()
val refKey = args.contactRefKey val refKey = args.contactRefKey
Log.i("$TAG Looking up for contact with ref key [$refKey]") Log.i("$TAG Looking up for contact with ref key [$refKey]")
viewModel.findFriendByRefKey(refKey) viewModel.findFriendByRefKey(refKey)

View file

@ -55,6 +55,7 @@ class ConversationFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
postponeEnterTransition()
binding.lifecycleOwner = viewLifecycleOwner binding.lifecycleOwner = viewLifecycleOwner
binding.viewModel = viewModel binding.viewModel = viewModel
@ -74,8 +75,6 @@ class ConversationFragment : Fragment() {
} }
arguments?.clear() arguments?.clear()
postponeEnterTransition()
adapter = ChatEventLogsListAdapter(viewLifecycleOwner) adapter = ChatEventLogsListAdapter(viewLifecycleOwner)
binding.messagesList.setHasFixedSize(false) binding.messagesList.setHasFixedSize(false)
binding.messagesList.adapter = adapter binding.messagesList.adapter = adapter

View file

@ -89,12 +89,11 @@ class ConversationsFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
postponeEnterTransition()
binding.lifecycleOwner = viewLifecycleOwner binding.lifecycleOwner = viewLifecycleOwner
binding.viewModel = listViewModel binding.viewModel = listViewModel
postponeEnterTransition()
adapter = ConversationsListAdapter(viewLifecycleOwner) adapter = ConversationsListAdapter(viewLifecycleOwner)
adapter.registerAdapterDataObserver(observer) adapter.registerAdapterDataObserver(observer)
binding.conversationsList.setHasFixedSize(true) binding.conversationsList.setHasFixedSize(true)

View file

@ -62,12 +62,11 @@ class NewConversationFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
postponeEnterTransition()
binding.lifecycleOwner = viewLifecycleOwner binding.lifecycleOwner = viewLifecycleOwner
binding.viewModel = viewModel binding.viewModel = viewModel
postponeEnterTransition()
adapter = ContactsSelectionAdapter(viewLifecycleOwner) adapter = ContactsSelectionAdapter(viewLifecycleOwner)
binding.contactsList.adapter = adapter binding.contactsList.adapter = adapter
binding.contactsList.setHasFixedSize(true) binding.contactsList.setHasFixedSize(true)

View file

@ -68,7 +68,6 @@ class AccountProfileFragment : GenericFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
postponeEnterTransition() postponeEnterTransition()
binding.lifecycleOwner = viewLifecycleOwner binding.lifecycleOwner = viewLifecycleOwner

View file

@ -85,6 +85,10 @@ class SharedMainViewModel @UiThread constructor() : ViewModel() {
val callsListReadyToBeDisplayedEvent = MutableLiveData<Event<Boolean>>() val callsListReadyToBeDisplayedEvent = MutableLiveData<Event<Boolean>>()
val showStartCallEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
}
val showCallLogEvent: MutableLiveData<Event<String>> by lazy { val showCallLogEvent: MutableLiveData<Event<String>> by lazy {
MutableLiveData<Event<String>>() MutableLiveData<Event<String>>()
} }

View file

@ -20,21 +20,20 @@
app:layout_constraintEnd_toEndOf="parent"> app:layout_constraintEnd_toEndOf="parent">
<androidx.fragment.app.FragmentContainerView <androidx.fragment.app.FragmentContainerView
android:id="@+id/calls_left_nav_container" android:id="@+id/calls_list"
android:name="androidx.navigation.fragment.NavHostFragment" android:name="org.linphone.ui.main.calls.fragment.CallsListFragment"
android:layout_width="@dimen/sliding_pane_left_fragment_with_nav_width" android:layout_width="@dimen/sliding_pane_left_fragment_with_nav_width"
android:layout_height="match_parent" android:layout_height="match_parent"
app:defaultNavHost="false" app:layout="@layout/calls_list_fragment"/>
app:navGraph="@navigation/calls_left_nav_graph"/>
<androidx.fragment.app.FragmentContainerView <androidx.fragment.app.FragmentContainerView
android:id="@+id/calls_right_nav_container" android:id="@+id/calls_nav_container"
android:name="androidx.navigation.fragment.NavHostFragment" android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1" android:layout_weight="1"
app:defaultNavHost="false" app:defaultNavHost="false"
app:navGraph="@navigation/calls_right_nav_graph"/> app:navGraph="@navigation/calls_nav_graph"/>
</androidx.slidingpanelayout.widget.SlidingPaneLayout> </androidx.slidingpanelayout.widget.SlidingPaneLayout>

View file

@ -124,7 +124,7 @@
app:tint="@color/gray_8" app:tint="@color/gray_8"
app:backgroundTint="@color/white" app:backgroundTint="@color/white"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@id/bottom_nav_bar" /> app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -20,21 +20,20 @@
app:layout_constraintEnd_toEndOf="parent"> app:layout_constraintEnd_toEndOf="parent">
<androidx.fragment.app.FragmentContainerView <androidx.fragment.app.FragmentContainerView
android:id="@+id/contacts_left_nav_container" android:id="@+id/contacts_list"
android:name="androidx.navigation.fragment.NavHostFragment" android:name="org.linphone.ui.main.contacts.fragment.ContactsListFragment"
android:layout_width="@dimen/sliding_pane_left_fragment_with_nav_width" android:layout_width="@dimen/sliding_pane_left_fragment_with_nav_width"
android:layout_height="match_parent" android:layout_height="match_parent"
app:defaultNavHost="false" app:layout="@layout/contacts_list_fragment"/>
app:navGraph="@navigation/contact_left_nav_graph"/>
<androidx.fragment.app.FragmentContainerView <androidx.fragment.app.FragmentContainerView
android:id="@+id/contacts_right_nav_container" android:id="@+id/contacts_nav_container"
android:name="androidx.navigation.fragment.NavHostFragment" android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1" android:layout_weight="1"
app:defaultNavHost="false" app:defaultNavHost="false"
app:navGraph="@navigation/contact_right_nav_graph"/> app:navGraph="@navigation/contacts_nav_graph"/>
</androidx.slidingpanelayout.widget.SlidingPaneLayout> </androidx.slidingpanelayout.widget.SlidingPaneLayout>

View file

@ -12,21 +12,20 @@
android:layout_height="match_parent"> android:layout_height="match_parent">
<androidx.fragment.app.FragmentContainerView <androidx.fragment.app.FragmentContainerView
android:id="@+id/calls_left_nav_container" android:id="@+id/calls_list"
android:name="androidx.navigation.fragment.NavHostFragment" android:name="org.linphone.ui.main.calls.fragment.CallsListFragment"
android:layout_width="@dimen/sliding_pane_left_fragment_width" android:layout_width="@dimen/sliding_pane_left_fragment_width"
android:layout_height="match_parent" android:layout_height="match_parent"
app:defaultNavHost="false" app:layout="@layout/calls_list_fragment" />
app:navGraph="@navigation/calls_left_nav_graph"/>
<androidx.fragment.app.FragmentContainerView <androidx.fragment.app.FragmentContainerView
android:id="@+id/calls_right_nav_container" android:id="@+id/calls_nav_container"
android:name="androidx.navigation.fragment.NavHostFragment" android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="@dimen/sliding_pane_right_fragment_width" android:layout_width="@dimen/sliding_pane_right_fragment_width"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1" android:layout_weight="1"
app:defaultNavHost="false" app:defaultNavHost="false"
app:navGraph="@navigation/calls_right_nav_graph"/> app:navGraph="@navigation/calls_nav_graph"/>
</androidx.slidingpanelayout.widget.SlidingPaneLayout> </androidx.slidingpanelayout.widget.SlidingPaneLayout>

View file

@ -12,21 +12,20 @@
android:layout_height="match_parent"> android:layout_height="match_parent">
<androidx.fragment.app.FragmentContainerView <androidx.fragment.app.FragmentContainerView
android:id="@+id/contacts_left_nav_container" android:id="@+id/contacts_list"
android:name="androidx.navigation.fragment.NavHostFragment" android:name="org.linphone.ui.main.contacts.fragment.ContactsListFragment"
android:layout_width="@dimen/sliding_pane_left_fragment_width" android:layout_width="@dimen/sliding_pane_left_fragment_width"
android:layout_height="match_parent" android:layout_height="match_parent"
app:defaultNavHost="false" app:layout="@layout/contacts_list_fragment"/>
app:navGraph="@navigation/contact_left_nav_graph"/>
<androidx.fragment.app.FragmentContainerView <androidx.fragment.app.FragmentContainerView
android:id="@+id/contacts_right_nav_container" android:id="@+id/contacts_nav_container"
android:name="androidx.navigation.fragment.NavHostFragment" android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="@dimen/sliding_pane_right_fragment_width" android:layout_width="@dimen/sliding_pane_right_fragment_width"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1" android:layout_weight="1"
app:defaultNavHost="false" app:defaultNavHost="false"
app:navGraph="@navigation/contact_right_nav_graph"/> app:navGraph="@navigation/contacts_nav_graph"/>
</androidx.slidingpanelayout.widget.SlidingPaneLayout> </androidx.slidingpanelayout.widget.SlidingPaneLayout>

View file

@ -1,27 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/calls_left_nav_graph"
app:startDestination="@id/callsListFragment">
<fragment
android:id="@+id/callsListFragment"
android:name="org.linphone.ui.main.calls.fragment.CallsListFragment"
android:label="CallsListFragment"
tools:layout="@layout/calls_list_fragment"/>
<fragment
android:id="@+id/startCallFragment"
android:name="org.linphone.ui.main.calls.fragment.StartCallFragment"
android:label="StartCallFragment"
tools:layout="@layout/call_start_fragment" />
<action
android:id="@+id/action_global_startCallFragment"
app:destination="@id/startCallFragment"
app:enterAnim="@anim/slide_in"
app:popExitAnim="@anim/slide_out"
app:launchSingleTop="true"/>
</navigation>

View file

@ -1,27 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/contact_left_nav_graph"
app:startDestination="@id/contactsListFragment">
<fragment
android:id="@+id/contactsListFragment"
android:name="org.linphone.ui.main.contacts.fragment.ContactsListFragment"
android:label="ContactsListFragment"
tools:layout="@layout/contacts_list_fragment">
</fragment>
<fragment
android:id="@+id/newContactFragment"
android:name="org.linphone.ui.main.contacts.fragment.NewContactFragment"
android:label="NewContactFragment"
tools:layout="@layout/contact_new_or_edit_fragment"/>
<action
android:id="@+id/action_global_newContactFragment"
app:destination="@id/newContactFragment"
app:enterAnim="@anim/slide_in"
app:popExitAnim="@anim/slide_out"
app:launchSingleTop="true" />
</navigation>

View file

@ -138,4 +138,30 @@
android:id="@+id/action_global_recordingsFragment" android:id="@+id/action_global_recordingsFragment"
app:destination="@id/recordingsFragment"/> app:destination="@id/recordingsFragment"/>
<fragment
android:id="@+id/startCallFragment"
android:name="org.linphone.ui.main.calls.fragment.StartCallFragment"
android:label="StartCallFragment"
tools:layout="@layout/call_start_fragment" />
<action
android:id="@+id/action_global_startCallFragment"
app:destination="@id/startCallFragment"
app:enterAnim="@anim/slide_in"
app:popExitAnim="@anim/slide_out"
app:launchSingleTop="true"/>
<fragment
android:id="@+id/newContactFragment"
android:name="org.linphone.ui.main.contacts.fragment.NewContactFragment"
android:label="NewContactFragment"
tools:layout="@layout/contact_new_or_edit_fragment"/>
<action
android:id="@+id/action_global_newContactFragment"
app:destination="@id/newContactFragment"
app:enterAnim="@anim/slide_in"
app:popExitAnim="@anim/slide_out"
app:launchSingleTop="true" />
</navigation> </navigation>