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 f6b9e32f0..4cba7e5a0 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 @@ -30,6 +30,8 @@ import org.linphone.R import org.linphone.activities.assistant.viewmodels.AccountLoginViewModel import org.linphone.activities.assistant.viewmodels.AccountLoginViewModelFactory import org.linphone.activities.assistant.viewmodels.SharedAssistantViewModel +import org.linphone.activities.main.navigateToEchoCancellerCalibration +import org.linphone.activities.main.navigateToPhoneAccountValidation import org.linphone.activities.main.viewmodels.DialogViewModel import org.linphone.databinding.AssistantAccountLoginFragmentBinding import org.linphone.utils.DialogUtils @@ -77,7 +79,7 @@ class AccountLoginFragment : AbstractPhoneFragment() { @@ -50,7 +51,7 @@ class EmailAccountCreationFragment : GenericFragment() { @@ -52,7 +53,7 @@ class EmailAccountValidationFragment : GenericFragment() { @@ -60,7 +61,7 @@ class PhoneAccountCreationFragment : AbstractPhoneFragment() { @@ -61,7 +63,7 @@ class PhoneAccountValidationFragment : GenericFragment { if (coreContext.core.isEchoCancellerCalibrationRequired) { if (findNavController().currentDestination?.id == R.id.phoneAccountValidationFragment) { - findNavController().navigate(R.id.action_phoneAccountValidationFragment_to_echoCancellerCalibrationFragment) + navigateToEchoCancellerCalibration() } } else { requireActivity().finish() @@ -71,7 +73,7 @@ class PhoneAccountValidationFragment : GenericFragment() { @@ -50,7 +52,7 @@ class RemoteProvisioningFragment : GenericFragment() { @@ -43,28 +48,28 @@ class WelcomeFragment : GenericFragment() { binding.setCreateAccountClickListener { if (findNavController().currentDestination?.id == R.id.welcomeFragment) { if (resources.getBoolean(R.bool.isTablet)) { - findNavController().navigate(R.id.action_welcomeFragment_to_emailAccountCreationFragment) + navigateToEmailAccountCreation() } else { - findNavController().navigate(R.id.action_welcomeFragment_to_phoneAccountCreationFragment) + navigateToPhoneAccountCreation() } } } binding.setAccountLoginClickListener { if (findNavController().currentDestination?.id == R.id.welcomeFragment) { - findNavController().navigate(R.id.action_welcomeFragment_to_accountLoginFragment) + navigateToAccountLogin() } } binding.setGenericAccountLoginClickListener { if (findNavController().currentDestination?.id == R.id.welcomeFragment) { - findNavController().navigate(R.id.action_welcomeFragment_to_genericAccountLoginFragment) + navigateToGenericLogin() } } binding.setRemoteProvisioningClickListener { if (findNavController().currentDestination?.id == R.id.welcomeFragment) { - findNavController().navigate(R.id.action_welcomeFragment_to_remoteProvisioningFragment) + navigateToRemoteProvisioning() } } } diff --git a/app/src/main/java/org/linphone/activities/main/MainActivity.kt b/app/src/main/java/org/linphone/activities/main/MainActivity.kt index 1cb84130d..474b8af6f 100644 --- a/app/src/main/java/org/linphone/activities/main/MainActivity.kt +++ b/app/src/main/java/org/linphone/activities/main/MainActivity.kt @@ -207,10 +207,7 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin Log.i("[Main Activity] Starting dialer with pre-filled URI $addressToCall") val args = Bundle() args.putString("URI", addressToCall) - findNavController(R.id.nav_host_fragment).navigate( - R.id.action_global_dialerFragment, - args - ) + navigateToDialer(args) } } else -> { @@ -237,10 +234,7 @@ class MainActivity : GenericActivity(), SnackBarActivity, NavController.OnDestin Log.i("[Main Activity] Found dialer intent extra, go to dialer") val args = Bundle() args.putBoolean("Transfer", intent.getBooleanExtra("Transfer", false)) - findNavController(R.id.nav_host_fragment).navigate( - R.id.action_global_dialerFragment, - args - ) + navigateToDialer(args) } } } diff --git a/app/src/main/java/org/linphone/activities/main/Navigation.kt b/app/src/main/java/org/linphone/activities/main/Navigation.kt index a4e2a5a0e..a88b2f53b 100644 --- a/app/src/main/java/org/linphone/activities/main/Navigation.kt +++ b/app/src/main/java/org/linphone/activities/main/Navigation.kt @@ -25,15 +25,22 @@ import androidx.core.os.bundleOf import androidx.fragment.app.Fragment import androidx.navigation.NavController import androidx.navigation.NavOptions +import androidx.navigation.findNavController import androidx.navigation.fragment.NavHostFragment import androidx.navigation.fragment.findNavController import org.linphone.R +import org.linphone.activities.assistant.fragments.* +import org.linphone.activities.main.chat.fragments.ChatRoomCreationFragment import org.linphone.activities.main.chat.fragments.DetailChatRoomFragment +import org.linphone.activities.main.chat.fragments.GroupInfoFragment import org.linphone.activities.main.chat.fragments.MasterChatRoomsFragment import org.linphone.activities.main.contact.fragments.ContactEditorFragment +import org.linphone.activities.main.contact.fragments.DetailContactFragment import org.linphone.activities.main.contact.fragments.MasterContactsFragment +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.sidemenu.fragments.SideMenuFragment import org.linphone.contact.NativeContact @@ -65,12 +72,70 @@ fun getLeftToRightAnimationNavOptions(): NavOptions { .build() } -/* Chat related */ +fun getRightToLeftNoPopAnimationNavOptions(): NavOptions { + return NavOptions.Builder() + .setEnterAnim(R.anim.enter_right) + .setExitAnim(R.anim.exit_left) + .build() +} + +fun getLeftToRightNoPopAnimationNavOptions(): NavOptions { + return NavOptions.Builder() + .setEnterAnim(R.anim.enter_left) + .setExitAnim(R.anim.exit_right) + .build() +} + +/* Main activity related */ + +internal fun MainActivity.navigateToDialer(args: Bundle?) { + findNavController(R.id.nav_host_fragment).navigate( + R.id.action_global_dialerFragment, + args, + getRightToLeftAnimationNavOptions() + ) +} + +/* Tabs fragment related */ + +internal fun TabsFragment.navigateToCallHistory() { + when (findNavController().currentDestination?.id) { + R.id.masterContactsFragment -> findNavController().navigate(R.id.action_masterContactsFragment_to_masterCallLogsFragment, null, getLeftToRightNoPopAnimationNavOptions()) + R.id.dialerFragment -> findNavController().navigate(R.id.action_dialerFragment_to_masterCallLogsFragment, null, getLeftToRightNoPopAnimationNavOptions()) + R.id.masterChatRoomsFragment -> findNavController().navigate(R.id.action_masterChatRoomsFragment_to_masterCallLogsFragment, null, getLeftToRightNoPopAnimationNavOptions()) + } +} + +internal fun TabsFragment.navigateToContacts() { + when (findNavController().currentDestination?.id) { + R.id.masterCallLogsFragment -> findNavController().navigate(R.id.action_masterCallLogsFragment_to_masterContactsFragment, null, getRightToLeftNoPopAnimationNavOptions()) + R.id.dialerFragment -> findNavController().navigate(R.id.action_dialerFragment_to_masterContactsFragment, null, getLeftToRightNoPopAnimationNavOptions()) + R.id.masterChatRoomsFragment -> findNavController().navigate(R.id.action_masterChatRoomsFragment_to_masterContactsFragment, null, getLeftToRightNoPopAnimationNavOptions()) + } +} + +internal fun TabsFragment.navigateToDialer() { + when (findNavController().currentDestination?.id) { + R.id.masterCallLogsFragment -> findNavController().navigate(R.id.action_masterCallLogsFragment_to_dialerFragment, null, getRightToLeftNoPopAnimationNavOptions()) + R.id.masterContactsFragment -> findNavController().navigate(R.id.action_masterContactsFragment_to_dialerFragment, null, getRightToLeftNoPopAnimationNavOptions()) + R.id.masterChatRoomsFragment -> findNavController().navigate(R.id.action_masterChatRoomsFragment_to_dialerFragment, null, getLeftToRightNoPopAnimationNavOptions()) + } +} + +internal fun TabsFragment.navigateToChatRooms() { + when (findNavController().currentDestination?.id) { + R.id.masterCallLogsFragment -> findNavController().navigate(R.id.action_masterCallLogsFragment_to_masterChatRoomsFragment, null, getRightToLeftNoPopAnimationNavOptions()) + R.id.masterContactsFragment -> findNavController().navigate(R.id.action_masterContactsFragment_to_masterChatRoomsFragment, null, getRightToLeftNoPopAnimationNavOptions()) + R.id.dialerFragment -> findNavController().navigate(R.id.action_dialerFragment_to_masterChatRoomsFragment, null, getRightToLeftNoPopAnimationNavOptions()) + } +} + +/* Chat related */ internal fun MasterChatRoomsFragment.navigateToChatRoom() { if (!resources.getBoolean(R.bool.isTablet)) { if (findNavController().currentDestination?.id == R.id.masterChatRoomsFragment) { - findNavController().navigate(R.id.action_masterChatRoomsFragment_to_detailChatRoomFragment) + findNavController().navigate(R.id.action_masterChatRoomsFragment_to_detailChatRoomFragment, null, getRightToLeftAnimationNavOptions()) } } else { val navHostFragment = @@ -87,7 +152,8 @@ internal fun MasterChatRoomsFragment.navigateToChatRoomCreation( if (findNavController().currentDestination?.id == R.id.masterChatRoomsFragment) { findNavController().navigate( R.id.action_masterChatRoomsFragment_to_chatRoomCreationFragment, - bundle + bundle, + getRightToLeftAnimationNavOptions() ) } } else { @@ -107,17 +173,59 @@ internal fun DetailChatRoomFragment.navigateToChatRooms() { findMasterNavController().navigate(Uri.parse(deepLink), getLeftToRightAnimationNavOptions()) } -/* Contacts related */ +internal fun DetailChatRoomFragment.navigateToImdn(args: Bundle?) { + findNavController().navigate(R.id.action_detailChatRoomFragment_to_imdnFragment, args, getRightToLeftAnimationNavOptions()) +} + +internal fun DetailChatRoomFragment.navigateToDevices() { + findNavController().navigate(R.id.action_detailChatRoomFragment_to_devicesFragment, null, getRightToLeftAnimationNavOptions()) +} + +internal fun DetailChatRoomFragment.navigateToGroupInfo() { + findNavController().navigate(R.id.action_detailChatRoomFragment_to_groupInfoFragment, null, getRightToLeftAnimationNavOptions()) +} + +internal fun DetailChatRoomFragment.navigateToEphemeralInfo() { + findNavController().navigate(R.id.action_detailChatRoomFragment_to_ephemeralFragment, null, getRightToLeftAnimationNavOptions()) +} + +internal fun ChatRoomCreationFragment.navigateToGroupInfo(args: Bundle?) { + if (findNavController().currentDestination?.id == R.id.chatRoomCreationFragment) { + findNavController().navigate(R.id.action_chatRoomCreationFragment_to_groupInfoFragment, args, getRightToLeftAnimationNavOptions()) + } +} + +internal fun ChatRoomCreationFragment.navigateToChatRoom() { + if (findNavController().currentDestination?.id == R.id.chatRoomCreationFragment) { + findNavController().navigate(R.id.action_chatRoomCreationFragment_to_detailChatRoomFragment, null, getRightToLeftAnimationNavOptions()) + } +} + +internal fun GroupInfoFragment.navigateToChatRoomCreation(args: Bundle?) { + if (findNavController().currentDestination?.id == R.id.groupInfoFragment) { + findNavController().navigate(R.id.action_groupInfoFragment_to_chatRoomCreationFragment, args, getLeftToRightAnimationNavOptions()) + } +} + +internal fun GroupInfoFragment.navigateToChatRoom() { + if (findNavController().currentDestination?.id == R.id.groupInfoFragment) { + findNavController().navigate(R.id.action_groupInfoFragment_to_detailChatRoomFragment, null, getRightToLeftAnimationNavOptions()) + } +} + +/* Contacts related */ internal fun MasterContactsFragment.navigateToContact() { if (!resources.getBoolean(R.bool.isTablet)) { if (findNavController().currentDestination?.id == R.id.masterContactsFragment) { - findNavController().navigate(R.id.action_masterContactsFragment_to_detailContactFragment) + findNavController().navigate(R.id.action_masterContactsFragment_to_detailContactFragment, + null, + getRightToLeftAnimationNavOptions()) } } else { val navHostFragment = childFragmentManager.findFragmentById(R.id.contacts_nav_container) as NavHostFragment - navHostFragment.navController.navigate(R.id.action_global_detailContactFragment) + navHostFragment.navController.navigate(R.id.action_global_detailContactFragment, null, getRightToLeftAnimationNavOptions()) } } @@ -125,7 +233,7 @@ internal fun MasterContactsFragment.navigateToContactEditor(sipUriToAdd: String? val bundle = if (sipUriToAdd != null) bundleOf("SipUri" to sipUriToAdd) else Bundle() if (!resources.getBoolean(R.bool.isTablet)) { if (findNavController().currentDestination?.id == R.id.masterContactsFragment) { - findNavController().navigate(R.id.action_masterContactsFragment_to_contactEditorFragment, bundle) + findNavController().navigate(R.id.action_masterContactsFragment_to_contactEditorFragment, bundle, getRightToLeftAnimationNavOptions()) } } else { val navHostFragment = @@ -143,12 +251,30 @@ internal fun ContactEditorFragment.navigateToContact(contact: NativeContact) { } } -/* History related */ +internal fun DetailContactFragment.navigateToChatRooms(args: Bundle?) { + findNavController().navigate(R.id.action_global_masterChatRoomsFragment, args, getRightToLeftAnimationNavOptions()) +} + +internal fun DetailContactFragment.navigateToDialer(args: Bundle?) { + findNavController().navigate( + R.id.action_global_dialerFragment, + args, + getRightToLeftAnimationNavOptions() + ) +} + +internal fun DetailContactFragment.navigateToContactEditor() { + findNavController().navigate(R.id.action_detailContactFragment_to_contactEditorFragment, null, getRightToLeftAnimationNavOptions()) +} + +/* History related */ internal fun MasterCallLogsFragment.navigateToCallHistory() { if (!resources.getBoolean(R.bool.isTablet)) { if (findNavController().currentDestination?.id == R.id.masterCallLogsFragment) { - findNavController().navigate(R.id.action_masterCallLogsFragment_to_detailCallLogFragment) + findNavController().navigate(R.id.action_masterCallLogsFragment_to_detailCallLogFragment, + null, + getRightToLeftAnimationNavOptions()) } } else { val navHostFragment = @@ -157,6 +283,14 @@ internal fun MasterCallLogsFragment.navigateToCallHistory() { } } +internal fun MasterCallLogsFragment.navigateToDialer(args: Bundle?) { + findNavController().navigate( + R.id.action_global_dialerFragment, + args, + getRightToLeftAnimationNavOptions() + ) +} + internal fun DetailCallLogFragment.navigateToContacts(sipUriToAdd: String) { val deepLink = "linphone-android://contact/new/$sipUriToAdd" findMasterNavController().navigate(Uri.parse(deepLink), getRightToLeftAnimationNavOptions()) @@ -172,7 +306,146 @@ internal fun DetailCallLogFragment.navigateToFriend(friendAddress: Address) { findMasterNavController().navigate(Uri.parse(deepLink), getRightToLeftAnimationNavOptions()) } -/* Settings related */ +internal fun DetailCallLogFragment.navigateToChatRooms(args: Bundle?) { + findNavController().navigate(R.id.action_global_masterChatRoomsFragment, args, getRightToLeftAnimationNavOptions()) +} + +internal fun DetailCallLogFragment.navigateToDialer(args: Bundle?) { + findNavController().navigate( + R.id.action_global_dialerFragment, + args, + getRightToLeftAnimationNavOptions() + ) +} + +/* Settings related */ + +internal fun SettingsFragment.navigateToAccountSettings(identity: String) { + val bundle = bundleOf("Identity" to identity) + if (!resources.getBoolean(R.bool.isTablet)) { + if (findNavController().currentDestination?.id == R.id.settingsFragment) { + findNavController().navigate( + R.id.action_settingsFragment_to_accountSettingsFragment, + bundle, + getRightToLeftAnimationNavOptions() + ) + } + } else { + val navHostFragment = + childFragmentManager.findFragmentById(R.id.settings_nav_container) as NavHostFragment + navHostFragment.navController.navigate(R.id.action_global_accountSettingsFragment, bundle) + } +} + +internal fun SettingsFragment.navigateToTunnelSettings() { + if (!resources.getBoolean(R.bool.isTablet)) { + if (findNavController().currentDestination?.id == R.id.settingsFragment) { + findNavController().navigate(R.id.action_settingsFragment_to_tunnelSettingsFragment, null, getRightToLeftAnimationNavOptions()) + } + } else { + val navHostFragment = + childFragmentManager.findFragmentById(R.id.settings_nav_container) as NavHostFragment + navHostFragment.navController.navigate(R.id.action_global_tunnelSettingsFragment) + } +} + +internal fun SettingsFragment.navigateToAudioSettings() { + if (!resources.getBoolean(R.bool.isTablet)) { + if (findNavController().currentDestination?.id == R.id.settingsFragment) { + findNavController().navigate(R.id.action_settingsFragment_to_audioSettingsFragment, null, getRightToLeftAnimationNavOptions()) + } + } else { + val navHostFragment = + childFragmentManager.findFragmentById(R.id.settings_nav_container) as NavHostFragment + navHostFragment.navController.navigate(R.id.action_global_audioSettingsFragment) + } +} + +internal fun SettingsFragment.navigateToVideoSettings() { + if (!resources.getBoolean(R.bool.isTablet)) { + if (findNavController().currentDestination?.id == R.id.settingsFragment) { + findNavController().navigate(R.id.action_settingsFragment_to_videoSettingsFragment, null, getRightToLeftAnimationNavOptions()) + } + } else { + val navHostFragment = + childFragmentManager.findFragmentById(R.id.settings_nav_container) as NavHostFragment + navHostFragment.navController.navigate(R.id.action_global_videoSettingsFragment) + } +} + +internal fun SettingsFragment.navigateToCallSettings() { + if (!resources.getBoolean(R.bool.isTablet)) { + if (findNavController().currentDestination?.id == R.id.settingsFragment) { + findNavController().navigate(R.id.action_settingsFragment_to_callSettingsFragment, null, getRightToLeftAnimationNavOptions()) + } + } else { + val navHostFragment = + childFragmentManager.findFragmentById(R.id.settings_nav_container) as NavHostFragment + navHostFragment.navController.navigate(R.id.action_global_callSettingsFragment) + } +} + +internal fun SettingsFragment.navigateToChatSettings() { + if (!resources.getBoolean(R.bool.isTablet)) { + if (findNavController().currentDestination?.id == R.id.settingsFragment) { + findNavController().navigate(R.id.action_settingsFragment_to_chatSettingsFragment, null, getRightToLeftAnimationNavOptions()) + } + } else { + val navHostFragment = + childFragmentManager.findFragmentById(R.id.settings_nav_container) as NavHostFragment + navHostFragment.navController.navigate(R.id.action_global_chatSettingsFragment) + } +} + +internal fun SettingsFragment.navigateToNetworkSettings() { + if (!resources.getBoolean(R.bool.isTablet)) { + if (findNavController().currentDestination?.id == R.id.settingsFragment) { + findNavController().navigate(R.id.action_settingsFragment_to_networkSettingsFragment, null, getRightToLeftAnimationNavOptions()) + } + } else { + val navHostFragment = + childFragmentManager.findFragmentById(R.id.settings_nav_container) as NavHostFragment + navHostFragment.navController.navigate(R.id.action_global_networkSettingsFragment) + } +} + +internal fun SettingsFragment.navigateToContactsSettings() { + if (!resources.getBoolean(R.bool.isTablet)) { + if (findNavController().currentDestination?.id == R.id.settingsFragment) { + findNavController().navigate(R.id.action_settingsFragment_to_contactsSettingsFragment, null, getRightToLeftAnimationNavOptions()) + } + } else { + val navHostFragment = + childFragmentManager.findFragmentById(R.id.settings_nav_container) as NavHostFragment + navHostFragment.navController.navigate(R.id.action_global_contactsSettingsFragment) + } +} + +internal fun SettingsFragment.navigateToAdvancedSettings() { + if (!resources.getBoolean(R.bool.isTablet)) { + if (findNavController().currentDestination?.id == R.id.settingsFragment) { + findNavController().navigate(R.id.action_settingsFragment_to_advancedSettingsFragment, null, getRightToLeftAnimationNavOptions()) + } + } else { + val navHostFragment = + childFragmentManager.findFragmentById(R.id.settings_nav_container) as NavHostFragment + navHostFragment.navController.navigate(R.id.action_global_advancedSettingsFragment) + } +} + +internal fun AccountSettingsFragment.navigateToPhoneLinking(args: Bundle?) { + findNavController().navigate( + R.id.action_accountSettingsFragment_to_phoneAccountLinkingFragment, + args, + getRightToLeftAnimationNavOptions() + ) +} + +internal fun PhoneAccountLinkingFragment.navigateToPhoneAccountValidation(args: Bundle?) { + findNavController().navigate(R.id.action_phoneAccountLinkingFragment_to_phoneAccountValidationFragment, args, getRightToLeftAnimationNavOptions()) +} + +/* Side menu related */ internal fun SideMenuFragment.navigateToAccountSettings(identity: String) { if (!resources.getBoolean(R.bool.isTablet)) { @@ -186,114 +459,80 @@ internal fun SideMenuFragment.navigateToAccountSettings(identity: String) { } } -internal fun SettingsFragment.navigateToAccountSettings(identity: String) { - val bundle = bundleOf("Identity" to identity) - if (!resources.getBoolean(R.bool.isTablet)) { - if (findNavController().currentDestination?.id == R.id.settingsFragment) { - findNavController().navigate( - R.id.action_settingsFragment_to_accountSettingsFragment, - bundle - ) - } - } else { - val navHostFragment = - childFragmentManager.findFragmentById(R.id.settings_nav_container) as NavHostFragment - navHostFragment.navController.navigate(R.id.action_global_accountSettingsFragment, bundle) - } +internal fun SideMenuFragment.navigateToSettings() { + findNavController().navigate(R.id.action_global_settingsFragment, null, getRightToLeftAnimationNavOptions()) } -internal fun SettingsFragment.navigateToTunnelSettings() { - if (!resources.getBoolean(R.bool.isTablet)) { - if (findNavController().currentDestination?.id == R.id.settingsFragment) { - findNavController().navigate(R.id.action_settingsFragment_to_tunnelSettingsFragment) - } - } else { - val navHostFragment = - childFragmentManager.findFragmentById(R.id.settings_nav_container) as NavHostFragment - navHostFragment.navController.navigate(R.id.action_global_tunnelSettingsFragment) - } +internal fun SideMenuFragment.navigateToAbout() { + findNavController().navigate(R.id.action_global_aboutFragment, null, getRightToLeftAnimationNavOptions()) } -internal fun SettingsFragment.navigateToAudioSettings() { - if (!resources.getBoolean(R.bool.isTablet)) { - if (findNavController().currentDestination?.id == R.id.settingsFragment) { - findNavController().navigate(R.id.action_settingsFragment_to_audioSettingsFragment) - } - } else { - val navHostFragment = - childFragmentManager.findFragmentById(R.id.settings_nav_container) as NavHostFragment - navHostFragment.navController.navigate(R.id.action_global_audioSettingsFragment) - } +internal fun SideMenuFragment.navigateToRecordings() { + findNavController().navigate(R.id.action_global_recordingsFragment, null, getRightToLeftAnimationNavOptions()) } -internal fun SettingsFragment.navigateToVideoSettings() { - if (!resources.getBoolean(R.bool.isTablet)) { - if (findNavController().currentDestination?.id == R.id.settingsFragment) { - findNavController().navigate(R.id.action_settingsFragment_to_videoSettingsFragment) - } - } else { - val navHostFragment = - childFragmentManager.findFragmentById(R.id.settings_nav_container) as NavHostFragment - navHostFragment.navController.navigate(R.id.action_global_videoSettingsFragment) - } +/* Assistant related */ + +internal fun WelcomeFragment.navigateToEmailAccountCreation() { + findNavController().navigate(R.id.action_welcomeFragment_to_emailAccountCreationFragment, null, getRightToLeftAnimationNavOptions()) } -internal fun SettingsFragment.navigateToCallSettings() { - if (!resources.getBoolean(R.bool.isTablet)) { - if (findNavController().currentDestination?.id == R.id.settingsFragment) { - findNavController().navigate(R.id.action_settingsFragment_to_callSettingsFragment) - } - } else { - val navHostFragment = - childFragmentManager.findFragmentById(R.id.settings_nav_container) as NavHostFragment - navHostFragment.navController.navigate(R.id.action_global_callSettingsFragment) - } +internal fun WelcomeFragment.navigateToPhoneAccountCreation() { + findNavController().navigate(R.id.action_welcomeFragment_to_phoneAccountCreationFragment, null, getRightToLeftAnimationNavOptions()) } -internal fun SettingsFragment.navigateToChatSettings() { - if (!resources.getBoolean(R.bool.isTablet)) { - if (findNavController().currentDestination?.id == R.id.settingsFragment) { - findNavController().navigate(R.id.action_settingsFragment_to_chatSettingsFragment) - } - } else { - val navHostFragment = - childFragmentManager.findFragmentById(R.id.settings_nav_container) as NavHostFragment - navHostFragment.navController.navigate(R.id.action_global_chatSettingsFragment) - } +internal fun WelcomeFragment.navigateToAccountLogin() { + findNavController().navigate(R.id.action_welcomeFragment_to_accountLoginFragment, null, getRightToLeftAnimationNavOptions()) } -internal fun SettingsFragment.navigateToNetworkSettings() { - if (!resources.getBoolean(R.bool.isTablet)) { - if (findNavController().currentDestination?.id == R.id.settingsFragment) { - findNavController().navigate(R.id.action_settingsFragment_to_networkSettingsFragment) - } - } else { - val navHostFragment = - childFragmentManager.findFragmentById(R.id.settings_nav_container) as NavHostFragment - navHostFragment.navController.navigate(R.id.action_global_networkSettingsFragment) - } +internal fun WelcomeFragment.navigateToGenericLogin() { + findNavController().navigate(R.id.action_welcomeFragment_to_genericAccountLoginFragment, null, getRightToLeftAnimationNavOptions()) } -internal fun SettingsFragment.navigateToContactsSettings() { - if (!resources.getBoolean(R.bool.isTablet)) { - if (findNavController().currentDestination?.id == R.id.settingsFragment) { - findNavController().navigate(R.id.action_settingsFragment_to_contactsSettingsFragment) - } - } else { - val navHostFragment = - childFragmentManager.findFragmentById(R.id.settings_nav_container) as NavHostFragment - navHostFragment.navController.navigate(R.id.action_global_contactsSettingsFragment) - } +internal fun WelcomeFragment.navigateToRemoteProvisioning() { + findNavController().navigate(R.id.action_welcomeFragment_to_remoteProvisioningFragment, null, getRightToLeftAnimationNavOptions()) } -internal fun SettingsFragment.navigateToAdvancedSettings() { - if (!resources.getBoolean(R.bool.isTablet)) { - if (findNavController().currentDestination?.id == R.id.settingsFragment) { - findNavController().navigate(R.id.action_settingsFragment_to_advancedSettingsFragment) - } - } else { - val navHostFragment = - childFragmentManager.findFragmentById(R.id.settings_nav_container) as NavHostFragment - navHostFragment.navController.navigate(R.id.action_global_advancedSettingsFragment) - } +internal fun AccountLoginFragment.navigateToEchoCancellerCalibration() { + findNavController().navigate(R.id.action_accountLoginFragment_to_echoCancellerCalibrationFragment, null, getRightToLeftAnimationNavOptions()) +} + +internal fun AccountLoginFragment.navigateToPhoneAccountValidation(args: Bundle?) { + findNavController().navigate(R.id.action_accountLoginFragment_to_phoneAccountValidationFragment, args, getRightToLeftAnimationNavOptions()) +} + +internal fun GenericAccountLoginFragment.navigateToEchoCancellerCalibration() { + findNavController().navigate(R.id.action_genericAccountLoginFragment_to_echoCancellerCalibrationFragment, null, getRightToLeftAnimationNavOptions()) +} + +internal fun RemoteProvisioningFragment.navigateToQrCode() { + findNavController().navigate(R.id.action_remoteProvisioningFragment_to_qrCodeFragment, null, getRightToLeftAnimationNavOptions()) +} + +internal fun RemoteProvisioningFragment.navigateToEchoCancellerCalibration() { + findNavController().navigate(R.id.action_remoteProvisioningFragment_to_echoCancellerCalibrationFragment, null, getRightToLeftAnimationNavOptions()) +} + +internal fun EmailAccountCreationFragment.navigateToEmailAccountValidation() { + findNavController().navigate(R.id.action_emailAccountCreationFragment_to_emailAccountValidationFragment, null, getRightToLeftAnimationNavOptions()) +} + +internal fun EmailAccountValidationFragment.navigateToAccountLinking(args: Bundle?) { + findNavController().navigate(R.id.action_emailAccountValidationFragment_to_phoneAccountLinkingFragment, args, getRightToLeftAnimationNavOptions()) +} + +internal fun PhoneAccountCreationFragment.navigateToPhoneAccountValidation(args: Bundle?) { + findNavController().navigate(R.id.action_phoneAccountCreationFragment_to_phoneAccountValidationFragment, args, getRightToLeftAnimationNavOptions()) +} + +internal fun PhoneAccountValidationFragment.navigateToAccountSettings(args: Bundle?) { + findNavController().navigate(R.id.action_phoneAccountValidationFragment_to_accountSettingsFragment, args, getLeftToRightAnimationNavOptions()) +} + +internal fun PhoneAccountValidationFragment.navigateToEchoCancellerCalibration() { + findNavController().navigate(R.id.action_phoneAccountValidationFragment_to_echoCancellerCalibrationFragment, null, getRightToLeftAnimationNavOptions()) +} + +internal fun PhoneAccountLinkingFragment.navigateToEchoCancellerCalibration() { + findNavController().navigate(R.id.action_phoneAccountLinkingFragment_to_echoCancellerCalibrationFragment, null, getRightToLeftAnimationNavOptions()) } 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 d0644bd6c..f5f46aed9 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 @@ -32,6 +32,8 @@ import org.linphone.activities.main.MainActivity import org.linphone.activities.main.chat.adapters.ChatRoomCreationContactsAdapter import org.linphone.activities.main.chat.viewmodels.ChatRoomCreationViewModel import org.linphone.activities.main.fragments.SecureFragment +import org.linphone.activities.main.navigateToChatRoom +import org.linphone.activities.main.navigateToGroupInfo import org.linphone.activities.main.viewmodels.SharedMainViewModel import org.linphone.core.Address import org.linphone.core.tools.Log @@ -108,9 +110,7 @@ class ChatRoomCreationFragment : SecureFragment viewModel.chatRoomCreatedEvent.observe(viewLifecycleOwner, { it.consume { chatRoom -> sharedViewModel.selectedChatRoom.value = chatRoom - if (findNavController().currentDestination?.id == R.id.chatRoomCreationFragment) { - findNavController().navigate(R.id.action_chatRoomCreationFragment_to_detailChatRoomFragment) - } + navigateToChatRoom() } }) @@ -133,12 +133,9 @@ class ChatRoomCreationFragment : SecureFragment // Next button is only used to go to group chat info fragment binding.setNextClickListener { sharedViewModel.createEncryptedChatRoom = viewModel.isEncrypted.value == true - - if (findNavController().currentDestination?.id == R.id.chatRoomCreationFragment) { - val args = Bundle() - args.putSerializable("participants", viewModel.selectedAddresses.value) - findNavController().navigate(R.id.action_chatRoomCreationFragment_to_groupInfoFragment, args) - } + val args = Bundle() + args.putSerializable("participants", viewModel.selectedAddresses.value) + navigateToGroupInfo(args) } viewModel.onErrorEvent.observe(viewLifecycleOwner, { 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 19f215f98..2bae06f97 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 @@ -41,13 +41,14 @@ import kotlinx.coroutines.launch import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.R -import org.linphone.activities.main.MainActivity +import org.linphone.activities.main.* import org.linphone.activities.main.chat.ChatScrollListener import org.linphone.activities.main.chat.adapters.ChatMessagesListAdapter import org.linphone.activities.main.chat.viewmodels.* import org.linphone.activities.main.fragments.MasterFragment import org.linphone.activities.main.navigateToChatRooms import org.linphone.activities.main.navigateToContacts +import org.linphone.activities.main.navigateToImdn import org.linphone.activities.main.viewmodels.DialogViewModel import org.linphone.activities.main.viewmodels.SharedMainViewModel import org.linphone.core.* @@ -184,7 +185,7 @@ class DetailChatRoomFragment : MasterFragment val args = Bundle() args.putString("MessageId", chatMessage.messageId) - findNavController().navigate(R.id.action_detailChatRoomFragment_to_imdnFragment, args) + navigateToImdn(args) } }) @@ -344,7 +345,7 @@ class DetailChatRoomFragment : MasterFragment() { viewModel.createdChatRoomEvent.observe(viewLifecycleOwner, { it.consume { chatRoom -> sharedViewModel.selectedChatRoom.value = chatRoom - goToChatRoom() + navigateToChatRoom() } }) @@ -126,18 +128,14 @@ class GroupInfoFragment : SecureFragment() { binding.setParticipantsClickListener { sharedViewModel.createEncryptedChatRoom = viewModel.isEncrypted.value == true - if (findNavController().currentDestination?.id == R.id.groupInfoFragment) { - val args = Bundle() - args.putBoolean("createGroup", true) - - val list = arrayListOf
() - for (participant in viewModel.participants.value.orEmpty()) { - list.add(participant.address) - } - args.putSerializable("participants", list) - - findNavController().navigate(R.id.action_groupInfoFragment_to_chatRoomCreationFragment, args) + val args = Bundle() + args.putBoolean("createGroup", true) + val list = arrayListOf
() + for (participant in viewModel.participants.value.orEmpty()) { + list.add(participant.address) } + args.putSerializable("participants", list) + navigateToChatRoomCreation(args) } binding.setLeaveClickListener { @@ -185,12 +183,6 @@ class GroupInfoFragment : SecureFragment() { } } - private fun goToChatRoom() { - if (findNavController().currentDestination?.id == R.id.groupInfoFragment) { - findNavController().navigate(R.id.action_groupInfoFragment_to_detailChatRoomFragment) - } - } - private fun showMeAdminStateChanged(isMeAdmin: Boolean) { meAdminStatusChangedDialog?.dismiss() 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 fde2c0c14..18ec351aa 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 @@ -32,6 +32,9 @@ import org.linphone.activities.GenericFragment import org.linphone.activities.main.MainActivity import org.linphone.activities.main.contact.viewmodels.ContactViewModel import org.linphone.activities.main.contact.viewmodels.ContactViewModelFactory +import org.linphone.activities.main.navigateToChatRooms +import org.linphone.activities.main.navigateToContactEditor +import org.linphone.activities.main.navigateToDialer import org.linphone.activities.main.viewmodels.DialogViewModel import org.linphone.activities.main.viewmodels.SharedMainViewModel import org.linphone.core.tools.Log @@ -76,10 +79,7 @@ class DetailContactFragment : GenericFragment() { args.putString("URI", address.asStringUriOnly()) args.putBoolean("Transfer", sharedViewModel.pendingCallTransfer) args.putBoolean("SkipAutoCallStart", true) // If auto start call setting is enabled, ignore it - findNavController().navigate( - R.id.action_global_dialerFragment, - args - ) + navigateToDialer(args) } else { coreContext.startCall(address) } @@ -92,7 +92,7 @@ class DetailContactFragment : GenericFragment() { val args = Bundle() args.putString("LocalSipUri", chatRoom.localAddress.asStringUriOnly()) args.putString("RemoteSipUri", chatRoom.peerAddress.asStringUriOnly()) - findNavController().navigate(R.id.action_global_masterChatRoomsFragment, args) + navigateToChatRooms(args) } } }) @@ -104,7 +104,7 @@ class DetailContactFragment : GenericFragment() { binding.setEditClickListener { if (findNavController().currentDestination?.id == R.id.detailContactFragment) { - findNavController().navigate(R.id.action_detailContactFragment_to_contactEditorFragment) + navigateToContactEditor() } } 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 14f4041e0..e51d81a50 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,6 +28,10 @@ import androidx.navigation.NavDestination import androidx.navigation.fragment.findNavController import org.linphone.R import org.linphone.activities.GenericFragment +import org.linphone.activities.main.navigateToCallHistory +import org.linphone.activities.main.navigateToChatRooms +import org.linphone.activities.main.navigateToContacts +import org.linphone.activities.main.navigateToDialer import org.linphone.activities.main.viewmodels.TabsViewModel import org.linphone.databinding.TabsFragmentBinding @@ -51,35 +55,19 @@ class TabsFragment : GenericFragment(), NavController.OnDes binding.viewModel = viewModel binding.setHistoryClickListener { - when (findNavController().currentDestination?.id) { - R.id.masterContactsFragment -> findNavController().navigate(R.id.action_masterContactsFragment_to_masterCallLogsFragment) - R.id.dialerFragment -> findNavController().navigate(R.id.action_dialerFragment_to_masterCallLogsFragment) - R.id.masterChatRoomsFragment -> findNavController().navigate(R.id.action_masterChatRoomsFragment_to_masterCallLogsFragment) - } + navigateToCallHistory() } binding.setContactsClickListener { - when (findNavController().currentDestination?.id) { - R.id.masterCallLogsFragment -> findNavController().navigate(R.id.action_masterCallLogsFragment_to_masterContactsFragment) - R.id.dialerFragment -> findNavController().navigate(R.id.action_dialerFragment_to_masterContactsFragment) - R.id.masterChatRoomsFragment -> findNavController().navigate(R.id.action_masterChatRoomsFragment_to_masterContactsFragment) - } + navigateToContacts() } binding.setDialerClickListener { - when (findNavController().currentDestination?.id) { - R.id.masterCallLogsFragment -> findNavController().navigate(R.id.action_masterCallLogsFragment_to_dialerFragment) - R.id.masterContactsFragment -> findNavController().navigate(R.id.action_masterContactsFragment_to_dialerFragment) - R.id.masterChatRoomsFragment -> findNavController().navigate(R.id.action_masterChatRoomsFragment_to_dialerFragment) - } + navigateToDialer() } binding.setChatClickListener { - when (findNavController().currentDestination?.id) { - R.id.masterCallLogsFragment -> findNavController().navigate(R.id.action_masterCallLogsFragment_to_masterChatRoomsFragment) - R.id.masterContactsFragment -> findNavController().navigate(R.id.action_masterContactsFragment_to_masterChatRoomsFragment) - R.id.dialerFragment -> findNavController().navigate(R.id.action_dialerFragment_to_masterChatRoomsFragment) - } + navigateToChatRooms() } bounceAnimator.addUpdateListener { 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 205880611..894ef2934 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 @@ -26,7 +26,7 @@ import androidx.navigation.fragment.findNavController import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.R import org.linphone.activities.GenericFragment -import org.linphone.activities.main.MainActivity +import org.linphone.activities.main.* import org.linphone.activities.main.history.viewmodels.CallLogViewModel import org.linphone.activities.main.history.viewmodels.CallLogViewModelFactory import org.linphone.activities.main.navigateToContact @@ -95,10 +95,7 @@ class DetailCallLogFragment : GenericFragment() { args.putString("URI", address.asStringUriOnly()) args.putBoolean("Transfer", sharedViewModel.pendingCallTransfer) args.putBoolean("SkipAutoCallStart", true) // If auto start call setting is enabled, ignore it - findNavController().navigate( - R.id.action_global_dialerFragment, - args - ) + navigateToDialer(args) } else { coreContext.startCall(address) } @@ -111,7 +108,7 @@ class DetailCallLogFragment : GenericFragment() { val args = Bundle() args.putString("LocalSipUri", chatRoom.localAddress.asStringUriOnly()) args.putString("RemoteSipUri", chatRoom.peerAddress.asStringUriOnly()) - findNavController().navigate(R.id.action_global_masterChatRoomsFragment, args) + navigateToChatRooms(args) } } }) 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 123c70851..8a15dcd9c 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 @@ -23,7 +23,6 @@ import android.app.Dialog import android.os.Bundle import androidx.core.content.ContextCompat import androidx.lifecycle.ViewModelProvider -import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.LinearLayoutManager @@ -35,6 +34,7 @@ import org.linphone.activities.main.history.adapters.CallLogsListAdapter import org.linphone.activities.main.history.viewmodels.CallLogsListViewModel import org.linphone.activities.main.history.viewmodels.GroupedCallLogViewModel import org.linphone.activities.main.navigateToCallHistory +import org.linphone.activities.main.navigateToDialer import org.linphone.activities.main.viewmodels.DialogViewModel import org.linphone.activities.main.viewmodels.SharedMainViewModel import org.linphone.activities.main.viewmodels.TabsViewModel @@ -166,10 +166,7 @@ class MasterCallLogsFragment : MasterFragment( args.putString("Username", authInfo.username) args.putString("Password", authInfo.password) args.putString("HA1", authInfo.ha1) - findNavController().navigate( - R.id.action_accountSettingsFragment_to_phoneAccountLinkingFragment, - args - ) + navigateToPhoneLinking(args) } } } 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 00ff2474e..5dbba0e3b 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 @@ -27,14 +27,16 @@ import android.os.Parcelable import android.provider.MediaStore import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope -import androidx.navigation.fragment.findNavController import java.io.File import kotlinx.coroutines.launch import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.R import org.linphone.activities.GenericFragment import org.linphone.activities.assistant.AssistantActivity +import org.linphone.activities.main.navigateToAbout import org.linphone.activities.main.navigateToAccountSettings +import org.linphone.activities.main.navigateToRecordings +import org.linphone.activities.main.navigateToSettings import org.linphone.activities.main.settings.SettingListenerStub import org.linphone.activities.main.sidemenu.viewmodels.SideMenuViewModel import org.linphone.activities.main.viewmodels.SharedMainViewModel @@ -91,17 +93,17 @@ class SideMenuFragment : GenericFragment() { binding.setSettingsClickListener { sharedViewModel.toggleDrawerEvent.value = Event(true) - findNavController().navigate(R.id.action_global_settingsFragment) + navigateToSettings() } binding.setRecordingsClickListener { sharedViewModel.toggleDrawerEvent.value = Event(true) - findNavController().navigate(R.id.action_global_recordingsFragment) + navigateToRecordings() } binding.setAboutClickListener { sharedViewModel.toggleDrawerEvent.value = Event(true) - findNavController().navigate(R.id.action_global_aboutFragment) + navigateToAbout() } binding.setQuitClickListener { diff --git a/app/src/main/res/navigation/assistant_nav_graph.xml b/app/src/main/res/navigation/assistant_nav_graph.xml index ab3ba8086..84344ceac 100644 --- a/app/src/main/res/navigation/assistant_nav_graph.xml +++ b/app/src/main/res/navigation/assistant_nav_graph.xml @@ -12,38 +12,18 @@ android:label="WelcomeFragment" > \ No newline at end of file diff --git a/app/src/main/res/navigation/chat_nav_graph.xml b/app/src/main/res/navigation/chat_nav_graph.xml index 003362158..cc4e1d864 100644 --- a/app/src/main/res/navigation/chat_nav_graph.xml +++ b/app/src/main/res/navigation/chat_nav_graph.xml @@ -12,31 +12,15 @@ android:label="DetailChatRoomFragment" > diff --git a/app/src/main/res/navigation/main_nav_graph.xml b/app/src/main/res/navigation/main_nav_graph.xml index d3eb14f99..8d1753800 100644 --- a/app/src/main/res/navigation/main_nav_graph.xml +++ b/app/src/main/res/navigation/main_nav_graph.xml @@ -12,39 +12,25 @@ tools:layout="@layout/chat_room_master_fragment" > @@ -211,20 +167,12 @@ android:defaultValue="false" /> @@ -380,10 +276,6 @@