diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
new file mode 100644
index 000000000..7c4320438
--- /dev/null
+++ b/.idea/deploymentTargetDropDown.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/org/linphone/ui/main/calls/fragment/CallFragment.kt b/app/src/main/java/org/linphone/ui/main/calls/fragment/CallFragment.kt
index 7973c3f3c..3586967fd 100644
--- a/app/src/main/java/org/linphone/ui/main/calls/fragment/CallFragment.kt
+++ b/app/src/main/java/org/linphone/ui/main/calls/fragment/CallFragment.kt
@@ -74,7 +74,6 @@ class CallFragment : GenericFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
-
postponeEnterTransition()
binding.lifecycleOwner = viewLifecycleOwner
diff --git a/app/src/main/java/org/linphone/ui/main/calls/fragment/CallsFragment.kt b/app/src/main/java/org/linphone/ui/main/calls/fragment/CallsFragment.kt
index 42c0133a5..2d3cd3e1e 100644
--- a/app/src/main/java/org/linphone/ui/main/calls/fragment/CallsFragment.kt
+++ b/app/src/main/java/org/linphone/ui/main/calls/fragment/CallsFragment.kt
@@ -23,6 +23,8 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.view.animation.Animation
+import android.view.animation.AnimationUtils
import androidx.annotation.UiThread
import androidx.core.view.doOnPreDraw
import androidx.navigation.findNavController
@@ -47,13 +49,20 @@ class CallsFragment : GenericFragment() {
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?) {
super.onViewCreated(view, savedInstanceState)
+ postponeEnterTransition()
binding.lifecycleOwner = viewLifecycleOwner
- postponeEnterTransition()
-
sharedViewModel.callsListReadyToBeDisplayedEvent.observe(viewLifecycleOwner) {
it.consume {
startPostponedEnterTransition()
@@ -88,12 +97,18 @@ class CallsFragment : GenericFragment() {
}
}
+ sharedViewModel.showStartCallEvent.observe(viewLifecycleOwner) {
+ it.consume {
+ findNavController().navigate(R.id.action_global_startCallFragment)
+ }
+ }
+
sharedViewModel.showCallLogEvent.observe(
viewLifecycleOwner
) {
it.consume { 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(
callId
)
@@ -105,7 +120,7 @@ class CallsFragment : GenericFragment() {
it.consume {
if (findNavController().currentDestination?.id == R.id.callsFragment) {
// 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.actionCallsFragmentToConversationsFragment()
@@ -118,7 +133,7 @@ class CallsFragment : GenericFragment() {
it.consume {
if (findNavController().currentDestination?.id == R.id.callsFragment) {
// 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()
findNavController().navigate(action)
diff --git a/app/src/main/java/org/linphone/ui/main/calls/fragment/CallsListFragment.kt b/app/src/main/java/org/linphone/ui/main/calls/fragment/CallsListFragment.kt
index fa5bcb640..4e51b3b90 100644
--- a/app/src/main/java/org/linphone/ui/main/calls/fragment/CallsListFragment.kt
+++ b/app/src/main/java/org/linphone/ui/main/calls/fragment/CallsListFragment.kt
@@ -27,14 +27,11 @@ import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
-import android.view.animation.Animation
-import android.view.animation.AnimationUtils
import android.widget.PopupWindow
import androidx.annotation.UiThread
import androidx.core.view.doOnPreDraw
import androidx.databinding.DataBindingUtil
-import androidx.navigation.fragment.findNavController
-import androidx.navigation.navGraphViewModels
+import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager
import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.R
@@ -59,20 +56,10 @@ class CallsListFragment : GenericFragment() {
private lateinit var binding: CallsListFragmentBinding
- private val listViewModel: CallsListViewModel by navGraphViewModels(
- R.id.callsListFragment
- )
+ private lateinit var listViewModel: CallsListViewModel
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(
inflater: LayoutInflater,
container: ViewGroup?,
@@ -83,12 +70,15 @@ class CallsListFragment : GenericFragment() {
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
+ postponeEnterTransition()
+
+ listViewModel = requireActivity().run {
+ ViewModelProvider(this)[CallsListViewModel::class.java]
+ }
binding.lifecycleOwner = viewLifecycleOwner
binding.viewModel = listViewModel
- postponeEnterTransition()
-
adapter = CallsListAdapter(viewLifecycleOwner)
binding.callsList.setHasFixedSize(true)
binding.callsList.adapter = adapter
@@ -186,7 +176,7 @@ class CallsListFragment : GenericFragment() {
}
binding.setStartCallClickListener {
- findNavController().navigate(R.id.action_global_startCallFragment)
+ sharedViewModel.showStartCallEvent.value = Event(true)
}
sharedViewModel.defaultAccountChangedEvent.observe(viewLifecycleOwner) {
diff --git a/app/src/main/java/org/linphone/ui/main/calls/fragment/StartCallFragment.kt b/app/src/main/java/org/linphone/ui/main/calls/fragment/StartCallFragment.kt
index 5b387cebb..b5657c4dd 100644
--- a/app/src/main/java/org/linphone/ui/main/calls/fragment/StartCallFragment.kt
+++ b/app/src/main/java/org/linphone/ui/main/calls/fragment/StartCallFragment.kt
@@ -100,7 +100,6 @@ class StartCallFragment : GenericFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
-
postponeEnterTransition()
binding.lifecycleOwner = viewLifecycleOwner
diff --git a/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactFragment.kt b/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactFragment.kt
index ca97c6da8..a19f4dbe3 100644
--- a/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactFragment.kt
+++ b/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactFragment.kt
@@ -79,7 +79,6 @@ class ContactFragment : GenericFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
-
postponeEnterTransition()
binding.lifecycleOwner = viewLifecycleOwner
diff --git a/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsFragment.kt b/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsFragment.kt
index b4cc3a6a9..a9984000a 100644
--- a/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsFragment.kt
+++ b/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsFragment.kt
@@ -23,6 +23,8 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.view.animation.Animation
+import android.view.animation.AnimationUtils
import androidx.annotation.UiThread
import androidx.core.view.doOnPreDraw
import androidx.navigation.findNavController
@@ -51,13 +53,20 @@ class ContactsFragment : GenericFragment() {
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?) {
super.onViewCreated(view, savedInstanceState)
+ postponeEnterTransition()
binding.lifecycleOwner = viewLifecycleOwner
- postponeEnterTransition()
-
sharedViewModel.contactsListReadyToBeDisplayedEvent.observe(viewLifecycleOwner) {
it.consume {
Log.i("$TAG Contacts list is ready, starting postponed enter transition")
@@ -107,7 +116,7 @@ class ContactsFragment : GenericFragment() {
) {
it.consume { refKey ->
Log.i("$TAG Displaying contact with ref key [$refKey]")
- val navController = binding.contactsRightNavContainer.findNavController()
+ val navController = binding.contactsNavContainer.findNavController()
val action = ContactFragmentDirections.actionGlobalContactFragment(
refKey
)
@@ -120,7 +129,7 @@ class ContactsFragment : GenericFragment() {
) {
it.consume {
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)
}
}
@@ -129,7 +138,7 @@ class ContactsFragment : GenericFragment() {
it.consume {
if (findNavController().currentDestination?.id == R.id.contactsFragment) {
// 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()
findNavController().navigate(action)
@@ -141,7 +150,7 @@ class ContactsFragment : GenericFragment() {
it.consume {
if (findNavController().currentDestination?.id == R.id.contactsFragment) {
// 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()
findNavController().navigate(action)
diff --git a/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsListFragment.kt b/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsListFragment.kt
index c00e59807..24a049fb1 100644
--- a/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsListFragment.kt
+++ b/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsListFragment.kt
@@ -25,13 +25,10 @@ import android.provider.ContactsContract
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
-import android.view.animation.Animation
-import android.view.animation.AnimationUtils
import androidx.annotation.UiThread
import androidx.core.content.FileProvider
import androidx.core.view.doOnPreDraw
-import androidx.navigation.fragment.findNavController
-import androidx.navigation.navGraphViewModels
+import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager
import java.io.File
import org.linphone.LinphoneApplication.Companion.coreContext
@@ -54,21 +51,11 @@ class ContactsListFragment : GenericFragment() {
private lateinit var binding: ContactsListFragmentBinding
- private val listViewModel: ContactsListViewModel by navGraphViewModels(
- R.id.contactsListFragment
- )
+ private lateinit var listViewModel: ContactsListViewModel
private lateinit var adapter: 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(
inflater: LayoutInflater,
container: ViewGroup?,
@@ -80,9 +67,12 @@ class ContactsListFragment : GenericFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
-
postponeEnterTransition()
+ listViewModel = requireActivity().run {
+ ViewModelProvider(this)[ContactsListViewModel::class.java]
+ }
+
binding.lifecycleOwner = viewLifecycleOwner
binding.viewModel = listViewModel
diff --git a/app/src/main/java/org/linphone/ui/main/contacts/fragment/EditContactFragment.kt b/app/src/main/java/org/linphone/ui/main/contacts/fragment/EditContactFragment.kt
index 5056877f9..55fe45d0b 100644
--- a/app/src/main/java/org/linphone/ui/main/contacts/fragment/EditContactFragment.kt
+++ b/app/src/main/java/org/linphone/ui/main/contacts/fragment/EditContactFragment.kt
@@ -95,12 +95,11 @@ class EditContactFragment : GenericFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
+ postponeEnterTransition()
binding.lifecycleOwner = viewLifecycleOwner
binding.viewModel = viewModel
- postponeEnterTransition()
-
val refKey = args.contactRefKey
Log.i("$TAG Looking up for contact with ref key [$refKey]")
viewModel.findFriendByRefKey(refKey)
diff --git a/app/src/main/java/org/linphone/ui/main/conversations/ConversationFragment.kt b/app/src/main/java/org/linphone/ui/main/conversations/ConversationFragment.kt
index a779a8402..a9884656d 100644
--- a/app/src/main/java/org/linphone/ui/main/conversations/ConversationFragment.kt
+++ b/app/src/main/java/org/linphone/ui/main/conversations/ConversationFragment.kt
@@ -55,6 +55,7 @@ class ConversationFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
+ postponeEnterTransition()
binding.lifecycleOwner = viewLifecycleOwner
binding.viewModel = viewModel
@@ -74,8 +75,6 @@ class ConversationFragment : Fragment() {
}
arguments?.clear()
- postponeEnterTransition()
-
adapter = ChatEventLogsListAdapter(viewLifecycleOwner)
binding.messagesList.setHasFixedSize(false)
binding.messagesList.adapter = adapter
diff --git a/app/src/main/java/org/linphone/ui/main/conversations/ConversationsFragment.kt b/app/src/main/java/org/linphone/ui/main/conversations/ConversationsFragment.kt
index 4587adb3b..51bcb6abd 100644
--- a/app/src/main/java/org/linphone/ui/main/conversations/ConversationsFragment.kt
+++ b/app/src/main/java/org/linphone/ui/main/conversations/ConversationsFragment.kt
@@ -89,12 +89,11 @@ class ConversationsFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
+ postponeEnterTransition()
binding.lifecycleOwner = viewLifecycleOwner
binding.viewModel = listViewModel
- postponeEnterTransition()
-
adapter = ConversationsListAdapter(viewLifecycleOwner)
adapter.registerAdapterDataObserver(observer)
binding.conversationsList.setHasFixedSize(true)
diff --git a/app/src/main/java/org/linphone/ui/main/conversations/NewConversationFragment.kt b/app/src/main/java/org/linphone/ui/main/conversations/NewConversationFragment.kt
index 5a41c3360..84bddfdf6 100644
--- a/app/src/main/java/org/linphone/ui/main/conversations/NewConversationFragment.kt
+++ b/app/src/main/java/org/linphone/ui/main/conversations/NewConversationFragment.kt
@@ -62,12 +62,11 @@ class NewConversationFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
+ postponeEnterTransition()
binding.lifecycleOwner = viewLifecycleOwner
binding.viewModel = viewModel
- postponeEnterTransition()
-
adapter = ContactsSelectionAdapter(viewLifecycleOwner)
binding.contactsList.adapter = adapter
binding.contactsList.setHasFixedSize(true)
diff --git a/app/src/main/java/org/linphone/ui/main/settings/fragment/AccountProfileFragment.kt b/app/src/main/java/org/linphone/ui/main/settings/fragment/AccountProfileFragment.kt
index 759efb020..559108d9f 100644
--- a/app/src/main/java/org/linphone/ui/main/settings/fragment/AccountProfileFragment.kt
+++ b/app/src/main/java/org/linphone/ui/main/settings/fragment/AccountProfileFragment.kt
@@ -68,7 +68,6 @@ class AccountProfileFragment : GenericFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
-
postponeEnterTransition()
binding.lifecycleOwner = viewLifecycleOwner
diff --git a/app/src/main/java/org/linphone/ui/main/viewmodel/SharedMainViewModel.kt b/app/src/main/java/org/linphone/ui/main/viewmodel/SharedMainViewModel.kt
index 8ea20f7c6..d5bf913f6 100644
--- a/app/src/main/java/org/linphone/ui/main/viewmodel/SharedMainViewModel.kt
+++ b/app/src/main/java/org/linphone/ui/main/viewmodel/SharedMainViewModel.kt
@@ -85,6 +85,10 @@ class SharedMainViewModel @UiThread constructor() : ViewModel() {
val callsListReadyToBeDisplayedEvent = MutableLiveData>()
+ val showStartCallEvent: MutableLiveData> by lazy {
+ MutableLiveData>()
+ }
+
val showCallLogEvent: MutableLiveData> by lazy {
MutableLiveData>()
}
diff --git a/app/src/main/res/layout-land/calls_fragment.xml b/app/src/main/res/layout-land/calls_fragment.xml
index db2a6098a..aa35c1818 100644
--- a/app/src/main/res/layout-land/calls_fragment.xml
+++ b/app/src/main/res/layout-land/calls_fragment.xml
@@ -20,21 +20,20 @@
app:layout_constraintEnd_toEndOf="parent">
+ app:layout="@layout/calls_list_fragment"/>
+ app:navGraph="@navigation/calls_nav_graph"/>
diff --git a/app/src/main/res/layout-land/calls_list_fragment.xml b/app/src/main/res/layout-land/calls_list_fragment.xml
index 5b4e3a2c5..d7e46060a 100644
--- a/app/src/main/res/layout-land/calls_list_fragment.xml
+++ b/app/src/main/res/layout-land/calls_list_fragment.xml
@@ -124,7 +124,7 @@
app:tint="@color/gray_8"
app:backgroundTint="@color/white"
app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintBottom_toTopOf="@id/bottom_nav_bar" />
+ app:layout_constraintBottom_toBottomOf="parent" />
diff --git a/app/src/main/res/layout-land/contacts_fragment.xml b/app/src/main/res/layout-land/contacts_fragment.xml
index 20ac4db42..47a7e8bf3 100644
--- a/app/src/main/res/layout-land/contacts_fragment.xml
+++ b/app/src/main/res/layout-land/contacts_fragment.xml
@@ -20,21 +20,20 @@
app:layout_constraintEnd_toEndOf="parent">
+ app:layout="@layout/contacts_list_fragment"/>
+ app:navGraph="@navigation/contacts_nav_graph"/>
diff --git a/app/src/main/res/layout/calls_fragment.xml b/app/src/main/res/layout/calls_fragment.xml
index 43a79eead..0fe891e89 100644
--- a/app/src/main/res/layout/calls_fragment.xml
+++ b/app/src/main/res/layout/calls_fragment.xml
@@ -12,21 +12,20 @@
android:layout_height="match_parent">
+ app:layout="@layout/calls_list_fragment" />
+ app:navGraph="@navigation/calls_nav_graph"/>
diff --git a/app/src/main/res/layout/contacts_fragment.xml b/app/src/main/res/layout/contacts_fragment.xml
index bfccbde59..62ffef7f3 100644
--- a/app/src/main/res/layout/contacts_fragment.xml
+++ b/app/src/main/res/layout/contacts_fragment.xml
@@ -12,21 +12,20 @@
android:layout_height="match_parent">
+ app:layout="@layout/contacts_list_fragment"/>
+ app:navGraph="@navigation/contacts_nav_graph"/>
diff --git a/app/src/main/res/navigation/calls_left_nav_graph.xml b/app/src/main/res/navigation/calls_left_nav_graph.xml
deleted file mode 100644
index 51a99d4a5..000000000
--- a/app/src/main/res/navigation/calls_left_nav_graph.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/navigation/calls_right_nav_graph.xml b/app/src/main/res/navigation/calls_nav_graph.xml
similarity index 100%
rename from app/src/main/res/navigation/calls_right_nav_graph.xml
rename to app/src/main/res/navigation/calls_nav_graph.xml
diff --git a/app/src/main/res/navigation/contact_left_nav_graph.xml b/app/src/main/res/navigation/contact_left_nav_graph.xml
deleted file mode 100644
index b4ba17b5c..000000000
--- a/app/src/main/res/navigation/contact_left_nav_graph.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/navigation/contact_right_nav_graph.xml b/app/src/main/res/navigation/contacts_nav_graph.xml
similarity index 100%
rename from app/src/main/res/navigation/contact_right_nav_graph.xml
rename to app/src/main/res/navigation/contacts_nav_graph.xml
diff --git a/app/src/main/res/navigation/main_nav_graph.xml b/app/src/main/res/navigation/main_nav_graph.xml
index ae3e50f8e..1236cbce9 100644
--- a/app/src/main/res/navigation/main_nav_graph.xml
+++ b/app/src/main/res/navigation/main_nav_graph.xml
@@ -138,4 +138,30 @@
android:id="@+id/action_global_recordingsFragment"
app:destination="@id/recordingsFragment"/>
+
+
+
+
+
+
+
+
\ No newline at end of file