Fixes & improvements for landscape & tablets

This commit is contained in:
Sylvain Berfini 2020-10-28 10:47:06 +01:00
parent 6600b92d1e
commit de21f21331
10 changed files with 157 additions and 38 deletions

View file

@ -38,6 +38,7 @@ 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.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
@ -78,16 +79,16 @@ fun getLeftToRightAnimationNavOptions(): NavOptions {
fun getRightToLeftNoPopAnimationNavOptions(): NavOptions {
if (!corePreferences.enableAnimations) return NavOptions.Builder().build()
return NavOptions.Builder()
.setEnterAnim(R.anim.enter_right)
.setExitAnim(R.anim.exit_left)
.setEnterAnim(R.anim.enter_right_or_bottom)
.setExitAnim(R.anim.exit_left_or_top)
.build()
}
fun getLeftToRightNoPopAnimationNavOptions(): NavOptions {
if (!corePreferences.enableAnimations) return NavOptions.Builder().build()
return NavOptions.Builder()
.setEnterAnim(R.anim.enter_left)
.setExitAnim(R.anim.exit_right)
.setEnterAnim(R.anim.enter_left_or_top)
.setExitAnim(R.anim.exit_right_or_bottom)
.build()
}
@ -183,6 +184,13 @@ internal fun TabsFragment.navigateToChatRooms() {
}
}
/* Dialer related */
internal fun DialerFragment.navigateToContacts(uriToAdd: String?) {
val deepLink = "linphone-android://contact/new/$uriToAdd"
findNavController().navigate(Uri.parse(deepLink), getLeftToRightNoPopAnimationNavOptions())
}
/* Chat related */
internal fun MasterChatRoomsFragment.navigateToChatRoom() {
@ -197,7 +205,11 @@ internal fun MasterChatRoomsFragment.navigateToChatRoom() {
} else {
val navHostFragment =
childFragmentManager.findFragmentById(R.id.chat_nav_container) as NavHostFragment
navHostFragment.navController.navigate(R.id.action_global_detailChatRoomFragment)
navHostFragment.navController.navigate(
R.id.action_global_detailChatRoomFragment,
null,
getRightToLeftAnimationNavOptions()
)
}
}
@ -216,7 +228,11 @@ internal fun MasterChatRoomsFragment.navigateToChatRoomCreation(
} else {
val navHostFragment =
childFragmentManager.findFragmentById(R.id.chat_nav_container) as NavHostFragment
navHostFragment.navController.navigate(R.id.action_global_chatRoomCreationFragment, bundle)
navHostFragment.navController.navigate(
R.id.action_global_chatRoomCreationFragment,
bundle,
getRightToLeftAnimationNavOptions()
)
}
}
@ -341,21 +357,21 @@ internal fun MasterContactsFragment.navigateToContactEditor(sipUriToAdd: String?
} else {
val navHostFragment =
childFragmentManager.findFragmentById(R.id.contacts_nav_container) as NavHostFragment
navHostFragment.navController.navigate(R.id.action_global_contactEditorFragment, bundle)
navHostFragment.navController.navigate(
R.id.action_global_contactEditorFragment,
bundle,
getRightToLeftAnimationNavOptions()
)
}
}
internal fun ContactEditorFragment.navigateToContact(contact: NativeContact) {
val deepLink = "linphone-android://contact/view/${contact.nativeId}"
if (!resources.getBoolean(R.bool.isTablet)) {
findMasterNavController().navigate(Uri.parse(deepLink), getRightToLeftAnimationNavOptions())
} else {
findMasterNavController().navigate(Uri.parse(deepLink))
}
}
internal fun DetailContactFragment.navigateToChatRooms(args: Bundle?) {
findNavController().navigate(
findMasterNavController().navigate(
R.id.action_global_masterChatRoomsFragment,
args,
getRightToLeftAnimationNavOptions()
@ -363,7 +379,7 @@ internal fun DetailContactFragment.navigateToChatRooms(args: Bundle?) {
}
internal fun DetailContactFragment.navigateToDialer(args: Bundle?) {
findNavController().navigate(
findMasterNavController().navigate(
R.id.action_global_dialerFragment,
args,
getRightToLeftAnimationNavOptions()
@ -385,14 +401,20 @@ internal fun DetailContactFragment.navigateToContactEditor() {
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())
getRightToLeftAnimationNavOptions()
)
}
} else {
val navHostFragment =
childFragmentManager.findFragmentById(R.id.history_nav_container) as NavHostFragment
navHostFragment.navController.navigate(R.id.action_global_detailCallLogFragment)
navHostFragment.navController.navigate(
R.id.action_global_detailCallLogFragment,
null,
getRightToLeftAnimationNavOptions()
)
}
}
@ -420,7 +442,7 @@ internal fun DetailCallLogFragment.navigateToFriend(friendAddress: Address) {
}
internal fun DetailCallLogFragment.navigateToChatRooms(args: Bundle?) {
findNavController().navigate(
findMasterNavController().navigate(
R.id.action_global_masterChatRoomsFragment,
args,
getRightToLeftAnimationNavOptions()
@ -428,7 +450,7 @@ internal fun DetailCallLogFragment.navigateToChatRooms(args: Bundle?) {
}
internal fun DetailCallLogFragment.navigateToDialer(args: Bundle?) {
findNavController().navigate(
findMasterNavController().navigate(
R.id.action_global_dialerFragment,
args,
getRightToLeftAnimationNavOptions()
@ -450,7 +472,11 @@ internal fun SettingsFragment.navigateToAccountSettings(identity: String) {
} else {
val navHostFragment =
childFragmentManager.findFragmentById(R.id.settings_nav_container) as NavHostFragment
navHostFragment.navController.navigate(R.id.action_global_accountSettingsFragment, bundle)
navHostFragment.navController.navigate(
R.id.action_global_accountSettingsFragment,
bundle,
getRightToLeftAnimationNavOptions()
)
}
}
@ -466,7 +492,11 @@ internal fun SettingsFragment.navigateToTunnelSettings() {
} else {
val navHostFragment =
childFragmentManager.findFragmentById(R.id.settings_nav_container) as NavHostFragment
navHostFragment.navController.navigate(R.id.action_global_tunnelSettingsFragment)
navHostFragment.navController.navigate(
R.id.action_global_tunnelSettingsFragment,
null,
getRightToLeftAnimationNavOptions()
)
}
}
@ -482,7 +512,11 @@ internal fun SettingsFragment.navigateToAudioSettings() {
} else {
val navHostFragment =
childFragmentManager.findFragmentById(R.id.settings_nav_container) as NavHostFragment
navHostFragment.navController.navigate(R.id.action_global_audioSettingsFragment)
navHostFragment.navController.navigate(
R.id.action_global_audioSettingsFragment,
null,
getRightToLeftAnimationNavOptions()
)
}
}
@ -498,7 +532,11 @@ internal fun SettingsFragment.navigateToVideoSettings() {
} else {
val navHostFragment =
childFragmentManager.findFragmentById(R.id.settings_nav_container) as NavHostFragment
navHostFragment.navController.navigate(R.id.action_global_videoSettingsFragment)
navHostFragment.navController.navigate(
R.id.action_global_videoSettingsFragment,
null,
getRightToLeftAnimationNavOptions()
)
}
}
@ -514,7 +552,11 @@ internal fun SettingsFragment.navigateToCallSettings() {
} else {
val navHostFragment =
childFragmentManager.findFragmentById(R.id.settings_nav_container) as NavHostFragment
navHostFragment.navController.navigate(R.id.action_global_callSettingsFragment)
navHostFragment.navController.navigate(
R.id.action_global_callSettingsFragment,
null,
getRightToLeftAnimationNavOptions()
)
}
}
@ -530,7 +572,11 @@ internal fun SettingsFragment.navigateToChatSettings() {
} else {
val navHostFragment =
childFragmentManager.findFragmentById(R.id.settings_nav_container) as NavHostFragment
navHostFragment.navController.navigate(R.id.action_global_chatSettingsFragment)
navHostFragment.navController.navigate(
R.id.action_global_chatSettingsFragment,
null,
getRightToLeftAnimationNavOptions()
)
}
}
@ -546,7 +592,11 @@ internal fun SettingsFragment.navigateToNetworkSettings() {
} else {
val navHostFragment =
childFragmentManager.findFragmentById(R.id.settings_nav_container) as NavHostFragment
navHostFragment.navController.navigate(R.id.action_global_networkSettingsFragment)
navHostFragment.navController.navigate(
R.id.action_global_networkSettingsFragment,
null,
getRightToLeftAnimationNavOptions()
)
}
}
@ -562,7 +612,11 @@ internal fun SettingsFragment.navigateToContactsSettings() {
} else {
val navHostFragment =
childFragmentManager.findFragmentById(R.id.settings_nav_container) as NavHostFragment
navHostFragment.navController.navigate(R.id.action_global_contactsSettingsFragment)
navHostFragment.navController.navigate(
R.id.action_global_contactsSettingsFragment,
null,
getRightToLeftAnimationNavOptions()
)
}
}
@ -578,7 +632,11 @@ internal fun SettingsFragment.navigateToAdvancedSettings() {
} else {
val navHostFragment =
childFragmentManager.findFragmentById(R.id.settings_nav_container) as NavHostFragment
navHostFragment.navController.navigate(R.id.action_global_advancedSettingsFragment)
navHostFragment.navController.navigate(
R.id.action_global_advancedSettingsFragment,
null,
getRightToLeftAnimationNavOptions()
)
}
}
@ -605,15 +663,14 @@ internal fun PhoneAccountLinkingFragment.navigateToPhoneAccountValidation(args:
/* Side menu related */
internal fun SideMenuFragment.navigateToAccountSettings(identity: String) {
if (!resources.getBoolean(R.bool.isTablet)) {
val deepLink = if (!resources.getBoolean(R.bool.isTablet)) {
// If not a tablet, navigate directly to account settings fragment
val deepLink = "linphone-android://account-settings/$identity"
findNavController().navigate(Uri.parse(deepLink), getRightToLeftAnimationNavOptions())
"linphone-android://account-settings/$identity"
} else {
// On tablet, to keep the categories list on left side, navigate to settings fragment first
val deepLink = "linphone-android://settings/$identity"
findNavController().navigate(Uri.parse(deepLink))
"linphone-android://settings/$identity"
}
findNavController().navigate(Uri.parse(deepLink), getRightToLeftAnimationNavOptions())
}
internal fun SideMenuFragment.navigateToSettings() {

View file

@ -27,7 +27,6 @@ import android.content.Intent
import android.net.Uri
import android.os.Bundle
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import org.linphone.BuildConfig
import org.linphone.LinphoneApplication.Companion.coreContext
@ -36,6 +35,7 @@ import org.linphone.R
import org.linphone.activities.main.MainActivity
import org.linphone.activities.main.dialer.viewmodels.DialerViewModel
import org.linphone.activities.main.fragments.SecureFragment
import org.linphone.activities.main.navigateToContacts
import org.linphone.activities.main.viewmodels.DialogViewModel
import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.core.tools.Log
@ -64,9 +64,7 @@ class DialerFragment : SecureFragment<DialerFragmentBinding>() {
}
binding.setNewContactClickListener {
val deepLink = "linphone-android://contact/new/${viewModel.enteredUri.value}"
Log.i("[Dialer] Creating contact, starting deep link: $deepLink")
findNavController().navigate(Uri.parse(deepLink))
navigateToContacts(viewModel.enteredUri.value)
}
binding.setTransferCallClickListener {

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:fromXDelta="0%" android:toXDelta="0%"
android:fromYDelta="-100%p" android:toYDelta="0%"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:fromXDelta="0%" android:toXDelta="0%"
android:fromYDelta="100%p" android:toYDelta="0%"
android:duration="@android:integer/config_mediumAnimTime" />
</set>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:fromXDelta="0%" android:toXDelta="0%"
android:fromYDelta="0%" android:toYDelta="-100%p"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:fromXDelta="0%" android:toXDelta="0%"
android:fromYDelta="0%" android:toYDelta="100%p"
android:duration="@android:integer/config_mediumAnimTime" />
</set>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:fromXDelta="-100%p" android:toXDelta="0%"
android:fromYDelta="0%" android:toYDelta="0%"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:fromXDelta="100%p" android:toXDelta="0%"
android:fromYDelta="0%" android:toYDelta="0%"
android:duration="@android:integer/config_mediumAnimTime" />
</set>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:fromXDelta="0%" android:toXDelta="-100%p"
android:fromYDelta="0%" android:toYDelta="0%"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:fromXDelta="0%" android:toXDelta="100%p"
android:fromYDelta="0%" android:toYDelta="0%"
android:duration="@android:integer/config_mediumAnimTime" />
</set>