Fixed back navigation in some scenarios

This commit is contained in:
Sylvain Berfini 2021-08-02 10:08:13 +02:00
parent 4cb9b62418
commit 8e5a191155
23 changed files with 253 additions and 46 deletions

View file

@ -43,8 +43,7 @@ import org.linphone.activities.main.dialer.fragments.DialerFragment
import org.linphone.activities.main.fragments.TabsFragment import org.linphone.activities.main.fragments.TabsFragment
import org.linphone.activities.main.history.fragments.DetailCallLogFragment import org.linphone.activities.main.history.fragments.DetailCallLogFragment
import org.linphone.activities.main.history.fragments.MasterCallLogsFragment import org.linphone.activities.main.history.fragments.MasterCallLogsFragment
import org.linphone.activities.main.settings.fragments.AccountSettingsFragment import org.linphone.activities.main.settings.fragments.*
import org.linphone.activities.main.settings.fragments.SettingsFragment
import org.linphone.activities.main.sidemenu.fragments.SideMenuFragment import org.linphone.activities.main.sidemenu.fragments.SideMenuFragment
import org.linphone.contact.NativeContact import org.linphone.contact.NativeContact
import org.linphone.core.Address 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() { internal fun ChatRoomCreationFragment.navigateToGroupInfo() {
if (findNavController().currentDestination?.id == R.id.chatRoomCreationFragment) { if (findNavController().currentDestination?.id == R.id.chatRoomCreationFragment) {
findNavController().navigate( findNavController().navigate(
@ -426,11 +433,19 @@ internal fun ChatRoomCreationFragment.navigateToChatRoom(args: Bundle) {
findNavController().navigate( findNavController().navigate(
R.id.action_chatRoomCreationFragment_to_detailChatRoomFragment, R.id.action_chatRoomCreationFragment_to_detailChatRoomFragment,
args, 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?) { internal fun GroupInfoFragment.navigateToChatRoomCreation(args: Bundle?) {
if (findNavController().currentDestination?.id == R.id.groupInfoFragment) { if (findNavController().currentDestination?.id == R.id.groupInfoFragment) {
findNavController().navigate(R.id.action_groupInfoFragment_to_chatRoomCreationFragment, findNavController().navigate(R.id.action_groupInfoFragment_to_chatRoomCreationFragment,
@ -445,7 +460,7 @@ internal fun GroupInfoFragment.navigateToChatRoom(args: Bundle?) {
findNavController().navigate( findNavController().navigate(
R.id.action_groupInfoFragment_to_detailChatRoomFragment, R.id.action_groupInfoFragment_to_detailChatRoomFragment,
args, args,
getRightToLeftAnimationNavOptions(R.id.emptyFragment, true) getRightToLeftAnimationNavOptions(R.id.emptyChatFragment, true)
) )
} }
} }
@ -472,7 +487,7 @@ internal fun MasterContactsFragment.navigateToContactEditor(sipUriToAdd: String?
navHostFragment.navController.navigate( navHostFragment.navController.navigate(
R.id.action_global_contactEditorFragment, R.id.action_global_contactEditorFragment,
bundle, 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?) { internal fun DetailContactFragment.navigateToChatRoom(args: Bundle?) {
findMasterNavController().navigate( findMasterNavController().navigate(
R.id.action_global_masterChatRoomsFragment, 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 */ /* History related */
internal fun MasterCallLogsFragment.navigateToCallHistory() { internal fun MasterCallLogsFragment.navigateToCallHistory() {
@ -534,7 +565,7 @@ internal fun MasterCallLogsFragment.navigateToCallHistory() {
navHostFragment.navController.navigate( navHostFragment.navController.navigate(
R.id.action_global_detailCallLogFragment, R.id.action_global_detailCallLogFragment,
null, null,
popupTo(R.id.emptyFragment, true) popupTo(R.id.emptyCallHistoryFragment, true)
) )
} }
} }
@ -546,7 +577,7 @@ internal fun MasterCallLogsFragment.clearDisplayedCallHistory() {
navHostFragment.navController.navigate( navHostFragment.navController.navigate(
R.id.action_global_emptyFragment, R.id.action_global_emptyFragment,
null, null,
popupTo(R.id.emptyFragment, true) popupTo(R.id.emptyCallHistoryFragment, true)
) )
} }
} }
@ -575,20 +606,34 @@ internal fun DetailCallLogFragment.navigateToFriend(friendAddress: Address) {
} }
internal fun DetailCallLogFragment.navigateToChatRoom(args: Bundle?) { internal fun DetailCallLogFragment.navigateToChatRoom(args: Bundle?) {
if (findNavController().currentDestination?.id == R.id.detailCallLogFragment) {
findMasterNavController().navigate( findMasterNavController().navigate(
R.id.action_global_masterChatRoomsFragment, R.id.action_global_masterChatRoomsFragment,
args, args,
getRightBottomToLeftTopAnimationNavOptions() getRightBottomToLeftTopAnimationNavOptions()
) )
} }
}
internal fun DetailCallLogFragment.navigateToDialer(args: Bundle?) { internal fun DetailCallLogFragment.navigateToDialer(args: Bundle?) {
if (findNavController().currentDestination?.id == R.id.detailCallLogFragment) {
findMasterNavController().navigate( findMasterNavController().navigate(
R.id.action_global_dialerFragment, R.id.action_global_dialerFragment,
args, args,
getRightToLeftAnimationNavOptions() getRightToLeftAnimationNavOptions()
) )
} }
}
internal fun DetailCallLogFragment.navigateToEmptyCallHistory() {
if (findNavController().currentDestination?.id == R.id.detailCallLogFragment) {
findNavController().navigate(
R.id.action_global_emptyFragment,
null,
popupTo()
)
}
}
/* Settings related */ /* 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 */ /* Side menu related */
internal fun SideMenuFragment.navigateToAccountSettings(identity: String) { internal fun SideMenuFragment.navigateToAccountSettings(identity: String) {

View file

@ -33,6 +33,7 @@ import org.linphone.activities.main.chat.viewmodels.ChatRoomCreationViewModel
import org.linphone.activities.main.fragments.SecureFragment import org.linphone.activities.main.fragments.SecureFragment
import org.linphone.activities.main.viewmodels.SharedMainViewModel import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.activities.navigateToChatRoom import org.linphone.activities.navigateToChatRoom
import org.linphone.activities.navigateToEmptyChatRoom
import org.linphone.activities.navigateToGroupInfo import org.linphone.activities.navigateToGroupInfo
import org.linphone.core.tools.Log import org.linphone.core.tools.Log
import org.linphone.databinding.ChatRoomCreationFragmentBinding import org.linphone.databinding.ChatRoomCreationFragmentBinding
@ -149,7 +150,11 @@ class ChatRoomCreationFragment : SecureFragment<ChatRoomCreationFragmentBinding>
override fun goBack() { override fun goBack() {
if (!findNavController().popBackStack()) { if (!findNavController().popBackStack()) {
if (sharedViewModel.canSlidingPaneBeClosed.value == true) {
sharedViewModel.closeSlidingPaneEvent.value = Event(true) sharedViewModel.closeSlidingPaneEvent.value = Event(true)
} else {
navigateToEmptyChatRoom()
}
} }
} }

View file

@ -125,7 +125,7 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
if (chatRoom == null) { if (chatRoom == null) {
Log.e("[Chat Room] Chat room is null, aborting!") Log.e("[Chat Room] Chat room is null, aborting!")
// (activity as MainActivity).showSnackBar(R.string.error) // (activity as MainActivity).showSnackBar(R.string.error)
findNavController().navigateUp() goBack()
return return
} }
@ -476,7 +476,11 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
override fun goBack() { override fun goBack() {
if (!findNavController().popBackStack()) { if (!findNavController().popBackStack()) {
if (sharedViewModel.canSlidingPaneBeClosed.value == true) {
sharedViewModel.closeSlidingPaneEvent.value = Event(true) sharedViewModel.closeSlidingPaneEvent.value = Event(true)
} else {
navigateToEmptyChatRoom()
}
} }
} }

View file

@ -101,6 +101,9 @@ class MasterChatRoomsFragment : MasterFragment<ChatRoomMasterFragmentBinding, Ch
sharedViewModel.layoutChangedEvent.observe(viewLifecycleOwner, { sharedViewModel.layoutChangedEvent.observe(viewLifecycleOwner, {
it.consume { it.consume {
sharedViewModel.canSlidingPaneBeClosed.value = binding.slidingPane.isSlideable sharedViewModel.canSlidingPaneBeClosed.value = binding.slidingPane.isSlideable
if (binding.slidingPane.isSlideable) {
binding.slidingPane.closePane()
}
} }
}) })
binding.slidingPane.lockMode = SlidingPaneLayout.LOCK_MODE_LOCKED binding.slidingPane.lockMode = SlidingPaneLayout.LOCK_MODE_LOCKED

View file

@ -40,9 +40,11 @@ import org.linphone.activities.main.contact.data.NumberOrAddressEditorData
import org.linphone.activities.main.contact.viewmodels.* import org.linphone.activities.main.contact.viewmodels.*
import org.linphone.activities.main.viewmodels.SharedMainViewModel import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.activities.navigateToContact import org.linphone.activities.navigateToContact
import org.linphone.activities.navigateToEmptyContact
import org.linphone.contact.NativeContact import org.linphone.contact.NativeContact
import org.linphone.core.tools.Log import org.linphone.core.tools.Log
import org.linphone.databinding.ContactEditorFragmentBinding import org.linphone.databinding.ContactEditorFragmentBinding
import org.linphone.utils.Event
import org.linphone.utils.FileUtils import org.linphone.utils.FileUtils
import org.linphone.utils.ImageUtils import org.linphone.utils.ImageUtils
import org.linphone.utils.PermissionHelper import org.linphone.utils.PermissionHelper
@ -107,6 +109,16 @@ class ContactEditorFragment : GenericFragment<ContactEditorFragmentBinding>(), 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?) { override fun onSyncAccountClicked(name: String?, type: String?) {
Log.i("[Contact Editor] Using account $name / $type") Log.i("[Contact Editor] Using account $name / $type")
viewModel.syncAccountName = name viewModel.syncAccountName = name
@ -126,7 +138,7 @@ class ContactEditorFragment : GenericFragment<ContactEditorFragmentBinding>(), S
} else { } else {
Log.w("[Contact Editor] WRITE_CONTACTS permission denied") Log.w("[Contact Editor] WRITE_CONTACTS permission denied")
(requireActivity() as MainActivity).showSnackBar(R.string.contact_editor_write_permission_denied) (requireActivity() as MainActivity).showSnackBar(R.string.contact_editor_write_permission_denied)
findNavController().popBackStack() goBack()
} }
} }
} }
@ -149,7 +161,7 @@ class ContactEditorFragment : GenericFragment<ContactEditorFragmentBinding>(), S
Log.i("[Contact Editor] Displaying contact $savedContact") Log.i("[Contact Editor] Displaying contact $savedContact")
navigateToContact(savedContact) navigateToContact(savedContact)
} else { } else {
findNavController().popBackStack() goBack()
} }
} }

View file

@ -25,10 +25,9 @@ import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.R import org.linphone.R
import org.linphone.activities.GenericFragment import org.linphone.activities.*
import org.linphone.activities.main.* import org.linphone.activities.main.*
import org.linphone.activities.main.contact.viewmodels.ContactViewModel import org.linphone.activities.main.contact.viewmodels.ContactViewModel
import org.linphone.activities.main.contact.viewmodels.ContactViewModelFactory import org.linphone.activities.main.contact.viewmodels.ContactViewModelFactory
@ -69,7 +68,7 @@ class DetailContactFragment : GenericFragment<ContactDetailFragmentBinding>() {
if (contact == null) { if (contact == null) {
Log.e("[Contact] Contact is null, aborting!") Log.e("[Contact] Contact is null, aborting!")
// (activity as MainActivity).showSnackBar(R.string.error) // (activity as MainActivity).showSnackBar(R.string.error)
findNavController().navigateUp() goBack()
return return
} }
@ -129,7 +128,11 @@ class DetailContactFragment : GenericFragment<ContactDetailFragmentBinding>() {
} }
override fun goBack() { override fun goBack() {
if (sharedViewModel.canSlidingPaneBeClosed.value == true) {
sharedViewModel.closeSlidingPaneEvent.value = Event(true) sharedViewModel.closeSlidingPaneEvent.value = Event(true)
} else {
navigateToEmptyContact()
}
} }
private fun confirmContactRemoval() { private fun confirmContactRemoval() {
@ -143,7 +146,7 @@ class DetailContactFragment : GenericFragment<ContactDetailFragmentBinding>() {
dialogViewModel.showDeleteButton({ dialogViewModel.showDeleteButton({
viewModel.deleteContact() viewModel.deleteContact()
dialog.dismiss() dialog.dismiss()
findNavController().navigateUp() goBack()
}, getString(R.string.dialog_delete)) }, getString(R.string.dialog_delete))
dialog.show() dialog.show()

View file

@ -89,6 +89,9 @@ class MasterContactsFragment : MasterFragment<ContactMasterFragmentBinding, Cont
sharedViewModel.layoutChangedEvent.observe(viewLifecycleOwner, { sharedViewModel.layoutChangedEvent.observe(viewLifecycleOwner, {
it.consume { it.consume {
sharedViewModel.canSlidingPaneBeClosed.value = binding.slidingPane.isSlideable sharedViewModel.canSlidingPaneBeClosed.value = binding.slidingPane.isSlideable
if (binding.slidingPane.isSlideable) {
binding.slidingPane.closePane()
}
} }
}) })
binding.slidingPane.lockMode = SlidingPaneLayout.LOCK_MODE_LOCKED binding.slidingPane.lockMode = SlidingPaneLayout.LOCK_MODE_LOCKED

View file

@ -131,6 +131,10 @@ class DetailCallLogFragment : GenericFragment<HistoryDetailFragmentBinding>() {
} }
override fun goBack() { override fun goBack() {
if (sharedViewModel.canSlidingPaneBeClosed.value == true) {
sharedViewModel.closeSlidingPaneEvent.value = Event(true) sharedViewModel.closeSlidingPaneEvent.value = Event(true)
} else {
navigateToEmptyCallHistory()
}
} }
} }

View file

@ -92,6 +92,9 @@ class MasterCallLogsFragment : MasterFragment<HistoryMasterFragmentBinding, Call
sharedViewModel.layoutChangedEvent.observe(viewLifecycleOwner, { sharedViewModel.layoutChangedEvent.observe(viewLifecycleOwner, {
it.consume { it.consume {
sharedViewModel.canSlidingPaneBeClosed.value = binding.slidingPane.isSlideable sharedViewModel.canSlidingPaneBeClosed.value = binding.slidingPane.isSlideable
if (binding.slidingPane.isSlideable) {
binding.slidingPane.closePane()
}
} }
}) })
binding.slidingPane.lockMode = SlidingPaneLayout.LOCK_MODE_LOCKED binding.slidingPane.lockMode = SlidingPaneLayout.LOCK_MODE_LOCKED

View file

@ -27,6 +27,7 @@ import org.linphone.activities.GenericFragment
import org.linphone.activities.main.settings.viewmodels.AccountSettingsViewModel import org.linphone.activities.main.settings.viewmodels.AccountSettingsViewModel
import org.linphone.activities.main.settings.viewmodels.AccountSettingsViewModelFactory import org.linphone.activities.main.settings.viewmodels.AccountSettingsViewModelFactory
import org.linphone.activities.main.viewmodels.SharedMainViewModel import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.activities.navigateToEmptySetting
import org.linphone.activities.navigateToPhoneLinking import org.linphone.activities.navigateToPhoneLinking
import org.linphone.core.tools.Log import org.linphone.core.tools.Log
import org.linphone.databinding.SettingsAccountFragmentBinding import org.linphone.databinding.SettingsAccountFragmentBinding
@ -92,6 +93,10 @@ class AccountSettingsFragment : GenericFragment<SettingsAccountFragmentBinding>(
} }
override fun goBack() { override fun goBack() {
if (sharedViewModel.canSlidingPaneBeClosed.value == true) {
sharedViewModel.closeSlidingPaneEvent.value = Event(true) sharedViewModel.closeSlidingPaneEvent.value = Event(true)
} else {
navigateToEmptySetting()
}
} }
} }

View file

@ -32,6 +32,7 @@ import org.linphone.activities.GenericFragment
import org.linphone.activities.main.MainActivity import org.linphone.activities.main.MainActivity
import org.linphone.activities.main.settings.viewmodels.AdvancedSettingsViewModel import org.linphone.activities.main.settings.viewmodels.AdvancedSettingsViewModel
import org.linphone.activities.main.viewmodels.SharedMainViewModel import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.activities.navigateToEmptySetting
import org.linphone.core.tools.Log import org.linphone.core.tools.Log
import org.linphone.core.tools.compatibility.DeviceUtils import org.linphone.core.tools.compatibility.DeviceUtils
import org.linphone.databinding.SettingsAdvancedFragmentBinding import org.linphone.databinding.SettingsAdvancedFragmentBinding
@ -134,6 +135,10 @@ class AdvancedSettingsFragment : GenericFragment<SettingsAdvancedFragmentBinding
} }
override fun goBack() { override fun goBack() {
if (sharedViewModel.canSlidingPaneBeClosed.value == true) {
sharedViewModel.closeSlidingPaneEvent.value = Event(true) sharedViewModel.closeSlidingPaneEvent.value = Event(true)
} else {
navigateToEmptySetting()
}
} }
} }

View file

@ -33,6 +33,7 @@ import org.linphone.activities.GenericFragment
import org.linphone.activities.main.settings.SettingListenerStub import org.linphone.activities.main.settings.SettingListenerStub
import org.linphone.activities.main.settings.viewmodels.AudioSettingsViewModel import org.linphone.activities.main.settings.viewmodels.AudioSettingsViewModel
import org.linphone.activities.main.viewmodels.SharedMainViewModel import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.activities.navigateToEmptySetting
import org.linphone.core.tools.Log import org.linphone.core.tools.Log
import org.linphone.databinding.SettingsAudioFragmentBinding import org.linphone.databinding.SettingsAudioFragmentBinding
import org.linphone.utils.Event import org.linphone.utils.Event
@ -118,6 +119,10 @@ class AudioSettingsFragment : GenericFragment<SettingsAudioFragmentBinding>() {
} }
override fun goBack() { override fun goBack() {
if (sharedViewModel.canSlidingPaneBeClosed.value == true) {
sharedViewModel.closeSlidingPaneEvent.value = Event(true) sharedViewModel.closeSlidingPaneEvent.value = Event(true)
} else {
navigateToEmptySetting()
}
} }
} }

View file

@ -30,6 +30,7 @@ import org.linphone.R
import org.linphone.activities.GenericFragment import org.linphone.activities.GenericFragment
import org.linphone.activities.main.settings.viewmodels.CallSettingsViewModel import org.linphone.activities.main.settings.viewmodels.CallSettingsViewModel
import org.linphone.activities.main.viewmodels.SharedMainViewModel import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.activities.navigateToEmptySetting
import org.linphone.compatibility.Compatibility import org.linphone.compatibility.Compatibility
import org.linphone.databinding.SettingsCallFragmentBinding import org.linphone.databinding.SettingsCallFragmentBinding
import org.linphone.mediastream.Version import org.linphone.mediastream.Version
@ -92,6 +93,10 @@ class CallSettingsFragment : GenericFragment<SettingsCallFragmentBinding>() {
} }
override fun goBack() { override fun goBack() {
if (sharedViewModel.canSlidingPaneBeClosed.value == true) {
sharedViewModel.closeSlidingPaneEvent.value = Event(true) sharedViewModel.closeSlidingPaneEvent.value = Event(true)
} else {
navigateToEmptySetting()
}
} }
} }

View file

@ -29,6 +29,7 @@ import org.linphone.R
import org.linphone.activities.GenericFragment import org.linphone.activities.GenericFragment
import org.linphone.activities.main.settings.viewmodels.ChatSettingsViewModel import org.linphone.activities.main.settings.viewmodels.ChatSettingsViewModel
import org.linphone.activities.main.viewmodels.SharedMainViewModel import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.activities.navigateToEmptySetting
import org.linphone.compatibility.Compatibility import org.linphone.compatibility.Compatibility
import org.linphone.databinding.SettingsChatFragmentBinding import org.linphone.databinding.SettingsChatFragmentBinding
import org.linphone.mediastream.Version import org.linphone.mediastream.Version
@ -84,6 +85,10 @@ class ChatSettingsFragment : GenericFragment<SettingsChatFragmentBinding>() {
} }
override fun goBack() { override fun goBack() {
if (sharedViewModel.canSlidingPaneBeClosed.value == true) {
sharedViewModel.closeSlidingPaneEvent.value = Event(true) sharedViewModel.closeSlidingPaneEvent.value = Event(true)
} else {
navigateToEmptySetting()
}
} }
} }

View file

@ -29,6 +29,7 @@ import org.linphone.R
import org.linphone.activities.GenericFragment import org.linphone.activities.GenericFragment
import org.linphone.activities.main.settings.viewmodels.ContactsSettingsViewModel import org.linphone.activities.main.settings.viewmodels.ContactsSettingsViewModel
import org.linphone.activities.main.viewmodels.SharedMainViewModel import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.activities.navigateToEmptySetting
import org.linphone.compatibility.Compatibility import org.linphone.compatibility.Compatibility
import org.linphone.core.tools.Log import org.linphone.core.tools.Log
import org.linphone.databinding.SettingsContactsFragmentBinding import org.linphone.databinding.SettingsContactsFragmentBinding
@ -113,6 +114,10 @@ class ContactsSettingsFragment : GenericFragment<SettingsContactsFragmentBinding
} }
override fun goBack() { override fun goBack() {
if (sharedViewModel.canSlidingPaneBeClosed.value == true) {
sharedViewModel.closeSlidingPaneEvent.value = Event(true) sharedViewModel.closeSlidingPaneEvent.value = Event(true)
} else {
navigateToEmptySetting()
}
} }
} }

View file

@ -26,6 +26,7 @@ import org.linphone.R
import org.linphone.activities.GenericFragment import org.linphone.activities.GenericFragment
import org.linphone.activities.main.settings.viewmodels.NetworkSettingsViewModel import org.linphone.activities.main.settings.viewmodels.NetworkSettingsViewModel
import org.linphone.activities.main.viewmodels.SharedMainViewModel import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.activities.navigateToEmptySetting
import org.linphone.databinding.SettingsNetworkFragmentBinding import org.linphone.databinding.SettingsNetworkFragmentBinding
import org.linphone.utils.Event import org.linphone.utils.Event
@ -52,6 +53,10 @@ class NetworkSettingsFragment : GenericFragment<SettingsNetworkFragmentBinding>(
} }
override fun goBack() { override fun goBack() {
if (sharedViewModel.canSlidingPaneBeClosed.value == true) {
sharedViewModel.closeSlidingPaneEvent.value = Event(true) sharedViewModel.closeSlidingPaneEvent.value = Event(true)
} else {
navigateToEmptySetting()
}
} }
} }

View file

@ -66,6 +66,9 @@ class SettingsFragment : SecureFragment<SettingsFragmentBinding>() {
sharedViewModel.layoutChangedEvent.observe(viewLifecycleOwner, { sharedViewModel.layoutChangedEvent.observe(viewLifecycleOwner, {
it.consume { it.consume {
sharedViewModel.canSlidingPaneBeClosed.value = binding.slidingPane.isSlideable sharedViewModel.canSlidingPaneBeClosed.value = binding.slidingPane.isSlideable
if (binding.slidingPane.isSlideable) {
binding.slidingPane.closePane()
}
} }
}) })
binding.slidingPane.lockMode = SlidingPaneLayout.LOCK_MODE_LOCKED binding.slidingPane.lockMode = SlidingPaneLayout.LOCK_MODE_LOCKED

View file

@ -26,6 +26,7 @@ import org.linphone.R
import org.linphone.activities.GenericFragment import org.linphone.activities.GenericFragment
import org.linphone.activities.main.settings.viewmodels.TunnelSettingsViewModel import org.linphone.activities.main.settings.viewmodels.TunnelSettingsViewModel
import org.linphone.activities.main.viewmodels.SharedMainViewModel import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.activities.navigateToEmptySetting
import org.linphone.databinding.SettingsTunnelFragmentBinding import org.linphone.databinding.SettingsTunnelFragmentBinding
import org.linphone.utils.Event import org.linphone.utils.Event
@ -52,6 +53,10 @@ class TunnelSettingsFragment : GenericFragment<SettingsTunnelFragmentBinding>()
} }
override fun goBack() { override fun goBack() {
if (sharedViewModel.canSlidingPaneBeClosed.value == true) {
sharedViewModel.closeSlidingPaneEvent.value = Event(true) sharedViewModel.closeSlidingPaneEvent.value = Event(true)
} else {
navigateToEmptySetting()
}
} }
} }

View file

@ -33,6 +33,7 @@ import org.linphone.activities.GenericFragment
import org.linphone.activities.main.settings.SettingListenerStub import org.linphone.activities.main.settings.SettingListenerStub
import org.linphone.activities.main.settings.viewmodels.VideoSettingsViewModel import org.linphone.activities.main.settings.viewmodels.VideoSettingsViewModel
import org.linphone.activities.main.viewmodels.SharedMainViewModel import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.activities.navigateToEmptySetting
import org.linphone.core.tools.Log import org.linphone.core.tools.Log
import org.linphone.databinding.SettingsVideoFragmentBinding import org.linphone.databinding.SettingsVideoFragmentBinding
import org.linphone.utils.Event import org.linphone.utils.Event
@ -108,6 +109,10 @@ class VideoSettingsFragment : GenericFragment<SettingsVideoFragmentBinding>() {
} }
override fun goBack() { override fun goBack() {
if (sharedViewModel.canSlidingPaneBeClosed.value == true) {
sharedViewModel.closeSlidingPaneEvent.value = Event(true) sharedViewModel.closeSlidingPaneEvent.value = Event(true)
} else {
navigateToEmptySetting()
}
} }
} }

View file

@ -9,7 +9,7 @@
android:id="@+id/emptyChatFragment" android:id="@+id/emptyChatFragment"
android:name="org.linphone.activities.main.fragments.EmptyFragment" android:name="org.linphone.activities.main.fragments.EmptyFragment"
tools:layout="@layout/empty_fragment" tools:layout="@layout/empty_fragment"
android:label="EmptyFragment" /> android:label="EmptyChatFragment" />
<action android:id="@+id/action_global_emptyChatFragment" <action android:id="@+id/action_global_emptyChatFragment"
app:destination="@id/emptyChatFragment" /> app:destination="@id/emptyChatFragment" />

View file

@ -9,7 +9,7 @@
android:id="@+id/emptyContactFragment" android:id="@+id/emptyContactFragment"
android:name="org.linphone.activities.main.fragments.EmptyFragment" android:name="org.linphone.activities.main.fragments.EmptyFragment"
tools:layout="@layout/empty_fragment" tools:layout="@layout/empty_fragment"
android:label="EmptyFragment" /> android:label="EmptyContactFragment" />
<action android:id="@+id/action_global_emptyContactFragment" <action android:id="@+id/action_global_emptyContactFragment"
app:destination="@id/emptyContactFragment" /> app:destination="@id/emptyContactFragment" />

View file

@ -3,16 +3,16 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/history_nav_graph.xml" android:id="@+id/history_nav_graph.xml"
app:startDestination="@id/emptyFragment"> app:startDestination="@id/emptyCallHistoryFragment">
<fragment <fragment
android:id="@+id/emptyFragment" android:id="@+id/emptyCallHistoryFragment"
android:name="org.linphone.activities.main.fragments.EmptyFragment" android:name="org.linphone.activities.main.fragments.EmptyFragment"
tools:layout="@layout/empty_fragment" tools:layout="@layout/empty_fragment"
android:label="EmptyFragment" /> android:label="EmptyCallHistoryFragment" />
<action android:id="@+id/action_global_emptyFragment" <action android:id="@+id/action_global_emptyFragment"
app:destination="@id/emptyFragment" /> app:destination="@id/emptyCallHistoryFragment" />
<fragment <fragment
android:id="@+id/detailCallLogFragment" android:id="@+id/detailCallLogFragment"

View file

@ -3,12 +3,17 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/settings_nav_graph.xml" android:id="@+id/settings_nav_graph.xml"
app:startDestination="@id/emptyFragment"> app:startDestination="@id/emptySettingsFragment">
<fragment <fragment
android:id="@+id/emptyFragment" android:id="@+id/emptySettingsFragment"
android:name="org.linphone.activities.main.fragments.EmptyFragment" android:name="org.linphone.activities.main.fragments.EmptyFragment"
tools:layout="@layout/empty_fragment" tools:layout="@layout/empty_fragment"
android:label="EmptyFragment"/> android:label="EmptySettingsFragment" />
<action android:id="@+id/action_global_emptySettingsFragment"
app:destination="@id/emptySettingsFragment" />
<fragment <fragment
android:id="@+id/accountSettingsFragment" android:id="@+id/accountSettingsFragment"
android:name="org.linphone.activities.main.settings.fragments.AccountSettingsFragment" android:name="org.linphone.activities.main.settings.fragments.AccountSettingsFragment"