From 64c29d495d83e0dc933b18d2616ab821f797bec2 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 22 Aug 2023 14:14:03 +0200 Subject: [PATCH] Improved switch between contacts & calls lists with postpone at parent level, added animation for account profile fragment --- .../org/linphone/ui/main/calls/fragment/CallsFragment.kt | 8 ++++++++ .../linphone/ui/main/calls/fragment/CallsListFragment.kt | 7 ++++++- .../ui/main/contacts/fragment/ContactsFragment.kt | 8 ++++++++ .../ui/main/contacts/fragment/ContactsListFragment.kt | 1 + .../ui/main/contacts/fragment/EditContactFragment.kt | 6 +++++- .../ui/main/settings/fragment/AccountProfileFragment.kt | 5 ++++- .../org/linphone/ui/main/viewmodel/SharedMainViewModel.kt | 4 ++++ app/src/main/res/navigation/main_nav_graph.xml | 6 +++++- 8 files changed, 41 insertions(+), 4 deletions(-) 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 6644153d7..42c0133a5 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 @@ -52,6 +52,14 @@ class CallsFragment : GenericFragment() { binding.lifecycleOwner = viewLifecycleOwner + postponeEnterTransition() + + sharedViewModel.callsListReadyToBeDisplayedEvent.observe(viewLifecycleOwner) { + it.consume { + startPostponedEnterTransition() + } + } + binding.root.doOnPreDraw { val slidingPane = binding.slidingPaneLayout slidingPane.lockMode = SlidingPaneLayout.LOCK_MODE_LOCKED 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 8174b5327..e9c88a481 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 @@ -31,6 +31,7 @@ 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 @@ -122,7 +123,11 @@ class CallsListFragment : GenericFragment() { listViewModel.callLogs.observe(viewLifecycleOwner) { adapter.submitList(it) - startPostponedEnterTransition() + + (view.parent as? ViewGroup)?.doOnPreDraw { + startPostponedEnterTransition() + sharedViewModel.callsListReadyToBeDisplayedEvent.value = Event(true) + } } listViewModel.historyDeletedEvent.observe(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 820b3948f..08f18f90d 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 @@ -52,6 +52,14 @@ class ContactsFragment : GenericFragment() { binding.lifecycleOwner = viewLifecycleOwner + postponeEnterTransition() + + sharedViewModel.contactsListReadyToBeDisplayedEvent.observe(viewLifecycleOwner) { + it.consume { + startPostponedEnterTransition() + } + } + binding.root.doOnPreDraw { val slidingPane = binding.slidingPaneLayout slidingPane.lockMode = SlidingPaneLayout.LOCK_MODE_LOCKED 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 689abeaba..ba87be4cc 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 @@ -98,6 +98,7 @@ class ContactsListFragment : GenericFragment() { (view.parent as? ViewGroup)?.doOnPreDraw { startPostponedEnterTransition() + sharedViewModel.contactsListReadyToBeDisplayedEvent.value = Event(true) } } 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 467acf55a..4446882f9 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 @@ -27,6 +27,7 @@ import android.view.ViewGroup import androidx.activity.result.PickVisualMediaRequest import androidx.activity.result.contract.ActivityResultContracts import androidx.annotation.UiThread +import androidx.core.view.doOnPreDraw import androidx.databinding.DataBindingUtil import androidx.databinding.ViewDataBinding import androidx.lifecycle.lifecycleScope @@ -153,7 +154,10 @@ class EditContactFragment : GenericFragment() { for (items in viewModel.phoneNumbers) { addCell(items) } - startPostponedEnterTransition() + + (view.parent as? ViewGroup)?.doOnPreDraw { + startPostponedEnterTransition() + } } } } 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 db0771d71..203979d10 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 @@ -7,6 +7,7 @@ import android.view.ViewGroup import androidx.activity.result.PickVisualMediaRequest import androidx.activity.result.contract.ActivityResultContracts import androidx.annotation.UiThread +import androidx.core.view.doOnPreDraw import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs @@ -98,7 +99,9 @@ class AccountProfileFragment : GenericFragment() { viewModel.accountFoundEvent.observe(viewLifecycleOwner) { it.consume { found -> if (found) { - startPostponedEnterTransition() + (view.parent as? ViewGroup)?.doOnPreDraw { + startPostponedEnterTransition() + } } else { Log.e( "$TAG Failed to find an account matching this identity address [$identity]" 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 0f1297adc..e8fa7cee9 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 @@ -59,6 +59,8 @@ class SharedMainViewModel @UiThread constructor() : ViewModel() { /* Contacts related */ + val contactsListReadyToBeDisplayedEvent = MutableLiveData>() + val showContactEvent: MutableLiveData> by lazy { MutableLiveData>() } @@ -71,6 +73,8 @@ class SharedMainViewModel @UiThread constructor() : ViewModel() { /* Call logs related */ + val callsListReadyToBeDisplayedEvent = MutableLiveData>() + val showCallLogEvent: MutableLiveData> by lazy { MutableLiveData>() } diff --git a/app/src/main/res/navigation/main_nav_graph.xml b/app/src/main/res/navigation/main_nav_graph.xml index 799b1a403..7676dd1e1 100644 --- a/app/src/main/res/navigation/main_nav_graph.xml +++ b/app/src/main/res/navigation/main_nav_graph.xml @@ -102,7 +102,11 @@ + app:destination="@id/accountProfileFragment" + app:enterAnim="@anim/slide_in_right" + app:exitAnim="@anim/slide_out_left" + app:popEnterAnim="@anim/slide_in_left" + app:popExitAnim="@anim/slide_out_right" />