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