diff --git a/app/src/main/java/org/linphone/activities/Navigation.kt b/app/src/main/java/org/linphone/activities/Navigation.kt index 95657d39f..13c15d3e5 100644 --- a/app/src/main/java/org/linphone/activities/Navigation.kt +++ b/app/src/main/java/org/linphone/activities/Navigation.kt @@ -43,8 +43,7 @@ import org.linphone.activities.main.dialer.fragments.DialerFragment import org.linphone.activities.main.fragments.TabsFragment import org.linphone.activities.main.history.fragments.DetailCallLogFragment import org.linphone.activities.main.history.fragments.MasterCallLogsFragment -import org.linphone.activities.main.settings.fragments.AccountSettingsFragment -import org.linphone.activities.main.settings.fragments.SettingsFragment +import org.linphone.activities.main.settings.fragments.* import org.linphone.activities.main.sidemenu.fragments.SideMenuFragment import org.linphone.contact.NativeContact import org.linphone.core.Address @@ -411,6 +410,14 @@ internal fun DetailChatRoomFragment.navigateToAudioFileViewer(secure: Boolean) { ) } +internal fun DetailChatRoomFragment.navigateToEmptyChatRoom() { + findNavController().navigate( + R.id.action_global_emptyChatFragment, + null, + popupTo() + ) +} + internal fun ChatRoomCreationFragment.navigateToGroupInfo() { if (findNavController().currentDestination?.id == R.id.chatRoomCreationFragment) { findNavController().navigate( @@ -426,11 +433,19 @@ internal fun ChatRoomCreationFragment.navigateToChatRoom(args: Bundle) { findNavController().navigate( R.id.action_chatRoomCreationFragment_to_detailChatRoomFragment, args, - getRightToLeftAnimationNavOptions(R.id.emptyFragment, true) + getRightToLeftAnimationNavOptions(R.id.emptyChatFragment, true) ) } } +internal fun ChatRoomCreationFragment.navigateToEmptyChatRoom() { + findNavController().navigate( + R.id.action_global_emptyChatFragment, + null, + popupTo() + ) +} + internal fun GroupInfoFragment.navigateToChatRoomCreation(args: Bundle?) { if (findNavController().currentDestination?.id == R.id.groupInfoFragment) { findNavController().navigate(R.id.action_groupInfoFragment_to_chatRoomCreationFragment, @@ -445,7 +460,7 @@ internal fun GroupInfoFragment.navigateToChatRoom(args: Bundle?) { findNavController().navigate( R.id.action_groupInfoFragment_to_detailChatRoomFragment, args, - getRightToLeftAnimationNavOptions(R.id.emptyFragment, true) + getRightToLeftAnimationNavOptions(R.id.emptyChatFragment, true) ) } } @@ -472,7 +487,7 @@ internal fun MasterContactsFragment.navigateToContactEditor(sipUriToAdd: String? navHostFragment.navController.navigate( R.id.action_global_contactEditorFragment, bundle, - popupTo() + popupTo(R.id.emptyContactFragment, true) ) } } @@ -499,6 +514,14 @@ internal fun ContactEditorFragment.navigateToContact(contact: NativeContact) { ) } +internal fun ContactEditorFragment.navigateToEmptyContact() { + findNavController().navigate( + R.id.action_global_emptyContactFragment, + null, + popupTo() + ) +} + internal fun DetailContactFragment.navigateToChatRoom(args: Bundle?) { findMasterNavController().navigate( R.id.action_global_masterChatRoomsFragment, @@ -525,6 +548,14 @@ internal fun DetailContactFragment.navigateToContactEditor() { } } +internal fun DetailContactFragment.navigateToEmptyContact() { + findNavController().navigate( + R.id.action_global_emptyContactFragment, + null, + popupTo() + ) +} + /* History related */ internal fun MasterCallLogsFragment.navigateToCallHistory() { @@ -534,7 +565,7 @@ internal fun MasterCallLogsFragment.navigateToCallHistory() { navHostFragment.navController.navigate( R.id.action_global_detailCallLogFragment, null, - popupTo(R.id.emptyFragment, true) + popupTo(R.id.emptyCallHistoryFragment, true) ) } } @@ -546,7 +577,7 @@ internal fun MasterCallLogsFragment.clearDisplayedCallHistory() { navHostFragment.navController.navigate( R.id.action_global_emptyFragment, null, - popupTo(R.id.emptyFragment, true) + popupTo(R.id.emptyCallHistoryFragment, true) ) } } @@ -575,19 +606,33 @@ internal fun DetailCallLogFragment.navigateToFriend(friendAddress: Address) { } internal fun DetailCallLogFragment.navigateToChatRoom(args: Bundle?) { - findMasterNavController().navigate( - R.id.action_global_masterChatRoomsFragment, - args, - getRightBottomToLeftTopAnimationNavOptions() - ) + if (findNavController().currentDestination?.id == R.id.detailCallLogFragment) { + findMasterNavController().navigate( + R.id.action_global_masterChatRoomsFragment, + args, + getRightBottomToLeftTopAnimationNavOptions() + ) + } } internal fun DetailCallLogFragment.navigateToDialer(args: Bundle?) { - findMasterNavController().navigate( - R.id.action_global_dialerFragment, - args, - getRightToLeftAnimationNavOptions() - ) + if (findNavController().currentDestination?.id == R.id.detailCallLogFragment) { + findMasterNavController().navigate( + R.id.action_global_dialerFragment, + args, + getRightToLeftAnimationNavOptions() + ) + } +} + +internal fun DetailCallLogFragment.navigateToEmptyCallHistory() { + if (findNavController().currentDestination?.id == R.id.detailCallLogFragment) { + findNavController().navigate( + R.id.action_global_emptyFragment, + null, + popupTo() + ) + } } /* Settings related */ @@ -721,6 +766,78 @@ internal fun PhoneAccountLinkingFragment.navigateToPhoneAccountValidation(args: } } +internal fun AccountSettingsFragment.navigateToEmptySetting() { + findNavController().navigate( + R.id.action_global_emptySettingsFragment, + null, + popupTo() + ) +} + +internal fun AdvancedSettingsFragment.navigateToEmptySetting() { + findNavController().navigate( + R.id.action_global_emptySettingsFragment, + null, + popupTo() + ) +} + +internal fun AudioSettingsFragment.navigateToEmptySetting() { + findNavController().navigate( + R.id.action_global_emptySettingsFragment, + null, + popupTo() + ) +} + +internal fun CallSettingsFragment.navigateToEmptySetting() { + findNavController().navigate( + R.id.action_global_emptySettingsFragment, + null, + popupTo() + ) +} + +internal fun ChatSettingsFragment.navigateToEmptySetting() { + findNavController().navigate( + R.id.action_global_emptySettingsFragment, + null, + popupTo() + ) +} + +internal fun ContactsSettingsFragment.navigateToEmptySetting() { + findNavController().navigate( + R.id.action_global_emptySettingsFragment, + null, + popupTo() + ) +} + +internal fun NetworkSettingsFragment.navigateToEmptySetting() { + findNavController().navigate( + R.id.action_global_emptySettingsFragment, + null, + popupTo() + ) +} + +internal fun TunnelSettingsFragment.navigateToEmptySetting() { + findNavController().navigate( + R.id.action_global_emptySettingsFragment, + null, + popupTo() + ) +} + +internal fun VideoSettingsFragment.navigateToEmptySetting() { + findNavController().navigate( + R.id.action_global_emptySettingsFragment, + null, + popupTo() + ) +} + /* Side menu related */ internal fun SideMenuFragment.navigateToAccountSettings(identity: String) { 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 a41f5ceca..e5a60c086 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 @@ -33,6 +33,7 @@ import org.linphone.activities.main.chat.viewmodels.ChatRoomCreationViewModel import org.linphone.activities.main.fragments.SecureFragment import org.linphone.activities.main.viewmodels.SharedMainViewModel import org.linphone.activities.navigateToChatRoom +import org.linphone.activities.navigateToEmptyChatRoom import org.linphone.activities.navigateToGroupInfo import org.linphone.core.tools.Log import org.linphone.databinding.ChatRoomCreationFragmentBinding @@ -149,7 +150,11 @@ class ChatRoomCreationFragment : SecureFragment override fun goBack() { if (!findNavController().popBackStack()) { - sharedViewModel.closeSlidingPaneEvent.value = Event(true) + if (sharedViewModel.canSlidingPaneBeClosed.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 b9c13a7df..46d3d29b2 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 @@ -125,7 +125,7 @@ class DetailChatRoomFragment : MasterFragment(), S } } + override fun goBack() { + if (!findNavController().popBackStack()) { + if (sharedViewModel.canSlidingPaneBeClosed.value == true) { + sharedViewModel.closeSlidingPaneEvent.value = Event(true) + } else { + navigateToEmptyContact() + } + } + } + override fun onSyncAccountClicked(name: String?, type: String?) { Log.i("[Contact Editor] Using account $name / $type") viewModel.syncAccountName = name @@ -126,7 +138,7 @@ class ContactEditorFragment : GenericFragment(), S } else { Log.w("[Contact Editor] WRITE_CONTACTS permission denied") (requireActivity() as MainActivity).showSnackBar(R.string.contact_editor_write_permission_denied) - findNavController().popBackStack() + goBack() } } } @@ -149,7 +161,7 @@ class ContactEditorFragment : GenericFragment(), S Log.i("[Contact Editor] Displaying contact $savedContact") navigateToContact(savedContact) } else { - findNavController().popBackStack() + goBack() } } 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 343b75018..bb9d70ae1 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 @@ -25,10 +25,9 @@ import android.net.Uri import android.os.Bundle import android.view.View import androidx.lifecycle.ViewModelProvider -import androidx.navigation.fragment.findNavController import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.R -import org.linphone.activities.GenericFragment +import org.linphone.activities.* import org.linphone.activities.main.* import org.linphone.activities.main.contact.viewmodels.ContactViewModel import org.linphone.activities.main.contact.viewmodels.ContactViewModelFactory @@ -69,7 +68,7 @@ class DetailContactFragment : GenericFragment() { if (contact == null) { Log.e("[Contact] Contact is null, aborting!") // (activity as MainActivity).showSnackBar(R.string.error) - findNavController().navigateUp() + goBack() return } @@ -129,7 +128,11 @@ class DetailContactFragment : GenericFragment() { } override fun goBack() { - sharedViewModel.closeSlidingPaneEvent.value = Event(true) + if (sharedViewModel.canSlidingPaneBeClosed.value == true) { + sharedViewModel.closeSlidingPaneEvent.value = Event(true) + } else { + navigateToEmptyContact() + } } private fun confirmContactRemoval() { @@ -143,7 +146,7 @@ class DetailContactFragment : GenericFragment() { dialogViewModel.showDeleteButton({ viewModel.deleteContact() dialog.dismiss() - findNavController().navigateUp() + goBack() }, getString(R.string.dialog_delete)) dialog.show() 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 e286f972a..a8283b626 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 @@ -89,6 +89,9 @@ class MasterContactsFragment : MasterFragment() { } override fun goBack() { - sharedViewModel.closeSlidingPaneEvent.value = Event(true) + if (sharedViewModel.canSlidingPaneBeClosed.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 382ab3eba..efabcdf36 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 @@ -92,6 +92,9 @@ class MasterCallLogsFragment : MasterFragment( } override fun goBack() { - sharedViewModel.closeSlidingPaneEvent.value = Event(true) + if (sharedViewModel.canSlidingPaneBeClosed.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 a85c15f60..6e2fee106 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 @@ -32,6 +32,7 @@ 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 import org.linphone.databinding.SettingsAdvancedFragmentBinding @@ -134,6 +135,10 @@ class AdvancedSettingsFragment : GenericFragment() { } override fun goBack() { - sharedViewModel.closeSlidingPaneEvent.value = Event(true) + if (sharedViewModel.canSlidingPaneBeClosed.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 8ddab9f76..6e17fae37 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 @@ -30,6 +30,7 @@ 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 @@ -92,6 +93,10 @@ class CallSettingsFragment : GenericFragment() { } override fun goBack() { - sharedViewModel.closeSlidingPaneEvent.value = Event(true) + if (sharedViewModel.canSlidingPaneBeClosed.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 7d7fb4602..61ecc7ab1 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 @@ -29,6 +29,7 @@ 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 @@ -84,6 +85,10 @@ class ChatSettingsFragment : GenericFragment() { } override fun goBack() { - sharedViewModel.closeSlidingPaneEvent.value = Event(true) + if (sharedViewModel.canSlidingPaneBeClosed.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 a84d245b4..8d154f2cf 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 @@ -29,6 +29,7 @@ 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 import org.linphone.databinding.SettingsContactsFragmentBinding @@ -113,6 +114,10 @@ class ContactsSettingsFragment : GenericFragment( } override fun goBack() { - sharedViewModel.closeSlidingPaneEvent.value = Event(true) + if (sharedViewModel.canSlidingPaneBeClosed.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 def889166..0eba83161 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 @@ -66,6 +66,9 @@ class SettingsFragment : SecureFragment() { sharedViewModel.layoutChangedEvent.observe(viewLifecycleOwner, { it.consume { sharedViewModel.canSlidingPaneBeClosed.value = binding.slidingPane.isSlideable + if (binding.slidingPane.isSlideable) { + binding.slidingPane.closePane() + } } }) binding.slidingPane.lockMode = SlidingPaneLayout.LOCK_MODE_LOCKED 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 24dab5c38..cd7bf5941 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 @@ -26,6 +26,7 @@ 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 @@ -52,6 +53,10 @@ class TunnelSettingsFragment : GenericFragment() } override fun goBack() { - sharedViewModel.closeSlidingPaneEvent.value = Event(true) + if (sharedViewModel.canSlidingPaneBeClosed.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 a408a0273..c79f49483 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 @@ -33,6 +33,7 @@ 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 @@ -108,6 +109,10 @@ class VideoSettingsFragment : GenericFragment() { } override fun goBack() { - sharedViewModel.closeSlidingPaneEvent.value = Event(true) + if (sharedViewModel.canSlidingPaneBeClosed.value == true) { + sharedViewModel.closeSlidingPaneEvent.value = Event(true) + } else { + navigateToEmptySetting() + } } } diff --git a/app/src/main/res/navigation/chat_nav_graph.xml b/app/src/main/res/navigation/chat_nav_graph.xml index a86d680f7..5d1682aa4 100644 --- a/app/src/main/res/navigation/chat_nav_graph.xml +++ b/app/src/main/res/navigation/chat_nav_graph.xml @@ -9,7 +9,7 @@ android:id="@+id/emptyChatFragment" android:name="org.linphone.activities.main.fragments.EmptyFragment" tools:layout="@layout/empty_fragment" - android:label="EmptyFragment" /> + android:label="EmptyChatFragment" /> diff --git a/app/src/main/res/navigation/contacts_nav_graph.xml b/app/src/main/res/navigation/contacts_nav_graph.xml index 1f86bee9e..7d2d06d68 100644 --- a/app/src/main/res/navigation/contacts_nav_graph.xml +++ b/app/src/main/res/navigation/contacts_nav_graph.xml @@ -9,7 +9,7 @@ android:id="@+id/emptyContactFragment" android:name="org.linphone.activities.main.fragments.EmptyFragment" tools:layout="@layout/empty_fragment" - android:label="EmptyFragment" /> + android:label="EmptyContactFragment" /> diff --git a/app/src/main/res/navigation/history_nav_graph.xml b/app/src/main/res/navigation/history_nav_graph.xml index e165871dc..8ac10977f 100644 --- a/app/src/main/res/navigation/history_nav_graph.xml +++ b/app/src/main/res/navigation/history_nav_graph.xml @@ -3,16 +3,16 @@ xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/history_nav_graph.xml" - app:startDestination="@id/emptyFragment"> + app:startDestination="@id/emptyCallHistoryFragment"> + android:label="EmptyCallHistoryFragment" /> + app:destination="@id/emptyCallHistoryFragment" /> + app:startDestination="@id/emptySettingsFragment"> + + android:label="EmptySettingsFragment" /> + + +