From fd6eb30d4867d74c8e11b7be59b642500ea124af Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 7 Sep 2021 11:39:08 +0200 Subject: [PATCH] Using MaterialSharedAxis animations to properly handle directions when navigation back and forth betwen fragments + fixed multiple 'main' fragments in backstack + use viewLifecycleOwner instead of 'this' for binding lifecycle owner in fragments --- .../linphone/activities/GenericFragment.kt | 18 + .../org/linphone/activities/Navigation.kt | 346 ++++++------------ .../fragments/AccountLoginFragment.kt | 2 +- .../EchoCancellerCalibrationFragment.kt | 2 +- .../fragments/EmailAccountCreationFragment.kt | 2 +- .../EmailAccountValidationFragment.kt | 2 +- .../fragments/GenericAccountLoginFragment.kt | 2 +- .../fragments/PhoneAccountCreationFragment.kt | 2 +- .../fragments/PhoneAccountLinkingFragment.kt | 2 +- .../PhoneAccountValidationFragment.kt | 2 +- .../assistant/fragments/QrCodeFragment.kt | 2 +- .../fragments/RemoteProvisioningFragment.kt | 2 +- .../assistant/fragments/TopBarFragment.kt | 10 +- .../assistant/fragments/WelcomeFragment.kt | 2 +- .../call/fragments/ControlsFragment.kt | 3 +- .../call/fragments/StatisticsFragment.kt | 3 +- .../call/fragments/StatusFragment.kt | 3 +- .../activities/main/about/AboutFragment.kt | 2 +- .../fragments/ChatRoomCreationFragment.kt | 6 +- .../chat/fragments/DetailChatRoomFragment.kt | 9 +- .../main/chat/fragments/DevicesFragment.kt | 2 +- .../main/chat/fragments/EphemeralFragment.kt | 2 +- .../main/chat/fragments/GroupInfoFragment.kt | 2 +- .../main/chat/fragments/ImdnFragment.kt | 2 +- .../chat/fragments/MasterChatRoomsFragment.kt | 23 +- .../fragments/ContactEditorFragment.kt | 6 +- .../fragments/DetailContactFragment.kt | 10 +- .../fragments/MasterContactsFragment.kt | 30 +- .../dialer/fragments/ConfigViewerFragment.kt | 2 +- .../main/dialer/fragments/DialerFragment.kt | 28 +- .../files/fragments/AudioViewerFragment.kt | 2 +- .../files/fragments/ImageViewerFragment.kt | 2 +- .../main/files/fragments/PdfViewerFragment.kt | 2 +- .../files/fragments/TextViewerFragment.kt | 2 +- .../main/files/fragments/TopBarFragment.kt | 3 +- .../files/fragments/VideoViewerFragment.kt | 2 +- .../main/fragments/EmptyFragment.kt | 3 + .../main/fragments/ListTopBarFragment.kt | 3 +- .../main/fragments/MasterFragment.kt | 7 - .../main/fragments/StatusFragment.kt | 3 +- .../activities/main/fragments/TabsFragment.kt | 26 +- .../fragments/DetailCallLogFragment.kt | 10 +- .../fragments/MasterCallLogsFragment.kt | 24 +- .../fragments/RecordingsFragment.kt | 2 +- .../fragments/AccountSettingsFragment.kt | 13 +- .../fragments/AdvancedSettingsFragment.kt | 13 +- .../fragments/AudioSettingsFragment.kt | 15 +- .../fragments/CallSettingsFragment.kt | 13 +- .../fragments/ChatSettingsFragment.kt | 13 +- .../fragments/ContactsSettingsFragment.kt | 13 +- .../fragments/GenericSettingFragment.kt | 41 +++ .../fragments/NetworkSettingsFragment.kt | 13 +- .../settings/fragments/SettingsFragment.kt | 16 +- .../fragments/TunnelSettingsFragment.kt | 13 +- .../fragments/VideoSettingsFragment.kt | 15 +- .../sidemenu/fragments/SideMenuFragment.kt | 7 +- .../main/viewmodels/SharedMainViewModel.kt | 12 +- .../main/java/org/linphone/utils/FileUtils.kt | 4 - .../main/res/anim-land/enter_left_or_top.xml | 8 - .../res/anim-land/enter_right_or_bottom.xml | 8 - .../main/res/anim-land/exit_left_or_top.xml | 8 - .../res/anim-land/exit_right_or_bottom.xml | 8 - app/src/main/res/anim/enter_left.xml | 8 - app/src/main/res/anim/enter_left_or_top.xml | 8 - app/src/main/res/anim/enter_right.xml | 8 - .../main/res/anim/enter_right_or_bottom.xml | 8 - app/src/main/res/anim/exit_left.xml | 8 - app/src/main/res/anim/exit_left_or_top.xml | 8 - app/src/main/res/anim/exit_right.xml | 8 - .../main/res/anim/exit_right_or_bottom.xml | 8 - .../res/layout/chat_room_detail_fragment.xml | 2 +- .../res/layout/contact_detail_fragment.xml | 4 +- .../res/layout/contact_editor_fragment.xml | 5 +- .../res/layout/history_detail_fragment.xml | 4 +- .../res/layout/settings_account_fragment.xml | 4 +- .../res/layout/settings_advanced_fragment.xml | 4 +- .../res/layout/settings_audio_fragment.xml | 4 +- .../res/layout/settings_call_fragment.xml | 4 +- .../res/layout/settings_chat_fragment.xml | 4 +- .../res/layout/settings_contacts_fragment.xml | 4 +- .../res/layout/settings_network_fragment.xml | 4 +- .../res/layout/settings_tunnel_fragment.xml | 4 +- .../res/layout/settings_video_fragment.xml | 4 +- 83 files changed, 435 insertions(+), 533 deletions(-) create mode 100644 app/src/main/java/org/linphone/activities/main/settings/fragments/GenericSettingFragment.kt delete mode 100644 app/src/main/res/anim-land/enter_left_or_top.xml delete mode 100644 app/src/main/res/anim-land/enter_right_or_bottom.xml delete mode 100644 app/src/main/res/anim-land/exit_left_or_top.xml delete mode 100644 app/src/main/res/anim-land/exit_right_or_bottom.xml delete mode 100644 app/src/main/res/anim/enter_left.xml delete mode 100644 app/src/main/res/anim/enter_left_or_top.xml delete mode 100644 app/src/main/res/anim/enter_right.xml delete mode 100644 app/src/main/res/anim/enter_right_or_bottom.xml delete mode 100644 app/src/main/res/anim/exit_left.xml delete mode 100644 app/src/main/res/anim/exit_left_or_top.xml delete mode 100644 app/src/main/res/anim/exit_right.xml delete mode 100644 app/src/main/res/anim/exit_right_or_bottom.xml diff --git a/app/src/main/java/org/linphone/activities/GenericFragment.kt b/app/src/main/java/org/linphone/activities/GenericFragment.kt index a3e279c9b..6b3af71f0 100644 --- a/app/src/main/java/org/linphone/activities/GenericFragment.kt +++ b/app/src/main/java/org/linphone/activities/GenericFragment.kt @@ -25,15 +25,19 @@ import android.view.View import android.view.ViewGroup import androidx.activity.OnBackPressedCallback import androidx.activity.addCallback +import androidx.core.view.doOnPreDraw import androidx.databinding.DataBindingUtil import androidx.databinding.ViewDataBinding import androidx.fragment.app.Fragment import androidx.navigation.fragment.findNavController +import com.google.android.material.transition.MaterialSharedAxis +import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.core.tools.Log abstract class GenericFragment : Fragment() { private var _binding: T? = null protected val binding get() = _binding!! + protected var useMaterialSharedAxisXForwardAnimation = true protected val onBackPressedCallback = object : OnBackPressedCallback(true) { override fun handleOnBackPressed() { @@ -58,6 +62,20 @@ abstract class GenericFragment : Fragment() { requireActivity().onBackPressedDispatcher.addCallback(this, onBackPressedCallback) } + override fun onStart() { + super.onStart() + + if (useMaterialSharedAxisXForwardAnimation && corePreferences.enableAnimations) { + enterTransition = MaterialSharedAxis(MaterialSharedAxis.X, true) + reenterTransition = MaterialSharedAxis(MaterialSharedAxis.X, true) + returnTransition = MaterialSharedAxis(MaterialSharedAxis.X, false) + exitTransition = MaterialSharedAxis(MaterialSharedAxis.X, false) + + postponeEnterTransition() + binding.root.doOnPreDraw { startPostponedEnterTransition() } + } + } + override fun onDestroyView() { super.onDestroyView() _binding = null diff --git a/app/src/main/java/org/linphone/activities/Navigation.kt b/app/src/main/java/org/linphone/activities/Navigation.kt index 66842ccde..4f0d8058b 100644 --- a/app/src/main/java/org/linphone/activities/Navigation.kt +++ b/app/src/main/java/org/linphone/activities/Navigation.kt @@ -29,7 +29,6 @@ import androidx.navigation.findNavController import androidx.navigation.fragment.NavHostFragment import androidx.navigation.fragment.findNavController import androidx.slidingpanelayout.widget.SlidingPaneLayout -import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.R import org.linphone.activities.assistant.fragments.* import org.linphone.activities.main.MainActivity @@ -53,111 +52,6 @@ internal fun Fragment.findMasterNavController(): NavController { return parentFragment?.parentFragment?.findNavController() ?: findNavController() } -fun computeSlidingPaneNavOptions( - slidingPane: SlidingPaneLayout, - popUpTo: Int = -1, - popUpInclusive: Boolean = false, - singleTop: Boolean = true -): NavOptions { - return if (slidingPane.isSlideable) { - popupTo(popUpTo, popUpInclusive, singleTop) - } else { - getRightToLeftAnimationNavOptions(popUpTo, popUpInclusive, singleTop) - } -} - -fun getRightToLeftAnimationNavOptions( - popUpTo: Int = -1, - popUpInclusive: Boolean = false, - singleTop: Boolean = true -): NavOptions { - val builder = NavOptions.Builder() - builder.setPopUpTo(popUpTo, popUpInclusive).setLaunchSingleTop(singleTop) - if (!corePreferences.enableAnimations) return builder.build() - return builder - .setEnterAnim(R.anim.enter_right) - .setExitAnim(R.anim.exit_left) - .setPopEnterAnim(R.anim.enter_left) - .setPopExitAnim(R.anim.exit_right) - .build() -} - -fun getLeftToRightAnimationNavOptions( - popUpTo: Int = -1, - popUpInclusive: Boolean = false, - singleTop: Boolean = true -): NavOptions { - val builder = NavOptions.Builder() - builder.setPopUpTo(popUpTo, popUpInclusive).setLaunchSingleTop(singleTop) - if (!corePreferences.enableAnimations) return builder.build() - return builder - .setEnterAnim(R.anim.enter_left) - .setExitAnim(R.anim.exit_right) - .setPopEnterAnim(R.anim.enter_right) - .setPopExitAnim(R.anim.exit_left) - .build() -} - -fun getRightBottomToLeftTopAnimationNavOptions( - popUpTo: Int = -1, - popUpInclusive: Boolean = false, - singleTop: Boolean = true -): NavOptions { - val builder = NavOptions.Builder() - builder.setPopUpTo(popUpTo, popUpInclusive).setLaunchSingleTop(singleTop) - if (!corePreferences.enableAnimations) return builder.build() - return builder - .setEnterAnim(R.anim.enter_right_or_bottom) - .setExitAnim(R.anim.exit_left_or_top) - .setPopEnterAnim(R.anim.enter_left_or_top) - .setPopExitAnim(R.anim.exit_right_or_bottom) - .build() -} - -fun getLeftTopToRightBottomAnimationNavOptions( - popUpTo: Int = -1, - popUpInclusive: Boolean = false, - singleTop: Boolean = true -): NavOptions { - val builder = NavOptions.Builder() - builder.setPopUpTo(popUpTo, popUpInclusive).setLaunchSingleTop(singleTop) - if (!corePreferences.enableAnimations) return builder.build() - return builder - .setEnterAnim(R.anim.enter_left_or_top) - .setExitAnim(R.anim.exit_right_or_bottom) - .setPopEnterAnim(R.anim.enter_right_or_bottom) - .setPopExitAnim(R.anim.exit_left_or_top) - .build() -} - -fun getRightBottomToLeftTopNoPopAnimationNavOptions( - popUpTo: Int = -1, - popUpInclusive: Boolean = false, - singleTop: Boolean = true -): NavOptions { - val builder = NavOptions.Builder() - builder.setPopUpTo(popUpTo, popUpInclusive).setLaunchSingleTop(singleTop) - if (!corePreferences.enableAnimations) return builder.build() - return builder - .setEnterAnim(R.anim.enter_right_or_bottom) - .setExitAnim(R.anim.exit_left_or_top) - .build() -} - -fun getLeftTopToRightBottomNoPopAnimationNavOptions( - popUpTo: Int = -1, - popUpInclusive: Boolean = false, - singleTop: Boolean = true -): NavOptions { - val builder = NavOptions.Builder() - builder.setPopUpTo(popUpTo, popUpInclusive).setLaunchSingleTop(singleTop) - if (!corePreferences.enableAnimations) return builder.build() - return builder - .setEnterAnim(R.anim.enter_left_or_top) - .setExitAnim(R.anim.exit_right_or_bottom) - .build() -} - fun popupTo( popUpTo: Int = -1, popUpInclusive: Boolean = false, @@ -174,90 +68,62 @@ internal fun MainActivity.navigateToDialer(args: Bundle?) { findNavController(R.id.nav_host_fragment).navigate( R.id.action_global_dialerFragment, args, - getRightToLeftAnimationNavOptions(R.id.dialerFragment, true) + popupTo(R.id.dialerFragment, true) ) } /* Tabs fragment related */ internal fun TabsFragment.navigateToCallHistory() { - when (findNavController().currentDestination?.id) { - R.id.masterContactsFragment -> findNavController().navigate( - R.id.action_masterContactsFragment_to_masterCallLogsFragment, - null, - getLeftTopToRightBottomAnimationNavOptions() - ) - R.id.dialerFragment -> findNavController().navigate( - R.id.action_dialerFragment_to_masterCallLogsFragment, - null, - getLeftTopToRightBottomAnimationNavOptions() - ) - R.id.masterChatRoomsFragment -> findNavController().navigate( - R.id.action_masterChatRoomsFragment_to_masterCallLogsFragment, - null, - getLeftTopToRightBottomAnimationNavOptions() - ) + val action = when (findNavController().currentDestination?.id) { + R.id.masterContactsFragment -> R.id.action_masterContactsFragment_to_masterCallLogsFragment + R.id.dialerFragment -> R.id.action_dialerFragment_to_masterCallLogsFragment + else -> R.id.action_masterChatRoomsFragment_to_masterCallLogsFragment } + findNavController().navigate( + action, + null, + popupTo(R.id.masterCallLogsFragment, true) + ) } internal fun TabsFragment.navigateToContacts() { - when (findNavController().currentDestination?.id) { - R.id.masterCallLogsFragment -> findNavController().navigate( - R.id.action_masterCallLogsFragment_to_masterContactsFragment, - null, - getRightBottomToLeftTopAnimationNavOptions() - ) - R.id.dialerFragment -> findNavController().navigate( - R.id.action_dialerFragment_to_masterContactsFragment, - null, - getLeftTopToRightBottomAnimationNavOptions() - ) - R.id.masterChatRoomsFragment -> findNavController().navigate( - R.id.action_masterChatRoomsFragment_to_masterContactsFragment, - null, - getLeftTopToRightBottomAnimationNavOptions() - ) + val action = when (findNavController().currentDestination?.id) { + R.id.masterCallLogsFragment -> R.id.action_masterCallLogsFragment_to_masterContactsFragment + R.id.dialerFragment -> R.id.action_dialerFragment_to_masterContactsFragment + else -> R.id.action_masterChatRoomsFragment_to_masterContactsFragment } + findNavController().navigate( + action, + null, + popupTo(R.id.masterContactsFragment, true) + ) } internal fun TabsFragment.navigateToDialer() { - when (findNavController().currentDestination?.id) { - R.id.masterCallLogsFragment -> findNavController().navigate( - R.id.action_masterCallLogsFragment_to_dialerFragment, - null, - getRightBottomToLeftTopAnimationNavOptions() - ) - R.id.masterContactsFragment -> findNavController().navigate( - R.id.action_masterContactsFragment_to_dialerFragment, - null, - getRightBottomToLeftTopAnimationNavOptions() - ) - R.id.masterChatRoomsFragment -> findNavController().navigate( - R.id.action_masterChatRoomsFragment_to_dialerFragment, - null, - getLeftTopToRightBottomAnimationNavOptions() - ) + val action = when (findNavController().currentDestination?.id) { + R.id.masterCallLogsFragment -> R.id.action_masterCallLogsFragment_to_dialerFragment + R.id.masterContactsFragment -> R.id.action_masterContactsFragment_to_dialerFragment + else -> R.id.action_masterChatRoomsFragment_to_dialerFragment } + findNavController().navigate( + action, + null, + popupTo(R.id.dialerFragment, true) + ) } internal fun TabsFragment.navigateToChatRooms() { - when (findNavController().currentDestination?.id) { - R.id.masterCallLogsFragment -> findNavController().navigate( - R.id.action_masterCallLogsFragment_to_masterChatRoomsFragment, - null, - getRightBottomToLeftTopAnimationNavOptions() - ) - R.id.masterContactsFragment -> findNavController().navigate( - R.id.action_masterContactsFragment_to_masterChatRoomsFragment, - null, - getRightBottomToLeftTopAnimationNavOptions() - ) - R.id.dialerFragment -> findNavController().navigate( - R.id.action_dialerFragment_to_masterChatRoomsFragment, - null, - getRightBottomToLeftTopAnimationNavOptions() - ) + val action = when (findNavController().currentDestination?.id) { + R.id.masterCallLogsFragment -> R.id.action_masterCallLogsFragment_to_masterChatRoomsFragment + R.id.masterContactsFragment -> R.id.action_masterContactsFragment_to_masterChatRoomsFragment + else -> R.id.action_dialerFragment_to_masterChatRoomsFragment } + findNavController().navigate( + action, + null, + popupTo(R.id.masterChatRoomsFragment, true) + ) } /* Dialer related */ @@ -266,7 +132,7 @@ internal fun DialerFragment.navigateToContacts(uriToAdd: String?) { val deepLink = "linphone-android://contact/new/$uriToAdd" findNavController().navigate( Uri.parse(deepLink), - getLeftTopToRightBottomNoPopAnimationNavOptions(R.id.masterContactsFragment, true) + popupTo(R.id.masterContactsFragment, true) ) } @@ -275,7 +141,7 @@ internal fun DialerFragment.navigateToConfigFileViewer() { findMasterNavController().navigate( R.id.action_global_configViewerFragment, bundle, - getRightToLeftAnimationNavOptions() + popupTo() ) } @@ -296,7 +162,7 @@ internal fun MasterChatRoomsFragment.navigateToChatRoom( navHostFragment.navController.navigate( R.id.action_global_detailChatRoomFragment, args, - computeSlidingPaneNavOptions(slidingPane, popUpToFragmentId, true) + popupTo(popUpToFragmentId, true) ) } @@ -316,7 +182,7 @@ internal fun MasterChatRoomsFragment.navigateToChatRoomCreation( navHostFragment.navController.navigate( R.id.action_global_chatRoomCreationFragment, bundle, - computeSlidingPaneNavOptions(slidingPane, popUpToFragmentId, true) + popupTo(popUpToFragmentId, true) ) if (!slidingPane.isOpen) slidingPane.openPane() } @@ -328,14 +194,14 @@ internal fun MasterChatRoomsFragment.clearDisplayedChatRoom() { navHostFragment.navController.navigate( R.id.action_global_emptyChatFragment, null, - getLeftToRightAnimationNavOptions(R.id.emptyChatFragment, true) + popupTo(R.id.emptyChatFragment, true) ) } } internal fun DetailChatRoomFragment.navigateToContacts(sipUriToAdd: String) { val deepLink = "linphone-android://contact/new/$sipUriToAdd" - findMasterNavController().navigate(Uri.parse(deepLink), getLeftToRightAnimationNavOptions()) + findMasterNavController().navigate(Uri.parse(deepLink)) } internal fun DetailChatRoomFragment.navigateToImdn(args: Bundle?) { @@ -343,7 +209,7 @@ internal fun DetailChatRoomFragment.navigateToImdn(args: Bundle?) { findNavController().navigate( R.id.action_detailChatRoomFragment_to_imdnFragment, args, - getRightToLeftAnimationNavOptions() + popupTo() ) } } @@ -353,7 +219,7 @@ internal fun DetailChatRoomFragment.navigateToDevices() { findNavController().navigate( R.id.action_detailChatRoomFragment_to_devicesFragment, null, - getRightToLeftAnimationNavOptions() + popupTo() ) } } @@ -363,7 +229,7 @@ internal fun DetailChatRoomFragment.navigateToGroupInfo() { findNavController().navigate( R.id.action_detailChatRoomFragment_to_groupInfoFragment, null, - getRightToLeftAnimationNavOptions() + popupTo(R.id.groupInfoFragment, true) ) } } @@ -373,7 +239,7 @@ internal fun DetailChatRoomFragment.navigateToEphemeralInfo() { findNavController().navigate( R.id.action_detailChatRoomFragment_to_ephemeralFragment, null, - getRightToLeftAnimationNavOptions() + popupTo() ) } } @@ -383,7 +249,7 @@ internal fun DetailChatRoomFragment.navigateToTextFileViewer(secure: Boolean) { findMasterNavController().navigate( R.id.action_global_textViewerFragment, bundle, - getRightToLeftAnimationNavOptions() + popupTo() ) } @@ -392,7 +258,7 @@ internal fun DetailChatRoomFragment.navigateToPdfFileViewer(secure: Boolean) { findMasterNavController().navigate( R.id.action_global_pdfViewerFragment, bundle, - getRightToLeftAnimationNavOptions() + popupTo() ) } @@ -401,7 +267,7 @@ internal fun DetailChatRoomFragment.navigateToImageFileViewer(secure: Boolean) { findMasterNavController().navigate( R.id.action_global_imageViewerFragment, bundle, - getRightToLeftAnimationNavOptions() + popupTo() ) } @@ -410,7 +276,7 @@ internal fun DetailChatRoomFragment.navigateToVideoFileViewer(secure: Boolean) { findMasterNavController().navigate( R.id.action_global_videoViewerFragment, bundle, - getRightToLeftAnimationNavOptions() + popupTo() ) } @@ -419,7 +285,7 @@ internal fun DetailChatRoomFragment.navigateToAudioFileViewer(secure: Boolean) { findMasterNavController().navigate( R.id.action_global_audioViewerFragment, bundle, - getRightToLeftAnimationNavOptions() + popupTo() ) } @@ -427,7 +293,7 @@ internal fun DetailChatRoomFragment.navigateToEmptyChatRoom() { findNavController().navigate( R.id.action_global_emptyChatFragment, null, - getLeftToRightAnimationNavOptions() + popupTo(R.id.emptyChatFragment, true) ) } @@ -436,7 +302,7 @@ internal fun ChatRoomCreationFragment.navigateToGroupInfo() { findNavController().navigate( R.id.action_chatRoomCreationFragment_to_groupInfoFragment, null, - getRightToLeftAnimationNavOptions() + popupTo(R.id.groupInfoFragment, true) ) } } @@ -446,7 +312,7 @@ internal fun ChatRoomCreationFragment.navigateToChatRoom(args: Bundle) { findNavController().navigate( R.id.action_chatRoomCreationFragment_to_detailChatRoomFragment, args, - getRightToLeftAnimationNavOptions(R.id.emptyChatFragment, true) + popupTo(R.id.emptyChatFragment, true) ) } } @@ -455,7 +321,7 @@ internal fun ChatRoomCreationFragment.navigateToEmptyChatRoom() { findNavController().navigate( R.id.action_global_emptyChatFragment, null, - getLeftToRightAnimationNavOptions() + popupTo(R.id.emptyChatFragment, true) ) } @@ -464,7 +330,7 @@ internal fun GroupInfoFragment.navigateToChatRoomCreation(args: Bundle?) { findNavController().navigate( R.id.action_groupInfoFragment_to_chatRoomCreationFragment, args, - getLeftToRightAnimationNavOptions(R.id.chatRoomCreationFragment, true) + popupTo(R.id.chatRoomCreationFragment, true) ) } } @@ -474,7 +340,7 @@ internal fun GroupInfoFragment.navigateToChatRoom(args: Bundle?) { findNavController().navigate( R.id.action_groupInfoFragment_to_detailChatRoomFragment, args, - getRightToLeftAnimationNavOptions(R.id.emptyChatFragment, true) + popupTo(R.id.emptyChatFragment, true) ) } } @@ -488,7 +354,7 @@ internal fun MasterContactsFragment.navigateToContact(slidingPane: SlidingPaneLa navHostFragment.navController.navigate( R.id.action_global_detailContactFragment, null, - computeSlidingPaneNavOptions(slidingPane, R.id.emptyContactFragment, true) + popupTo(R.id.emptyContactFragment, true) ) if (!slidingPane.isOpen) slidingPane.openPane() } @@ -505,7 +371,7 @@ internal fun MasterContactsFragment.navigateToContactEditor( navHostFragment.navController.navigate( R.id.action_global_contactEditorFragment, bundle, - computeSlidingPaneNavOptions(slidingPane, R.id.emptyContactFragment, true) + popupTo(R.id.emptyContactFragment, true) ) if (!slidingPane.isOpen) slidingPane.openPane() } @@ -518,7 +384,7 @@ internal fun MasterContactsFragment.clearDisplayedContact() { navHostFragment.navController.navigate( R.id.action_global_emptyContactFragment, null, - getLeftToRightAnimationNavOptions(R.id.emptyContactFragment, true) + popupTo(R.id.emptyContactFragment, true) ) } } @@ -529,7 +395,7 @@ internal fun ContactEditorFragment.navigateToContact(contact: NativeContact) { findNavController().navigate( R.id.action_contactEditorFragment_to_detailContactFragment, bundle, - getRightToLeftAnimationNavOptions(R.id.masterContactsFragment, false) + popupTo(R.id.masterContactsFragment, false) ) } @@ -537,7 +403,7 @@ internal fun ContactEditorFragment.navigateToEmptyContact() { findNavController().navigate( R.id.action_global_emptyContactFragment, null, - getLeftToRightAnimationNavOptions() + popupTo(R.id.emptyContactFragment, true) ) } @@ -545,7 +411,7 @@ internal fun DetailContactFragment.navigateToChatRoom(args: Bundle?) { findMasterNavController().navigate( R.id.action_global_masterChatRoomsFragment, args, - getRightBottomToLeftTopAnimationNavOptions() + popupTo(R.id.masterChatRoomsFragment, true) ) } @@ -553,7 +419,7 @@ internal fun DetailContactFragment.navigateToDialer(args: Bundle?) { findMasterNavController().navigate( R.id.action_global_dialerFragment, args, - getRightToLeftAnimationNavOptions() + popupTo(R.id.dialerFragment, true) ) } @@ -562,7 +428,7 @@ internal fun DetailContactFragment.navigateToContactEditor() { findNavController().navigate( R.id.action_detailContactFragment_to_contactEditorFragment, null, - getLeftToRightAnimationNavOptions() + popupTo(R.id.contactEditorFragment, true) ) } } @@ -571,7 +437,7 @@ internal fun DetailContactFragment.navigateToEmptyContact() { findNavController().navigate( R.id.action_global_emptyContactFragment, null, - getLeftToRightAnimationNavOptions() + popupTo(R.id.emptyContactFragment, true) ) } @@ -584,7 +450,7 @@ internal fun MasterCallLogsFragment.navigateToCallHistory(slidingPane: SlidingPa navHostFragment.navController.navigate( R.id.action_global_detailCallLogFragment, null, - computeSlidingPaneNavOptions(slidingPane, R.id.emptyCallHistoryFragment, true) + popupTo(R.id.emptyCallHistoryFragment, true) ) if (!slidingPane.isOpen) slidingPane.openPane() } @@ -597,7 +463,7 @@ internal fun MasterCallLogsFragment.clearDisplayedCallHistory() { navHostFragment.navController.navigate( R.id.action_global_emptyFragment, null, - getLeftToRightAnimationNavOptions(R.id.emptyCallHistoryFragment, true) + popupTo(R.id.emptyCallHistoryFragment, true) ) } } @@ -606,23 +472,23 @@ internal fun MasterCallLogsFragment.navigateToDialer(args: Bundle?) { findNavController().navigate( R.id.action_global_dialerFragment, args, - getRightToLeftAnimationNavOptions() + popupTo(R.id.dialerFragment, true) ) } internal fun DetailCallLogFragment.navigateToContacts(sipUriToAdd: String) { val deepLink = "linphone-android://contact/new/$sipUriToAdd" - findMasterNavController().navigate(Uri.parse(deepLink), getRightToLeftAnimationNavOptions()) + findMasterNavController().navigate(Uri.parse(deepLink)) } internal fun DetailCallLogFragment.navigateToContact(contact: NativeContact) { val deepLink = "linphone-android://contact/view/${contact.nativeId}" - findMasterNavController().navigate(Uri.parse(deepLink), getRightBottomToLeftTopAnimationNavOptions()) + findMasterNavController().navigate(Uri.parse(deepLink)) } internal fun DetailCallLogFragment.navigateToFriend(friendAddress: Address) { val deepLink = "linphone-android://contact/new/${friendAddress.asStringUriOnly()}" - findMasterNavController().navigate(Uri.parse(deepLink), getRightToLeftAnimationNavOptions()) + findMasterNavController().navigate(Uri.parse(deepLink)) } internal fun DetailCallLogFragment.navigateToChatRoom(args: Bundle?) { @@ -630,7 +496,7 @@ internal fun DetailCallLogFragment.navigateToChatRoom(args: Bundle?) { findMasterNavController().navigate( R.id.action_global_masterChatRoomsFragment, args, - getRightBottomToLeftTopAnimationNavOptions() + popupTo(R.id.masterChatRoomsFragment, true) ) } } @@ -640,7 +506,7 @@ internal fun DetailCallLogFragment.navigateToDialer(args: Bundle?) { findMasterNavController().navigate( R.id.action_global_dialerFragment, args, - getRightToLeftAnimationNavOptions() + popupTo(R.id.dialerFragment, true) ) } } @@ -650,7 +516,7 @@ internal fun DetailCallLogFragment.navigateToEmptyCallHistory() { findNavController().navigate( R.id.action_global_emptyFragment, null, - getLeftToRightAnimationNavOptions() + popupTo(R.id.emptyCallHistoryFragment, true) ) } } @@ -668,7 +534,7 @@ internal fun SettingsFragment.navigateToAccountSettings( navHostFragment.navController.navigate( R.id.action_global_accountSettingsFragment, bundle, - computeSlidingPaneNavOptions(slidingPane) + popupTo(R.id.accountSettingsFragment, true) ) if (!slidingPane.isOpen) slidingPane.openPane() } @@ -681,7 +547,7 @@ internal fun SettingsFragment.navigateToTunnelSettings(slidingPane: SlidingPaneL navHostFragment.navController.navigate( R.id.action_global_tunnelSettingsFragment, null, - computeSlidingPaneNavOptions(slidingPane) + popupTo(R.id.tunnelSettingsFragment, true) ) if (!slidingPane.isOpen) slidingPane.openPane() } @@ -694,7 +560,7 @@ internal fun SettingsFragment.navigateToAudioSettings(slidingPane: SlidingPaneLa navHostFragment.navController.navigate( R.id.action_global_audioSettingsFragment, null, - computeSlidingPaneNavOptions(slidingPane) + popupTo(R.id.audioSettingsFragment, true) ) if (!slidingPane.isOpen) slidingPane.openPane() } @@ -707,7 +573,7 @@ internal fun SettingsFragment.navigateToVideoSettings(slidingPane: SlidingPaneLa navHostFragment.navController.navigate( R.id.action_global_videoSettingsFragment, null, - computeSlidingPaneNavOptions(slidingPane) + popupTo(R.id.videoSettingsFragment, true) ) if (!slidingPane.isOpen) slidingPane.openPane() } @@ -720,7 +586,7 @@ internal fun SettingsFragment.navigateToCallSettings(slidingPane: SlidingPaneLay navHostFragment.navController.navigate( R.id.action_global_callSettingsFragment, null, - computeSlidingPaneNavOptions(slidingPane) + popupTo(R.id.callSettingsFragment, true) ) if (!slidingPane.isOpen) slidingPane.openPane() } @@ -733,7 +599,7 @@ internal fun SettingsFragment.navigateToChatSettings(slidingPane: SlidingPaneLay navHostFragment.navController.navigate( R.id.action_global_chatSettingsFragment, null, - computeSlidingPaneNavOptions(slidingPane) + popupTo(R.id.chatSettingsFragment, true) ) if (!slidingPane.isOpen) slidingPane.openPane() } @@ -746,7 +612,7 @@ internal fun SettingsFragment.navigateToNetworkSettings(slidingPane: SlidingPane navHostFragment.navController.navigate( R.id.action_global_networkSettingsFragment, null, - computeSlidingPaneNavOptions(slidingPane) + popupTo(R.id.networkSettingsFragment, true) ) if (!slidingPane.isOpen) slidingPane.openPane() } @@ -759,7 +625,7 @@ internal fun SettingsFragment.navigateToContactsSettings(slidingPane: SlidingPan navHostFragment.navController.navigate( R.id.action_global_contactsSettingsFragment, null, - computeSlidingPaneNavOptions(slidingPane) + popupTo(R.id.contactsSettingsFragment, true) ) if (!slidingPane.isOpen) slidingPane.openPane() } @@ -772,7 +638,7 @@ internal fun SettingsFragment.navigateToAdvancedSettings(slidingPane: SlidingPan navHostFragment.navController.navigate( R.id.action_global_advancedSettingsFragment, null, - computeSlidingPaneNavOptions(slidingPane) + popupTo(R.id.advancedSettingsFragment, true) ) if (!slidingPane.isOpen) slidingPane.openPane() } @@ -802,7 +668,7 @@ internal fun navigateToEmptySetting(navController: NavController) { navController.navigate( R.id.action_global_emptySettingsFragment, null, - getLeftToRightAnimationNavOptions() + popupTo(R.id.emptySettingsFragment, true) ) } @@ -846,14 +712,14 @@ internal fun VideoSettingsFragment.navigateToEmptySetting() { internal fun SideMenuFragment.navigateToAccountSettings(identity: String) { val deepLink = "linphone-android://settings/$identity" - findNavController().navigate(Uri.parse(deepLink), getRightToLeftAnimationNavOptions()) + findNavController().navigate(Uri.parse(deepLink)) } internal fun SideMenuFragment.navigateToSettings() { findNavController().navigate( R.id.action_global_settingsFragment, null, - getRightToLeftAnimationNavOptions(R.id.settingsFragment) + popupTo(R.id.settingsFragment, true) ) } @@ -861,7 +727,7 @@ internal fun SideMenuFragment.navigateToAbout() { findNavController().navigate( R.id.action_global_aboutFragment, null, - getRightToLeftAnimationNavOptions(R.id.aboutFragment) + popupTo(R.id.aboutFragment, true) ) } @@ -869,7 +735,7 @@ internal fun SideMenuFragment.navigateToRecordings() { findNavController().navigate( R.id.action_global_recordingsFragment, null, - getRightToLeftAnimationNavOptions(R.id.recordingsFragment) + popupTo(R.id.recordingsFragment, true) ) } @@ -880,7 +746,7 @@ internal fun WelcomeFragment.navigateToEmailAccountCreation() { findNavController().navigate( R.id.action_welcomeFragment_to_emailAccountCreationFragment, null, - getRightToLeftAnimationNavOptions() + popupTo() ) } } @@ -890,7 +756,7 @@ internal fun WelcomeFragment.navigateToPhoneAccountCreation() { findNavController().navigate( R.id.action_welcomeFragment_to_phoneAccountCreationFragment, null, - getRightToLeftAnimationNavOptions() + popupTo() ) } } @@ -900,7 +766,7 @@ internal fun WelcomeFragment.navigateToAccountLogin() { findNavController().navigate( R.id.action_welcomeFragment_to_accountLoginFragment, null, - getRightToLeftAnimationNavOptions() + popupTo() ) } } @@ -910,7 +776,7 @@ internal fun WelcomeFragment.navigateToGenericLogin() { findNavController().navigate( R.id.action_welcomeFragment_to_genericAccountLoginFragment, null, - getRightToLeftAnimationNavOptions() + popupTo() ) } } @@ -920,7 +786,7 @@ internal fun WelcomeFragment.navigateToRemoteProvisioning() { findNavController().navigate( R.id.action_welcomeFragment_to_remoteProvisioningFragment, null, - getRightToLeftAnimationNavOptions() + popupTo() ) } } @@ -930,7 +796,7 @@ internal fun AccountLoginFragment.navigateToEchoCancellerCalibration() { findNavController().navigate( R.id.action_accountLoginFragment_to_echoCancellerCalibrationFragment, null, - getRightToLeftAnimationNavOptions() + popupTo() ) } } @@ -940,7 +806,7 @@ internal fun AccountLoginFragment.navigateToPhoneAccountValidation(args: Bundle? findNavController().navigate( R.id.action_accountLoginFragment_to_phoneAccountValidationFragment, args, - getRightToLeftAnimationNavOptions() + popupTo() ) } } @@ -950,7 +816,7 @@ internal fun GenericAccountLoginFragment.navigateToEchoCancellerCalibration() { findNavController().navigate( R.id.action_genericAccountLoginFragment_to_echoCancellerCalibrationFragment, null, - getRightToLeftAnimationNavOptions() + popupTo() ) } } @@ -960,7 +826,7 @@ internal fun RemoteProvisioningFragment.navigateToQrCode() { findNavController().navigate( R.id.action_remoteProvisioningFragment_to_qrCodeFragment, null, - getRightToLeftAnimationNavOptions() + popupTo() ) } } @@ -970,7 +836,7 @@ internal fun RemoteProvisioningFragment.navigateToEchoCancellerCalibration() { findNavController().navigate( R.id.action_remoteProvisioningFragment_to_echoCancellerCalibrationFragment, null, - getRightToLeftAnimationNavOptions() + popupTo() ) } } @@ -980,7 +846,7 @@ internal fun EmailAccountCreationFragment.navigateToEmailAccountValidation() { findNavController().navigate( R.id.action_emailAccountCreationFragment_to_emailAccountValidationFragment, null, - getRightToLeftAnimationNavOptions() + popupTo() ) } } @@ -990,7 +856,7 @@ internal fun EmailAccountValidationFragment.navigateToAccountLinking(args: Bundl findNavController().navigate( R.id.action_emailAccountValidationFragment_to_phoneAccountLinkingFragment, args, - getRightToLeftAnimationNavOptions() + popupTo() ) } } @@ -1000,7 +866,7 @@ internal fun PhoneAccountCreationFragment.navigateToPhoneAccountValidation(args: findNavController().navigate( R.id.action_phoneAccountCreationFragment_to_phoneAccountValidationFragment, args, - getRightToLeftAnimationNavOptions() + popupTo() ) } } @@ -1010,7 +876,7 @@ internal fun PhoneAccountValidationFragment.navigateToAccountSettings(args: Bund findNavController().navigate( R.id.action_phoneAccountValidationFragment_to_accountSettingsFragment, args, - getLeftToRightAnimationNavOptions(R.id.accountSettingsFragment, true) + popupTo(R.id.accountSettingsFragment, true) ) } } @@ -1020,7 +886,7 @@ internal fun PhoneAccountValidationFragment.navigateToEchoCancellerCalibration() findNavController().navigate( R.id.action_phoneAccountValidationFragment_to_echoCancellerCalibrationFragment, null, - getRightToLeftAnimationNavOptions() + popupTo() ) } } @@ -1030,7 +896,7 @@ internal fun PhoneAccountLinkingFragment.navigateToEchoCancellerCalibration() { findNavController().navigate( R.id.action_phoneAccountLinkingFragment_to_echoCancellerCalibrationFragment, null, - getRightToLeftAnimationNavOptions() + popupTo() ) } } diff --git a/app/src/main/java/org/linphone/activities/assistant/fragments/AccountLoginFragment.kt b/app/src/main/java/org/linphone/activities/assistant/fragments/AccountLoginFragment.kt index 7d24a6a03..31889298e 100644 --- a/app/src/main/java/org/linphone/activities/assistant/fragments/AccountLoginFragment.kt +++ b/app/src/main/java/org/linphone/activities/assistant/fragments/AccountLoginFragment.kt @@ -46,7 +46,7 @@ class AccountLoginFragment : AbstractPhoneFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.lifecycleOwner = this + binding.lifecycleOwner = viewLifecycleOwner sharedViewModel = requireActivity().run { ViewModelProvider(this).get(SharedAssistantViewModel::class.java) diff --git a/app/src/main/java/org/linphone/activities/assistant/fragments/RemoteProvisioningFragment.kt b/app/src/main/java/org/linphone/activities/assistant/fragments/RemoteProvisioningFragment.kt index 8d8e5d163..42b4ba124 100644 --- a/app/src/main/java/org/linphone/activities/assistant/fragments/RemoteProvisioningFragment.kt +++ b/app/src/main/java/org/linphone/activities/assistant/fragments/RemoteProvisioningFragment.kt @@ -41,7 +41,7 @@ class RemoteProvisioningFragment : GenericFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.lifecycleOwner = this + binding.lifecycleOwner = viewLifecycleOwner + useMaterialSharedAxisXForwardAnimation = false binding.setBackClickListener { goBack() @@ -43,12 +43,6 @@ class TopBarFragment : GenericFragment() { override fun goBack() { if (!findNavController().popBackStack()) { requireActivity().finish() - if (corePreferences.enableAnimations) { - requireActivity().overridePendingTransition( - R.anim.enter_left, - R.anim.exit_right - ) - } } } } diff --git a/app/src/main/java/org/linphone/activities/assistant/fragments/WelcomeFragment.kt b/app/src/main/java/org/linphone/activities/assistant/fragments/WelcomeFragment.kt index f198b517b..59cd59a4d 100644 --- a/app/src/main/java/org/linphone/activities/assistant/fragments/WelcomeFragment.kt +++ b/app/src/main/java/org/linphone/activities/assistant/fragments/WelcomeFragment.kt @@ -47,7 +47,7 @@ class WelcomeFragment : GenericFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.lifecycleOwner = this + binding.lifecycleOwner = viewLifecycleOwner viewModel = ViewModelProvider(this).get(WelcomeViewModel::class.java) binding.viewModel = viewModel diff --git a/app/src/main/java/org/linphone/activities/call/fragments/ControlsFragment.kt b/app/src/main/java/org/linphone/activities/call/fragments/ControlsFragment.kt index 2537ddde7..2641b6f9c 100644 --- a/app/src/main/java/org/linphone/activities/call/fragments/ControlsFragment.kt +++ b/app/src/main/java/org/linphone/activities/call/fragments/ControlsFragment.kt @@ -65,7 +65,8 @@ class ControlsFragment : GenericFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.lifecycleOwner = this + binding.lifecycleOwner = viewLifecycleOwner + useMaterialSharedAxisXForwardAnimation = false sharedViewModel = requireActivity().run { ViewModelProvider(this).get(SharedCallViewModel::class.java) diff --git a/app/src/main/java/org/linphone/activities/call/fragments/StatisticsFragment.kt b/app/src/main/java/org/linphone/activities/call/fragments/StatisticsFragment.kt index 81e4a7b76..cadba7321 100644 --- a/app/src/main/java/org/linphone/activities/call/fragments/StatisticsFragment.kt +++ b/app/src/main/java/org/linphone/activities/call/fragments/StatisticsFragment.kt @@ -35,7 +35,8 @@ class StatisticsFragment : GenericFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.lifecycleOwner = this + binding.lifecycleOwner = viewLifecycleOwner + useMaterialSharedAxisXForwardAnimation = false viewModel = ViewModelProvider(this).get(StatisticsListViewModel::class.java) binding.viewModel = viewModel diff --git a/app/src/main/java/org/linphone/activities/call/fragments/StatusFragment.kt b/app/src/main/java/org/linphone/activities/call/fragments/StatusFragment.kt index 7ee0f5632..7d7fd4f98 100644 --- a/app/src/main/java/org/linphone/activities/call/fragments/StatusFragment.kt +++ b/app/src/main/java/org/linphone/activities/call/fragments/StatusFragment.kt @@ -45,7 +45,8 @@ class StatusFragment : GenericFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.lifecycleOwner = this + binding.lifecycleOwner = viewLifecycleOwner + useMaterialSharedAxisXForwardAnimation = false viewModel = ViewModelProvider(this).get(StatusViewModel::class.java) binding.viewModel = viewModel diff --git a/app/src/main/java/org/linphone/activities/main/about/AboutFragment.kt b/app/src/main/java/org/linphone/activities/main/about/AboutFragment.kt index 6429185f6..6c7db9ac2 100644 --- a/app/src/main/java/org/linphone/activities/main/about/AboutFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/about/AboutFragment.kt @@ -36,7 +36,7 @@ class AboutFragment : SecureFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.lifecycleOwner = this + binding.lifecycleOwner = viewLifecycleOwner viewModel = ViewModelProvider(this).get(AboutViewModel::class.java) binding.viewModel = viewModel diff --git a/app/src/main/java/org/linphone/activities/main/chat/fragments/ChatRoomCreationFragment.kt b/app/src/main/java/org/linphone/activities/main/chat/fragments/ChatRoomCreationFragment.kt index 75fcd82e8..67bb73c45 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/fragments/ChatRoomCreationFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/fragments/ChatRoomCreationFragment.kt @@ -51,12 +51,14 @@ class ChatRoomCreationFragment : SecureFragment override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.lifecycleOwner = this + binding.lifecycleOwner = viewLifecycleOwner sharedViewModel = requireActivity().run { ViewModelProvider(this).get(SharedMainViewModel::class.java) } + useMaterialSharedAxisXForwardAnimation = sharedViewModel.isSlidingPaneSlideable.value == false + val createGroup = arguments?.getBoolean("createGroup") ?: false viewModel = ViewModelProvider(this).get(ChatRoomCreationViewModel::class.java) @@ -174,7 +176,7 @@ class ChatRoomCreationFragment : SecureFragment override fun goBack() { if (!findNavController().popBackStack()) { - if (sharedViewModel.canSlidingPaneBeClosed.value == true) { + if (sharedViewModel.isSlidingPaneSlideable.value == true) { sharedViewModel.closeSlidingPaneEvent.value = Event(true) } else { navigateToEmptyChatRoom() diff --git a/app/src/main/java/org/linphone/activities/main/chat/fragments/DetailChatRoomFragment.kt b/app/src/main/java/org/linphone/activities/main/chat/fragments/DetailChatRoomFragment.kt index d83a697fd..0c3a508ef 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/fragments/DetailChatRoomFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/fragments/DetailChatRoomFragment.kt @@ -94,13 +94,15 @@ class DetailChatRoomFragment : MasterFragment Log.i("[Chat Room] Going to contacts list with SIP URI to add: $sipUri") + sharedViewModel.updateContactsAnimationsBasedOnDestination.value = Event(R.id.masterChatRoomsFragment) navigateToContacts(sipUri) } } @@ -527,7 +530,7 @@ class DetailChatRoomFragment : MasterFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.lifecycleOwner = this + binding.lifecycleOwner = viewLifecycleOwner sharedViewModel = requireActivity().run { ViewModelProvider(this).get(SharedMainViewModel::class.java) diff --git a/app/src/main/java/org/linphone/activities/main/chat/fragments/EphemeralFragment.kt b/app/src/main/java/org/linphone/activities/main/chat/fragments/EphemeralFragment.kt index e4d41059b..a9714551e 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/fragments/EphemeralFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/fragments/EphemeralFragment.kt @@ -43,7 +43,7 @@ class EphemeralFragment : SecureFragment() { super.onViewCreated(view, savedInstanceState) isSecure = true - binding.lifecycleOwner = this + binding.lifecycleOwner = viewLifecycleOwner sharedViewModel = requireActivity().run { ViewModelProvider(this).get(SharedMainViewModel::class.java) diff --git a/app/src/main/java/org/linphone/activities/main/chat/fragments/GroupInfoFragment.kt b/app/src/main/java/org/linphone/activities/main/chat/fragments/GroupInfoFragment.kt index 144af3413..58b4dcde0 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/fragments/GroupInfoFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/fragments/GroupInfoFragment.kt @@ -54,7 +54,7 @@ class GroupInfoFragment : SecureFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.lifecycleOwner = this + binding.lifecycleOwner = viewLifecycleOwner sharedViewModel = requireActivity().run { ViewModelProvider(this).get(SharedMainViewModel::class.java) diff --git a/app/src/main/java/org/linphone/activities/main/chat/fragments/ImdnFragment.kt b/app/src/main/java/org/linphone/activities/main/chat/fragments/ImdnFragment.kt index b781a15b1..cfdd7ee38 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/fragments/ImdnFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/fragments/ImdnFragment.kt @@ -47,7 +47,7 @@ class ImdnFragment : SecureFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.lifecycleOwner = this + binding.lifecycleOwner = viewLifecycleOwner sharedViewModel = requireActivity().run { ViewModelProvider(this).get(SharedMainViewModel::class.java) diff --git a/app/src/main/java/org/linphone/activities/main/chat/fragments/MasterChatRoomsFragment.kt b/app/src/main/java/org/linphone/activities/main/chat/fragments/MasterChatRoomsFragment.kt index d08437581..201107ec7 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/fragments/MasterChatRoomsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/fragments/MasterChatRoomsFragment.kt @@ -20,6 +20,7 @@ package org.linphone.activities.main.chat.fragments import android.app.Dialog +import android.content.res.Configuration import android.os.Bundle import android.view.View import androidx.core.content.ContextCompat @@ -30,7 +31,9 @@ import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import androidx.slidingpanelayout.widget.SlidingPaneLayout +import com.google.android.material.transition.MaterialSharedAxis import org.linphone.LinphoneApplication.Companion.coreContext +import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.R import org.linphone.activities.GenericActivity import org.linphone.activities.clearDisplayedChatRoom @@ -75,11 +78,25 @@ class MasterChatRoomsFragment : MasterFragment(), S override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.lifecycleOwner = this + binding.lifecycleOwner = viewLifecycleOwner sharedViewModel = requireActivity().run { ViewModelProvider(this).get(SharedMainViewModel::class.java) @@ -70,6 +70,8 @@ class ContactEditorFragment : GenericFragment(), S )[ContactEditorViewModel::class.java] binding.viewModel = viewModel + useMaterialSharedAxisXForwardAnimation = sharedViewModel.isSlidingPaneSlideable.value == false + binding.setBackClickListener { goBack() } @@ -110,7 +112,7 @@ class ContactEditorFragment : GenericFragment(), S override fun goBack() { if (!findNavController().popBackStack()) { - if (sharedViewModel.canSlidingPaneBeClosed.value == true) { + if (sharedViewModel.isSlidingPaneSlideable.value == true) { sharedViewModel.closeSlidingPaneEvent.value = Event(true) } else { navigateToEmptyContact() diff --git a/app/src/main/java/org/linphone/activities/main/contact/fragments/DetailContactFragment.kt b/app/src/main/java/org/linphone/activities/main/contact/fragments/DetailContactFragment.kt index ea230c123..dc645da84 100644 --- a/app/src/main/java/org/linphone/activities/main/contact/fragments/DetailContactFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/contact/fragments/DetailContactFragment.kt @@ -50,13 +50,15 @@ class DetailContactFragment : GenericFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.lifecycleOwner = this + binding.lifecycleOwner = viewLifecycleOwner sharedViewModel = requireActivity().run { ViewModelProvider(this).get(SharedMainViewModel::class.java) } binding.sharedMainViewModel = sharedViewModel + useMaterialSharedAxisXForwardAnimation = sharedViewModel.isSlidingPaneSlideable.value == false + val id = arguments?.getString("id") arguments?.clear() if (id != null) { @@ -93,6 +95,9 @@ class DetailContactFragment : GenericFragment() { it.consume { address -> if (coreContext.core.callsNb > 0) { Log.i("[Contact] Starting dialer with pre-filled URI ${address.asStringUriOnly()}, is transfer? ${sharedViewModel.pendingCallTransfer}") + sharedViewModel.updateContactsAnimationsBasedOnDestination.value = Event(R.id.dialerFragment) + sharedViewModel.updateDialerAnimationsBasedOnDestination.value = Event(R.id.masterContactsFragment) + val args = Bundle() args.putString("URI", address.asStringUriOnly()) args.putBoolean("Transfer", sharedViewModel.pendingCallTransfer) @@ -109,6 +114,7 @@ class DetailContactFragment : GenericFragment() { viewLifecycleOwner, { it.consume { chatRoom -> + sharedViewModel.updateContactsAnimationsBasedOnDestination.value = Event(R.id.masterChatRoomsFragment) val args = Bundle() args.putString("LocalSipUri", chatRoom.localAddress.asStringUriOnly()) args.putString("RemoteSipUri", chatRoom.peerAddress.asStringUriOnly()) @@ -140,7 +146,7 @@ class DetailContactFragment : GenericFragment() { } override fun goBack() { - if (sharedViewModel.canSlidingPaneBeClosed.value == true) { + if (sharedViewModel.isSlidingPaneSlideable.value == true) { sharedViewModel.closeSlidingPaneEvent.value = Event(true) } else { navigateToEmptyContact() diff --git a/app/src/main/java/org/linphone/activities/main/contact/fragments/MasterContactsFragment.kt b/app/src/main/java/org/linphone/activities/main/contact/fragments/MasterContactsFragment.kt index f7af389d3..a42c3f7b3 100644 --- a/app/src/main/java/org/linphone/activities/main/contact/fragments/MasterContactsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/contact/fragments/MasterContactsFragment.kt @@ -21,6 +21,7 @@ package org.linphone.activities.main.contact.fragments import android.app.Dialog import android.content.pm.PackageManager +import android.content.res.Configuration import android.os.Bundle import android.view.View import androidx.core.content.ContextCompat @@ -31,7 +32,9 @@ import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import androidx.slidingpanelayout.widget.SlidingPaneLayout +import com.google.android.material.transition.MaterialSharedAxis import org.linphone.LinphoneApplication.Companion.coreContext +import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.R import org.linphone.activities.clearDisplayedContact import org.linphone.activities.main.MainActivity @@ -67,7 +70,7 @@ class MasterContactsFragment : MasterFragment + val forward = when (id) { + R.id.dialerFragment, R.id.masterChatRoomsFragment -> false + else -> true + } + if (corePreferences.enableAnimations) { + val portraitOrientation = resources.configuration.orientation != Configuration.ORIENTATION_LANDSCAPE + val axis = if (portraitOrientation) MaterialSharedAxis.X else MaterialSharedAxis.Y + enterTransition = MaterialSharedAxis(axis, forward) + reenterTransition = MaterialSharedAxis(axis, forward) + returnTransition = MaterialSharedAxis(axis, !forward) + exitTransition = MaterialSharedAxis(axis, !forward) + } + } + } + ) sharedViewModel.closeSlidingPaneEvent.observe( viewLifecycleOwner, @@ -94,7 +118,7 @@ class MasterContactsFragment : MasterFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.lifecycleOwner = this + binding.lifecycleOwner = viewLifecycleOwner viewModel = ViewModelProvider(this)[ConfigFileViewModel::class.java] binding.viewModel = viewModel diff --git a/app/src/main/java/org/linphone/activities/main/dialer/fragments/DialerFragment.kt b/app/src/main/java/org/linphone/activities/main/dialer/fragments/DialerFragment.kt index 9d5f0d517..be8ed2382 100644 --- a/app/src/main/java/org/linphone/activities/main/dialer/fragments/DialerFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/dialer/fragments/DialerFragment.kt @@ -24,11 +24,13 @@ import android.content.ClipData import android.content.ClipboardManager import android.content.Context import android.content.Intent +import android.content.res.Configuration import android.net.Uri import android.os.Bundle import android.view.View import androidx.lifecycle.ViewModelProvider import com.google.android.material.dialog.MaterialAlertDialogBuilder +import com.google.android.material.transition.MaterialSharedAxis import org.linphone.BuildConfig import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.corePreferences @@ -44,6 +46,7 @@ import org.linphone.core.tools.Log import org.linphone.databinding.DialerFragmentBinding import org.linphone.utils.AppUtils import org.linphone.utils.DialogUtils +import org.linphone.utils.Event class DialerFragment : SecureFragment() { private lateinit var viewModel: DialerViewModel @@ -56,7 +59,7 @@ class DialerFragment : SecureFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.lifecycleOwner = this + binding.lifecycleOwner = viewLifecycleOwner viewModel = ViewModelProvider(this).get(DialerViewModel::class.java) binding.viewModel = viewModel @@ -65,7 +68,30 @@ class DialerFragment : SecureFragment() { ViewModelProvider(this).get(SharedMainViewModel::class.java) } + useMaterialSharedAxisXForwardAnimation = false + sharedViewModel.updateDialerAnimationsBasedOnDestination.observe( + viewLifecycleOwner, + { + it.consume { id -> + val forward = when (id) { + R.id.masterChatRoomsFragment -> false + else -> true + } + if (corePreferences.enableAnimations) { + val portraitOrientation = resources.configuration.orientation != Configuration.ORIENTATION_LANDSCAPE + val axis = if (portraitOrientation) MaterialSharedAxis.X else MaterialSharedAxis.Y + enterTransition = MaterialSharedAxis(axis, forward) + reenterTransition = MaterialSharedAxis(axis, forward) + returnTransition = MaterialSharedAxis(axis, !forward) + exitTransition = MaterialSharedAxis(axis, !forward) + } + } + } + ) + binding.setNewContactClickListener { + sharedViewModel.updateDialerAnimationsBasedOnDestination.value = Event(R.id.masterContactsFragment) + sharedViewModel.updateContactsAnimationsBasedOnDestination.value = Event(R.id.dialerFragment) navigateToContacts(viewModel.enteredUri.value) } diff --git a/app/src/main/java/org/linphone/activities/main/files/fragments/AudioViewerFragment.kt b/app/src/main/java/org/linphone/activities/main/files/fragments/AudioViewerFragment.kt index 9ddf17bce..1f6877079 100644 --- a/app/src/main/java/org/linphone/activities/main/files/fragments/AudioViewerFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/files/fragments/AudioViewerFragment.kt @@ -43,7 +43,7 @@ class AudioViewerFragment : GenericViewerFragment() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.lifecycleOwner = this + binding.lifecycleOwner = viewLifecycleOwner val content = sharedViewModel.contentToOpen.value if (content == null) { diff --git a/app/src/main/java/org/linphone/activities/main/files/fragments/TextViewerFragment.kt b/app/src/main/java/org/linphone/activities/main/files/fragments/TextViewerFragment.kt index b6ec165e6..ea81e9124 100644 --- a/app/src/main/java/org/linphone/activities/main/files/fragments/TextViewerFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/files/fragments/TextViewerFragment.kt @@ -37,7 +37,7 @@ class TextViewerFragment : GenericViewerFragment( override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.lifecycleOwner = this + binding.lifecycleOwner = viewLifecycleOwner val content = sharedViewModel.contentToOpen.value if (content == null) { diff --git a/app/src/main/java/org/linphone/activities/main/files/fragments/TopBarFragment.kt b/app/src/main/java/org/linphone/activities/main/files/fragments/TopBarFragment.kt index 779f7c090..0699df0a1 100644 --- a/app/src/main/java/org/linphone/activities/main/files/fragments/TopBarFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/files/fragments/TopBarFragment.kt @@ -38,7 +38,8 @@ class TopBarFragment : GenericFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.lifecycleOwner = this + binding.lifecycleOwner = viewLifecycleOwner + useMaterialSharedAxisXForwardAnimation = false binding.setBackClickListener { goBack() diff --git a/app/src/main/java/org/linphone/activities/main/files/fragments/VideoViewerFragment.kt b/app/src/main/java/org/linphone/activities/main/files/fragments/VideoViewerFragment.kt index 861ee7bfd..f0efad396 100644 --- a/app/src/main/java/org/linphone/activities/main/files/fragments/VideoViewerFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/files/fragments/VideoViewerFragment.kt @@ -41,7 +41,7 @@ class VideoViewerFragment : GenericViewerFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.lifecycleOwner = this + binding.lifecycleOwner = viewLifecycleOwner + useMaterialSharedAxisXForwardAnimation = false viewModel = ViewModelProvider(parentFragment ?: this)[ListTopBarViewModel::class.java] binding.viewModel = viewModel diff --git a/app/src/main/java/org/linphone/activities/main/fragments/MasterFragment.kt b/app/src/main/java/org/linphone/activities/main/fragments/MasterFragment.kt index d90e55118..ea45e4f00 100644 --- a/app/src/main/java/org/linphone/activities/main/fragments/MasterFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/fragments/MasterFragment.kt @@ -22,10 +22,8 @@ package org.linphone.activities.main.fragments import android.app.Dialog import android.os.Bundle import android.view.View -import androidx.core.view.doOnPreDraw import androidx.databinding.ViewDataBinding import androidx.lifecycle.ViewModelProvider -import org.linphone.LinphoneApplication import org.linphone.R import org.linphone.activities.main.adapters.SelectionListAdapter import org.linphone.activities.main.viewmodels.DialogViewModel @@ -52,11 +50,6 @@ abstract class MasterFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.lifecycleOwner = this + binding.lifecycleOwner = viewLifecycleOwner + useMaterialSharedAxisXForwardAnimation = false viewModel = ViewModelProvider(this).get(StatusViewModel::class.java) binding.viewModel = viewModel diff --git a/app/src/main/java/org/linphone/activities/main/fragments/TabsFragment.kt b/app/src/main/java/org/linphone/activities/main/fragments/TabsFragment.kt index 34ee3932d..5edc369a1 100644 --- a/app/src/main/java/org/linphone/activities/main/fragments/TabsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/fragments/TabsFragment.kt @@ -28,22 +28,30 @@ import androidx.navigation.fragment.findNavController import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.R import org.linphone.activities.GenericFragment +import org.linphone.activities.main.viewmodels.SharedMainViewModel import org.linphone.activities.main.viewmodels.TabsViewModel import org.linphone.activities.navigateToCallHistory import org.linphone.activities.navigateToChatRooms import org.linphone.activities.navigateToContacts import org.linphone.activities.navigateToDialer import org.linphone.databinding.TabsFragmentBinding +import org.linphone.utils.Event class TabsFragment : GenericFragment(), NavController.OnDestinationChangedListener { private lateinit var viewModel: TabsViewModel + private lateinit var sharedViewModel: SharedMainViewModel override fun getLayoutId(): Int = R.layout.tabs_fragment override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.lifecycleOwner = this + binding.lifecycleOwner = viewLifecycleOwner + useMaterialSharedAxisXForwardAnimation = false + + sharedViewModel = requireActivity().run { + ViewModelProvider(this).get(SharedMainViewModel::class.java) + } viewModel = requireActivity().run { ViewModelProvider(this).get(TabsViewModel::class.java) @@ -51,18 +59,34 @@ class TabsFragment : GenericFragment(), NavController.OnDes binding.viewModel = viewModel binding.setHistoryClickListener { + when (findNavController().currentDestination?.id) { + R.id.masterContactsFragment -> sharedViewModel.updateContactsAnimationsBasedOnDestination.value = Event(R.id.masterCallLogsFragment) + R.id.dialerFragment -> sharedViewModel.updateDialerAnimationsBasedOnDestination.value = Event(R.id.masterCallLogsFragment) + } navigateToCallHistory() } binding.setContactsClickListener { + when (findNavController().currentDestination?.id) { + R.id.dialerFragment -> sharedViewModel.updateDialerAnimationsBasedOnDestination.value = Event(R.id.masterContactsFragment) + } + sharedViewModel.updateContactsAnimationsBasedOnDestination.value = Event(findNavController().currentDestination?.id ?: -1) navigateToContacts() } binding.setDialerClickListener { + when (findNavController().currentDestination?.id) { + R.id.masterContactsFragment -> sharedViewModel.updateContactsAnimationsBasedOnDestination.value = Event(R.id.dialerFragment) + } + sharedViewModel.updateDialerAnimationsBasedOnDestination.value = Event(findNavController().currentDestination?.id ?: -1) navigateToDialer() } binding.setChatClickListener { + when (findNavController().currentDestination?.id) { + R.id.masterContactsFragment -> sharedViewModel.updateContactsAnimationsBasedOnDestination.value = Event(R.id.masterChatRoomsFragment) + R.id.dialerFragment -> sharedViewModel.updateDialerAnimationsBasedOnDestination.value = Event(R.id.masterChatRoomsFragment) + } navigateToChatRooms() } } diff --git a/app/src/main/java/org/linphone/activities/main/history/fragments/DetailCallLogFragment.kt b/app/src/main/java/org/linphone/activities/main/history/fragments/DetailCallLogFragment.kt index 2592bf74d..3cb18dec7 100644 --- a/app/src/main/java/org/linphone/activities/main/history/fragments/DetailCallLogFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/history/fragments/DetailCallLogFragment.kt @@ -47,7 +47,7 @@ class DetailCallLogFragment : GenericFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.lifecycleOwner = this + binding.lifecycleOwner = viewLifecycleOwner sharedViewModel = requireActivity().run { ViewModelProvider(this).get(SharedMainViewModel::class.java) @@ -68,6 +68,8 @@ class DetailCallLogFragment : GenericFragment() { )[CallLogViewModel::class.java] binding.viewModel = viewModel + useMaterialSharedAxisXForwardAnimation = sharedViewModel.isSlidingPaneSlideable.value == false + viewModel.relatedCallLogs.value = callLogGroup.callLogs binding.setBackClickListener { @@ -78,10 +80,12 @@ class DetailCallLogFragment : GenericFragment() { val copy = viewModel.callLog.remoteAddress.clone() copy.clean() Log.i("[History] Creating contact with SIP URI: ${copy.asStringUriOnly()}") + sharedViewModel.updateContactsAnimationsBasedOnDestination.value = Event(R.id.masterCallLogsFragment) navigateToContacts(copy.asStringUriOnly()) } binding.setContactClickListener { + sharedViewModel.updateContactsAnimationsBasedOnDestination.value = Event(R.id.masterCallLogsFragment) val contact = viewModel.contact.value as? NativeContact if (contact != null) { Log.i("[History] Displaying contact $contact") @@ -101,6 +105,8 @@ class DetailCallLogFragment : GenericFragment() { val address = callLog.remoteAddress if (coreContext.core.callsNb > 0) { Log.i("[History] Starting dialer with pre-filled URI ${address.asStringUriOnly()}, is transfer? ${sharedViewModel.pendingCallTransfer}") + sharedViewModel.updateDialerAnimationsBasedOnDestination.value = Event(R.id.masterCallLogsFragment) + val args = Bundle() args.putString("URI", address.asStringUriOnly()) args.putBoolean("Transfer", sharedViewModel.pendingCallTransfer) @@ -140,7 +146,7 @@ class DetailCallLogFragment : GenericFragment() { } override fun goBack() { - if (sharedViewModel.canSlidingPaneBeClosed.value == true) { + if (sharedViewModel.isSlidingPaneSlideable.value == true) { sharedViewModel.closeSlidingPaneEvent.value = Event(true) } else { navigateToEmptyCallHistory() diff --git a/app/src/main/java/org/linphone/activities/main/history/fragments/MasterCallLogsFragment.kt b/app/src/main/java/org/linphone/activities/main/history/fragments/MasterCallLogsFragment.kt index bc281e2ad..1ca2ecd1a 100644 --- a/app/src/main/java/org/linphone/activities/main/history/fragments/MasterCallLogsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/history/fragments/MasterCallLogsFragment.kt @@ -20,6 +20,7 @@ package org.linphone.activities.main.history.fragments import android.app.Dialog +import android.content.res.Configuration import android.os.Bundle import android.view.View import androidx.core.content.ContextCompat @@ -30,7 +31,9 @@ import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import androidx.slidingpanelayout.widget.SlidingPaneLayout +import com.google.android.material.transition.MaterialSharedAxis import org.linphone.LinphoneApplication.Companion.coreContext +import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.R import org.linphone.activities.clearDisplayedCallHistory import org.linphone.activities.main.fragments.MasterFragment @@ -67,10 +70,24 @@ class MasterCallLogsFragment : MasterFragment 0) { Log.i("[History] Starting dialer with pre-filled URI ${remoteAddress.asStringUriOnly()}, is transfer? ${sharedViewModel.pendingCallTransfer}") + sharedViewModel.updateDialerAnimationsBasedOnDestination.value = Event(R.id.masterCallLogsFragment) val args = Bundle() args.putString("URI", remoteAddress.asStringUriOnly()) args.putBoolean("Transfer", sharedViewModel.pendingCallTransfer) diff --git a/app/src/main/java/org/linphone/activities/main/recordings/fragments/RecordingsFragment.kt b/app/src/main/java/org/linphone/activities/main/recordings/fragments/RecordingsFragment.kt index 6d9da0a10..d9e66eb6e 100644 --- a/app/src/main/java/org/linphone/activities/main/recordings/fragments/RecordingsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/recordings/fragments/RecordingsFragment.kt @@ -49,7 +49,7 @@ class RecordingsFragment : MasterFragment() { - private lateinit var sharedViewModel: SharedMainViewModel +class AccountSettingsFragment : GenericSettingFragment() { private lateinit var viewModel: AccountSettingsViewModel override fun getLayoutId(): Int = R.layout.settings_account_fragment @@ -42,11 +39,7 @@ class AccountSettingsFragment : GenericFragment( override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.lifecycleOwner = this - - sharedViewModel = requireActivity().run { - ViewModelProvider(this).get(SharedMainViewModel::class.java) - } + binding.lifecycleOwner = viewLifecycleOwner binding.sharedMainViewModel = sharedViewModel val identity = arguments?.getString("Identity") @@ -100,7 +93,7 @@ class AccountSettingsFragment : GenericFragment( } override fun goBack() { - if (sharedViewModel.canSlidingPaneBeClosed.value == true) { + if (sharedViewModel.isSlidingPaneSlideable.value == true) { sharedViewModel.closeSlidingPaneEvent.value = Event(true) } else { navigateToEmptySetting() diff --git a/app/src/main/java/org/linphone/activities/main/settings/fragments/AdvancedSettingsFragment.kt b/app/src/main/java/org/linphone/activities/main/settings/fragments/AdvancedSettingsFragment.kt index dbf2ab0f8..71f70b687 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/fragments/AdvancedSettingsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/fragments/AdvancedSettingsFragment.kt @@ -28,10 +28,8 @@ import androidx.appcompat.app.AppCompatDelegate import androidx.core.content.ContextCompat import androidx.lifecycle.ViewModelProvider import org.linphone.R -import org.linphone.activities.GenericFragment import org.linphone.activities.main.MainActivity import org.linphone.activities.main.settings.viewmodels.AdvancedSettingsViewModel -import org.linphone.activities.main.viewmodels.SharedMainViewModel import org.linphone.activities.navigateToEmptySetting import org.linphone.core.tools.Log import org.linphone.core.tools.compatibility.DeviceUtils @@ -40,8 +38,7 @@ import org.linphone.utils.AppUtils import org.linphone.utils.Event import org.linphone.utils.PowerManagerUtils -class AdvancedSettingsFragment : GenericFragment() { - private lateinit var sharedViewModel: SharedMainViewModel +class AdvancedSettingsFragment : GenericSettingFragment() { private lateinit var viewModel: AdvancedSettingsViewModel override fun getLayoutId(): Int = R.layout.settings_advanced_fragment @@ -49,11 +46,7 @@ class AdvancedSettingsFragment : GenericFragment() { - private lateinit var sharedViewModel: SharedMainViewModel +class AudioSettingsFragment : GenericSettingFragment() { private lateinit var viewModel: AudioSettingsViewModel override fun getLayoutId(): Int = R.layout.settings_audio_fragment @@ -48,11 +45,7 @@ class AudioSettingsFragment : GenericFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.lifecycleOwner = this - - sharedViewModel = requireActivity().run { - ViewModelProvider(this).get(SharedMainViewModel::class.java) - } + binding.lifecycleOwner = viewLifecycleOwner binding.sharedMainViewModel = sharedViewModel viewModel = ViewModelProvider(this).get(AudioSettingsViewModel::class.java) @@ -121,14 +114,14 @@ class AudioSettingsFragment : GenericFragment() { } } ) - binding.lifecycleOwner = this + binding.lifecycleOwner = viewLifecycleOwner list.add(binding) } viewModel.audioCodecs.value = list } override fun goBack() { - if (sharedViewModel.canSlidingPaneBeClosed.value == true) { + if (sharedViewModel.isSlidingPaneSlideable.value == true) { sharedViewModel.closeSlidingPaneEvent.value = Event(true) } else { navigateToEmptySetting() diff --git a/app/src/main/java/org/linphone/activities/main/settings/fragments/CallSettingsFragment.kt b/app/src/main/java/org/linphone/activities/main/settings/fragments/CallSettingsFragment.kt index 500b70b28..61b4d0a73 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/fragments/CallSettingsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/fragments/CallSettingsFragment.kt @@ -27,17 +27,14 @@ import android.provider.Settings import android.view.View import androidx.lifecycle.ViewModelProvider import org.linphone.R -import org.linphone.activities.GenericFragment import org.linphone.activities.main.settings.viewmodels.CallSettingsViewModel -import org.linphone.activities.main.viewmodels.SharedMainViewModel import org.linphone.activities.navigateToEmptySetting import org.linphone.compatibility.Compatibility import org.linphone.databinding.SettingsCallFragmentBinding import org.linphone.mediastream.Version import org.linphone.utils.Event -class CallSettingsFragment : GenericFragment() { - private lateinit var sharedViewModel: SharedMainViewModel +class CallSettingsFragment : GenericSettingFragment() { private lateinit var viewModel: CallSettingsViewModel override fun getLayoutId(): Int = R.layout.settings_call_fragment @@ -45,11 +42,7 @@ class CallSettingsFragment : GenericFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.lifecycleOwner = this - - sharedViewModel = requireActivity().run { - ViewModelProvider(this).get(SharedMainViewModel::class.java) - } + binding.lifecycleOwner = viewLifecycleOwner binding.sharedMainViewModel = sharedViewModel viewModel = ViewModelProvider(this).get(CallSettingsViewModel::class.java) @@ -101,7 +94,7 @@ class CallSettingsFragment : GenericFragment() { } override fun goBack() { - if (sharedViewModel.canSlidingPaneBeClosed.value == true) { + if (sharedViewModel.isSlidingPaneSlideable.value == true) { sharedViewModel.closeSlidingPaneEvent.value = Event(true) } else { navigateToEmptySetting() diff --git a/app/src/main/java/org/linphone/activities/main/settings/fragments/ChatSettingsFragment.kt b/app/src/main/java/org/linphone/activities/main/settings/fragments/ChatSettingsFragment.kt index a44b3c546..501a5f9bb 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/fragments/ChatSettingsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/fragments/ChatSettingsFragment.kt @@ -26,17 +26,14 @@ import android.provider.Settings import android.view.View import androidx.lifecycle.ViewModelProvider import org.linphone.R -import org.linphone.activities.GenericFragment import org.linphone.activities.main.settings.viewmodels.ChatSettingsViewModel -import org.linphone.activities.main.viewmodels.SharedMainViewModel import org.linphone.activities.navigateToEmptySetting import org.linphone.compatibility.Compatibility import org.linphone.databinding.SettingsChatFragmentBinding import org.linphone.mediastream.Version import org.linphone.utils.Event -class ChatSettingsFragment : GenericFragment() { - private lateinit var sharedViewModel: SharedMainViewModel +class ChatSettingsFragment : GenericSettingFragment() { private lateinit var viewModel: ChatSettingsViewModel override fun getLayoutId(): Int = R.layout.settings_chat_fragment @@ -44,11 +41,7 @@ class ChatSettingsFragment : GenericFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.lifecycleOwner = this - - sharedViewModel = requireActivity().run { - ViewModelProvider(this).get(SharedMainViewModel::class.java) - } + binding.lifecycleOwner = viewLifecycleOwner binding.sharedMainViewModel = sharedViewModel viewModel = ViewModelProvider(this).get(ChatSettingsViewModel::class.java) @@ -93,7 +86,7 @@ class ChatSettingsFragment : GenericFragment() { } override fun goBack() { - if (sharedViewModel.canSlidingPaneBeClosed.value == true) { + if (sharedViewModel.isSlidingPaneSlideable.value == true) { sharedViewModel.closeSlidingPaneEvent.value = Event(true) } else { navigateToEmptySetting() diff --git a/app/src/main/java/org/linphone/activities/main/settings/fragments/ContactsSettingsFragment.kt b/app/src/main/java/org/linphone/activities/main/settings/fragments/ContactsSettingsFragment.kt index 6a71024aa..8a9047e87 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/fragments/ContactsSettingsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/fragments/ContactsSettingsFragment.kt @@ -26,9 +26,7 @@ import androidx.lifecycle.ViewModelProvider import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.R -import org.linphone.activities.GenericFragment import org.linphone.activities.main.settings.viewmodels.ContactsSettingsViewModel -import org.linphone.activities.main.viewmodels.SharedMainViewModel import org.linphone.activities.navigateToEmptySetting import org.linphone.compatibility.Compatibility import org.linphone.core.tools.Log @@ -36,8 +34,7 @@ import org.linphone.databinding.SettingsContactsFragmentBinding import org.linphone.utils.Event import org.linphone.utils.PermissionHelper -class ContactsSettingsFragment : GenericFragment() { - private lateinit var sharedViewModel: SharedMainViewModel +class ContactsSettingsFragment : GenericSettingFragment() { private lateinit var viewModel: ContactsSettingsViewModel override fun getLayoutId(): Int = R.layout.settings_contacts_fragment @@ -45,11 +42,7 @@ class ContactsSettingsFragment : GenericFragment. + */ +package org.linphone.activities.main.settings.fragments + +import android.os.Bundle +import android.view.View +import androidx.databinding.ViewDataBinding +import androidx.lifecycle.ViewModelProvider +import org.linphone.activities.GenericFragment +import org.linphone.activities.main.viewmodels.SharedMainViewModel + +abstract class GenericSettingFragment : GenericFragment() { + protected lateinit var sharedViewModel: SharedMainViewModel + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + sharedViewModel = requireActivity().run { + ViewModelProvider(this).get(SharedMainViewModel::class.java) + } + + useMaterialSharedAxisXForwardAnimation = sharedViewModel.isSlidingPaneSlideable.value == false + + super.onViewCreated(view, savedInstanceState) + } +} diff --git a/app/src/main/java/org/linphone/activities/main/settings/fragments/NetworkSettingsFragment.kt b/app/src/main/java/org/linphone/activities/main/settings/fragments/NetworkSettingsFragment.kt index 9c1872b55..3809c5f23 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/fragments/NetworkSettingsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/fragments/NetworkSettingsFragment.kt @@ -23,15 +23,12 @@ import android.os.Bundle import android.view.View import androidx.lifecycle.ViewModelProvider import org.linphone.R -import org.linphone.activities.GenericFragment import org.linphone.activities.main.settings.viewmodels.NetworkSettingsViewModel -import org.linphone.activities.main.viewmodels.SharedMainViewModel import org.linphone.activities.navigateToEmptySetting import org.linphone.databinding.SettingsNetworkFragmentBinding import org.linphone.utils.Event -class NetworkSettingsFragment : GenericFragment() { - private lateinit var sharedViewModel: SharedMainViewModel +class NetworkSettingsFragment : GenericSettingFragment() { private lateinit var viewModel: NetworkSettingsViewModel override fun getLayoutId(): Int = R.layout.settings_network_fragment @@ -39,11 +36,7 @@ class NetworkSettingsFragment : GenericFragment( override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.lifecycleOwner = this - - sharedViewModel = requireActivity().run { - ViewModelProvider(this).get(SharedMainViewModel::class.java) - } + binding.lifecycleOwner = viewLifecycleOwner binding.sharedMainViewModel = sharedViewModel viewModel = ViewModelProvider(this).get(NetworkSettingsViewModel::class.java) @@ -53,7 +46,7 @@ class NetworkSettingsFragment : GenericFragment( } override fun goBack() { - if (sharedViewModel.canSlidingPaneBeClosed.value == true) { + if (sharedViewModel.isSlidingPaneSlideable.value == true) { sharedViewModel.closeSlidingPaneEvent.value = Event(true) } else { navigateToEmptySetting() diff --git a/app/src/main/java/org/linphone/activities/main/settings/fragments/SettingsFragment.kt b/app/src/main/java/org/linphone/activities/main/settings/fragments/SettingsFragment.kt index 132594fa8..d887db87e 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/fragments/SettingsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/fragments/SettingsFragment.kt @@ -25,6 +25,8 @@ import androidx.core.view.doOnPreDraw import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.NavHostFragment import androidx.slidingpanelayout.widget.SlidingPaneLayout +import com.google.android.material.transition.MaterialSharedAxis +import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.R import org.linphone.activities.* import org.linphone.activities.main.fragments.SecureFragment @@ -47,7 +49,15 @@ class SettingsFragment : SecureFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.lifecycleOwner = this + binding.lifecycleOwner = viewLifecycleOwner + + useMaterialSharedAxisXForwardAnimation = false + if (corePreferences.enableAnimations) { + enterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true) + reenterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true) + returnTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false) + exitTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false) + } /* Shared view model & sliding pane related */ @@ -55,7 +65,7 @@ class SettingsFragment : SecureFragment() { ViewModelProvider(this).get(SharedMainViewModel::class.java) } - view.doOnPreDraw { sharedViewModel.canSlidingPaneBeClosed.value = binding.slidingPane.isSlideable } + view.doOnPreDraw { sharedViewModel.isSlidingPaneSlideable.value = binding.slidingPane.isSlideable } sharedViewModel.closeSlidingPaneEvent.observe( viewLifecycleOwner, @@ -71,7 +81,7 @@ class SettingsFragment : SecureFragment() { viewLifecycleOwner, { it.consume { - sharedViewModel.canSlidingPaneBeClosed.value = binding.slidingPane.isSlideable + sharedViewModel.isSlidingPaneSlideable.value = binding.slidingPane.isSlideable if (binding.slidingPane.isSlideable) { val navHostFragment = childFragmentManager.findFragmentById(R.id.settings_nav_container) as NavHostFragment if (navHostFragment.navController.currentDestination?.id == R.id.emptySettingsFragment) { diff --git a/app/src/main/java/org/linphone/activities/main/settings/fragments/TunnelSettingsFragment.kt b/app/src/main/java/org/linphone/activities/main/settings/fragments/TunnelSettingsFragment.kt index cd7bf5941..779e81dbe 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/fragments/TunnelSettingsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/fragments/TunnelSettingsFragment.kt @@ -23,15 +23,12 @@ import android.os.Bundle import android.view.View import androidx.lifecycle.ViewModelProvider import org.linphone.R -import org.linphone.activities.GenericFragment import org.linphone.activities.main.settings.viewmodels.TunnelSettingsViewModel -import org.linphone.activities.main.viewmodels.SharedMainViewModel import org.linphone.activities.navigateToEmptySetting import org.linphone.databinding.SettingsTunnelFragmentBinding import org.linphone.utils.Event -class TunnelSettingsFragment : GenericFragment() { - private lateinit var sharedViewModel: SharedMainViewModel +class TunnelSettingsFragment : GenericSettingFragment() { private lateinit var viewModel: TunnelSettingsViewModel override fun getLayoutId(): Int = R.layout.settings_tunnel_fragment @@ -39,11 +36,7 @@ class TunnelSettingsFragment : GenericFragment() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.lifecycleOwner = this - - sharedViewModel = requireActivity().run { - ViewModelProvider(this).get(SharedMainViewModel::class.java) - } + binding.lifecycleOwner = viewLifecycleOwner binding.sharedMainViewModel = sharedViewModel viewModel = ViewModelProvider(this).get(TunnelSettingsViewModel::class.java) @@ -53,7 +46,7 @@ class TunnelSettingsFragment : GenericFragment() } override fun goBack() { - if (sharedViewModel.canSlidingPaneBeClosed.value == true) { + if (sharedViewModel.isSlidingPaneSlideable.value == true) { sharedViewModel.closeSlidingPaneEvent.value = Event(true) } else { navigateToEmptySetting() diff --git a/app/src/main/java/org/linphone/activities/main/settings/fragments/VideoSettingsFragment.kt b/app/src/main/java/org/linphone/activities/main/settings/fragments/VideoSettingsFragment.kt index 7dee3d217..549a9568b 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/fragments/VideoSettingsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/fragments/VideoSettingsFragment.kt @@ -29,18 +29,15 @@ import androidx.lifecycle.ViewModelProvider import org.linphone.BR import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.R -import org.linphone.activities.GenericFragment import org.linphone.activities.main.settings.SettingListenerStub import org.linphone.activities.main.settings.viewmodels.VideoSettingsViewModel -import org.linphone.activities.main.viewmodels.SharedMainViewModel import org.linphone.activities.navigateToEmptySetting import org.linphone.core.tools.Log import org.linphone.databinding.SettingsVideoFragmentBinding import org.linphone.utils.Event import org.linphone.utils.PermissionHelper -class VideoSettingsFragment : GenericFragment() { - private lateinit var sharedViewModel: SharedMainViewModel +class VideoSettingsFragment : GenericSettingFragment() { private lateinit var viewModel: VideoSettingsViewModel override fun getLayoutId(): Int = R.layout.settings_video_fragment @@ -48,11 +45,7 @@ class VideoSettingsFragment : GenericFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.lifecycleOwner = this - - sharedViewModel = requireActivity().run { - ViewModelProvider(this).get(SharedMainViewModel::class.java) - } + binding.lifecycleOwner = viewLifecycleOwner binding.sharedMainViewModel = sharedViewModel viewModel = ViewModelProvider(this).get(VideoSettingsViewModel::class.java) @@ -105,14 +98,14 @@ class VideoSettingsFragment : GenericFragment() { } } ) - binding.lifecycleOwner = this + binding.lifecycleOwner = viewLifecycleOwner list.add(binding) } viewModel.videoCodecs.value = list } override fun goBack() { - if (sharedViewModel.canSlidingPaneBeClosed.value == true) { + if (sharedViewModel.isSlidingPaneSlideable.value == true) { sharedViewModel.closeSlidingPaneEvent.value = Event(true) } else { navigateToEmptySetting() diff --git a/app/src/main/java/org/linphone/activities/main/sidemenu/fragments/SideMenuFragment.kt b/app/src/main/java/org/linphone/activities/main/sidemenu/fragments/SideMenuFragment.kt index d0668e343..c4049d98f 100644 --- a/app/src/main/java/org/linphone/activities/main/sidemenu/fragments/SideMenuFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/sidemenu/fragments/SideMenuFragment.kt @@ -31,7 +31,6 @@ import androidx.lifecycle.lifecycleScope import java.io.File import kotlinx.coroutines.launch import org.linphone.LinphoneApplication.Companion.coreContext -import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.R import org.linphone.activities.GenericFragment import org.linphone.activities.assistant.AssistantActivity @@ -58,7 +57,7 @@ class SideMenuFragment : GenericFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.lifecycleOwner = this + binding.lifecycleOwner = viewLifecycleOwner viewModel = ViewModelProvider(this).get(SideMenuViewModel::class.java) binding.viewModel = viewModel @@ -93,10 +92,6 @@ class SideMenuFragment : GenericFragment() { binding.setAssistantClickListener { sharedViewModel.toggleDrawerEvent.value = Event(true) startActivity(Intent(context, AssistantActivity::class.java)) - - if (corePreferences.enableAnimations) { - requireActivity().overridePendingTransition(R.anim.enter_right, R.anim.exit_left) - } } binding.setSettingsClickListener { diff --git a/app/src/main/java/org/linphone/activities/main/viewmodels/SharedMainViewModel.kt b/app/src/main/java/org/linphone/activities/main/viewmodels/SharedMainViewModel.kt index c0be7e92e..2625f8f23 100644 --- a/app/src/main/java/org/linphone/activities/main/viewmodels/SharedMainViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/viewmodels/SharedMainViewModel.kt @@ -30,7 +30,7 @@ class SharedMainViewModel : ViewModel() { val toggleDrawerEvent = MutableLiveData>() val layoutChangedEvent = MutableLiveData>() - var canSlidingPaneBeClosed = MutableLiveData() + var isSlidingPaneSlideable = MutableLiveData() val closeSlidingPaneEvent = MutableLiveData>() /* Call history */ @@ -70,6 +70,11 @@ class SharedMainViewModel : ViewModel() { val selectedContact = MutableLiveData() + // For correct animations directions + val updateContactsAnimationsBasedOnDestination: MutableLiveData> by lazy { + MutableLiveData>() + } + /* Accounts */ val accountRemoved = MutableLiveData() @@ -81,4 +86,9 @@ class SharedMainViewModel : ViewModel() { /* Dialer */ var dialerUri: String = "" + + // For correct animations directions + val updateDialerAnimationsBasedOnDestination: MutableLiveData> by lazy { + MutableLiveData>() + } } diff --git a/app/src/main/java/org/linphone/utils/FileUtils.kt b/app/src/main/java/org/linphone/utils/FileUtils.kt index 96a7ed511..e9536c5b7 100644 --- a/app/src/main/java/org/linphone/utils/FileUtils.kt +++ b/app/src/main/java/org/linphone/utils/FileUtils.kt @@ -36,7 +36,6 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.async import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.withContext -import org.linphone.LinphoneApplication import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.R import org.linphone.core.tools.Log @@ -465,9 +464,6 @@ class FileUtils { try { activity.startActivity(intent) - if (LinphoneApplication.corePreferences.enableAnimations) { - activity.overridePendingTransition(R.anim.enter_right, R.anim.exit_left) - } return true } catch (anfe: ActivityNotFoundException) { Log.e("[File Viewer] Can't open file in third party app: $anfe") diff --git a/app/src/main/res/anim-land/enter_left_or_top.xml b/app/src/main/res/anim-land/enter_left_or_top.xml deleted file mode 100644 index 1aa9733f1..000000000 --- a/app/src/main/res/anim-land/enter_left_or_top.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - diff --git a/app/src/main/res/anim-land/enter_right_or_bottom.xml b/app/src/main/res/anim-land/enter_right_or_bottom.xml deleted file mode 100644 index 9b5dd946e..000000000 --- a/app/src/main/res/anim-land/enter_right_or_bottom.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - diff --git a/app/src/main/res/anim-land/exit_left_or_top.xml b/app/src/main/res/anim-land/exit_left_or_top.xml deleted file mode 100644 index deb8fdf2a..000000000 --- a/app/src/main/res/anim-land/exit_left_or_top.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - diff --git a/app/src/main/res/anim-land/exit_right_or_bottom.xml b/app/src/main/res/anim-land/exit_right_or_bottom.xml deleted file mode 100644 index f11f548c6..000000000 --- a/app/src/main/res/anim-land/exit_right_or_bottom.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - diff --git a/app/src/main/res/anim/enter_left.xml b/app/src/main/res/anim/enter_left.xml deleted file mode 100644 index 0826b75d8..000000000 --- a/app/src/main/res/anim/enter_left.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - diff --git a/app/src/main/res/anim/enter_left_or_top.xml b/app/src/main/res/anim/enter_left_or_top.xml deleted file mode 100644 index 0826b75d8..000000000 --- a/app/src/main/res/anim/enter_left_or_top.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - diff --git a/app/src/main/res/anim/enter_right.xml b/app/src/main/res/anim/enter_right.xml deleted file mode 100644 index d424f42c5..000000000 --- a/app/src/main/res/anim/enter_right.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - diff --git a/app/src/main/res/anim/enter_right_or_bottom.xml b/app/src/main/res/anim/enter_right_or_bottom.xml deleted file mode 100644 index d424f42c5..000000000 --- a/app/src/main/res/anim/enter_right_or_bottom.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - diff --git a/app/src/main/res/anim/exit_left.xml b/app/src/main/res/anim/exit_left.xml deleted file mode 100644 index 9c2ad0505..000000000 --- a/app/src/main/res/anim/exit_left.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - diff --git a/app/src/main/res/anim/exit_left_or_top.xml b/app/src/main/res/anim/exit_left_or_top.xml deleted file mode 100644 index 9c2ad0505..000000000 --- a/app/src/main/res/anim/exit_left_or_top.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - diff --git a/app/src/main/res/anim/exit_right.xml b/app/src/main/res/anim/exit_right.xml deleted file mode 100644 index 7becffdd5..000000000 --- a/app/src/main/res/anim/exit_right.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - diff --git a/app/src/main/res/anim/exit_right_or_bottom.xml b/app/src/main/res/anim/exit_right_or_bottom.xml deleted file mode 100644 index 7becffdd5..000000000 --- a/app/src/main/res/anim/exit_right_or_bottom.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - diff --git a/app/src/main/res/layout/chat_room_detail_fragment.xml b/app/src/main/res/layout/chat_room_detail_fragment.xml index 28b602fff..431c40baa 100644 --- a/app/src/main/res/layout/chat_room_detail_fragment.xml +++ b/app/src/main/res/layout/chat_room_detail_fragment.xml @@ -53,7 +53,7 @@ android:id="@+id/back" android:contentDescription="@string/content_description_go_back" android:onClick="@{backClickListener}" - android:visibility="@{sharedMainViewModel.canSlidingPaneBeClosed ? View.VISIBLE : View.GONE}" + android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="0.2" diff --git a/app/src/main/res/layout/contact_detail_fragment.xml b/app/src/main/res/layout/contact_detail_fragment.xml index 0e26c8c39..56a26aa3d 100644 --- a/app/src/main/res/layout/contact_detail_fragment.xml +++ b/app/src/main/res/layout/contact_detail_fragment.xml @@ -36,7 +36,7 @@ diff --git a/app/src/main/res/layout/history_detail_fragment.xml b/app/src/main/res/layout/history_detail_fragment.xml index 106672939..4654fcd8e 100644 --- a/app/src/main/res/layout/history_detail_fragment.xml +++ b/app/src/main/res/layout/history_detail_fragment.xml @@ -36,7 +36,7 @@ + android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.INVISIBLE : View.GONE}" /> diff --git a/app/src/main/res/layout/settings_advanced_fragment.xml b/app/src/main/res/layout/settings_advanced_fragment.xml index 5c56407b0..5f95b0ae6 100644 --- a/app/src/main/res/layout/settings_advanced_fragment.xml +++ b/app/src/main/res/layout/settings_advanced_fragment.xml @@ -31,7 +31,7 @@ + android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.INVISIBLE : View.GONE}" /> diff --git a/app/src/main/res/layout/settings_audio_fragment.xml b/app/src/main/res/layout/settings_audio_fragment.xml index 30c9214fb..ef34b864e 100644 --- a/app/src/main/res/layout/settings_audio_fragment.xml +++ b/app/src/main/res/layout/settings_audio_fragment.xml @@ -31,7 +31,7 @@ + android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.INVISIBLE : View.GONE}" /> diff --git a/app/src/main/res/layout/settings_call_fragment.xml b/app/src/main/res/layout/settings_call_fragment.xml index 05be8be1e..454afce09 100644 --- a/app/src/main/res/layout/settings_call_fragment.xml +++ b/app/src/main/res/layout/settings_call_fragment.xml @@ -31,7 +31,7 @@ + android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.INVISIBLE : View.GONE}" /> diff --git a/app/src/main/res/layout/settings_chat_fragment.xml b/app/src/main/res/layout/settings_chat_fragment.xml index c6eeb8e57..d7d992413 100644 --- a/app/src/main/res/layout/settings_chat_fragment.xml +++ b/app/src/main/res/layout/settings_chat_fragment.xml @@ -31,7 +31,7 @@ + android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.INVISIBLE : View.GONE}" /> diff --git a/app/src/main/res/layout/settings_contacts_fragment.xml b/app/src/main/res/layout/settings_contacts_fragment.xml index f7a191527..ad9544ed9 100644 --- a/app/src/main/res/layout/settings_contacts_fragment.xml +++ b/app/src/main/res/layout/settings_contacts_fragment.xml @@ -30,7 +30,7 @@ + android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.INVISIBLE : View.GONE}" /> diff --git a/app/src/main/res/layout/settings_network_fragment.xml b/app/src/main/res/layout/settings_network_fragment.xml index 6a8e7d2c7..06becdc81 100644 --- a/app/src/main/res/layout/settings_network_fragment.xml +++ b/app/src/main/res/layout/settings_network_fragment.xml @@ -31,7 +31,7 @@ + android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.INVISIBLE : View.GONE}" /> diff --git a/app/src/main/res/layout/settings_tunnel_fragment.xml b/app/src/main/res/layout/settings_tunnel_fragment.xml index e6eac5db5..95e5d0bff 100644 --- a/app/src/main/res/layout/settings_tunnel_fragment.xml +++ b/app/src/main/res/layout/settings_tunnel_fragment.xml @@ -31,7 +31,7 @@ + android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.INVISIBLE : View.GONE}" /> diff --git a/app/src/main/res/layout/settings_video_fragment.xml b/app/src/main/res/layout/settings_video_fragment.xml index c50870e2d..ccddf17d6 100644 --- a/app/src/main/res/layout/settings_video_fragment.xml +++ b/app/src/main/res/layout/settings_video_fragment.xml @@ -31,7 +31,7 @@ + android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.INVISIBLE : View.GONE}" />