Using MaterialSharedAxis animations to properly handle directions when navigation back and forth betwen fragments + fixed multiple 'main' fragments in backstack + use viewLifecycleOwner instead of 'this' for binding lifecycle owner in fragments
This commit is contained in:
parent
3a8b892ee1
commit
fd6eb30d48
83 changed files with 435 additions and 533 deletions
|
@ -25,15 +25,19 @@ import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.activity.OnBackPressedCallback
|
import androidx.activity.OnBackPressedCallback
|
||||||
import androidx.activity.addCallback
|
import androidx.activity.addCallback
|
||||||
|
import androidx.core.view.doOnPreDraw
|
||||||
import androidx.databinding.DataBindingUtil
|
import androidx.databinding.DataBindingUtil
|
||||||
import androidx.databinding.ViewDataBinding
|
import androidx.databinding.ViewDataBinding
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.navigation.fragment.findNavController
|
import androidx.navigation.fragment.findNavController
|
||||||
|
import com.google.android.material.transition.MaterialSharedAxis
|
||||||
|
import org.linphone.LinphoneApplication.Companion.corePreferences
|
||||||
import org.linphone.core.tools.Log
|
import org.linphone.core.tools.Log
|
||||||
|
|
||||||
abstract class GenericFragment<T : ViewDataBinding> : Fragment() {
|
abstract class GenericFragment<T : ViewDataBinding> : Fragment() {
|
||||||
private var _binding: T? = null
|
private var _binding: T? = null
|
||||||
protected val binding get() = _binding!!
|
protected val binding get() = _binding!!
|
||||||
|
protected var useMaterialSharedAxisXForwardAnimation = true
|
||||||
|
|
||||||
protected val onBackPressedCallback = object : OnBackPressedCallback(true) {
|
protected val onBackPressedCallback = object : OnBackPressedCallback(true) {
|
||||||
override fun handleOnBackPressed() {
|
override fun handleOnBackPressed() {
|
||||||
|
@ -58,6 +62,20 @@ abstract class GenericFragment<T : ViewDataBinding> : Fragment() {
|
||||||
requireActivity().onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
|
requireActivity().onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onStart() {
|
||||||
|
super.onStart()
|
||||||
|
|
||||||
|
if (useMaterialSharedAxisXForwardAnimation && corePreferences.enableAnimations) {
|
||||||
|
enterTransition = MaterialSharedAxis(MaterialSharedAxis.X, true)
|
||||||
|
reenterTransition = MaterialSharedAxis(MaterialSharedAxis.X, true)
|
||||||
|
returnTransition = MaterialSharedAxis(MaterialSharedAxis.X, false)
|
||||||
|
exitTransition = MaterialSharedAxis(MaterialSharedAxis.X, false)
|
||||||
|
|
||||||
|
postponeEnterTransition()
|
||||||
|
binding.root.doOnPreDraw { startPostponedEnterTransition() }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun onDestroyView() {
|
override fun onDestroyView() {
|
||||||
super.onDestroyView()
|
super.onDestroyView()
|
||||||
_binding = null
|
_binding = null
|
||||||
|
|
|
@ -29,7 +29,6 @@ import androidx.navigation.findNavController
|
||||||
import androidx.navigation.fragment.NavHostFragment
|
import androidx.navigation.fragment.NavHostFragment
|
||||||
import androidx.navigation.fragment.findNavController
|
import androidx.navigation.fragment.findNavController
|
||||||
import androidx.slidingpanelayout.widget.SlidingPaneLayout
|
import androidx.slidingpanelayout.widget.SlidingPaneLayout
|
||||||
import org.linphone.LinphoneApplication.Companion.corePreferences
|
|
||||||
import org.linphone.R
|
import org.linphone.R
|
||||||
import org.linphone.activities.assistant.fragments.*
|
import org.linphone.activities.assistant.fragments.*
|
||||||
import org.linphone.activities.main.MainActivity
|
import org.linphone.activities.main.MainActivity
|
||||||
|
@ -53,111 +52,6 @@ internal fun Fragment.findMasterNavController(): NavController {
|
||||||
return parentFragment?.parentFragment?.findNavController() ?: findNavController()
|
return parentFragment?.parentFragment?.findNavController() ?: findNavController()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun computeSlidingPaneNavOptions(
|
|
||||||
slidingPane: SlidingPaneLayout,
|
|
||||||
popUpTo: Int = -1,
|
|
||||||
popUpInclusive: Boolean = false,
|
|
||||||
singleTop: Boolean = true
|
|
||||||
): NavOptions {
|
|
||||||
return if (slidingPane.isSlideable) {
|
|
||||||
popupTo(popUpTo, popUpInclusive, singleTop)
|
|
||||||
} else {
|
|
||||||
getRightToLeftAnimationNavOptions(popUpTo, popUpInclusive, singleTop)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getRightToLeftAnimationNavOptions(
|
|
||||||
popUpTo: Int = -1,
|
|
||||||
popUpInclusive: Boolean = false,
|
|
||||||
singleTop: Boolean = true
|
|
||||||
): NavOptions {
|
|
||||||
val builder = NavOptions.Builder()
|
|
||||||
builder.setPopUpTo(popUpTo, popUpInclusive).setLaunchSingleTop(singleTop)
|
|
||||||
if (!corePreferences.enableAnimations) return builder.build()
|
|
||||||
return builder
|
|
||||||
.setEnterAnim(R.anim.enter_right)
|
|
||||||
.setExitAnim(R.anim.exit_left)
|
|
||||||
.setPopEnterAnim(R.anim.enter_left)
|
|
||||||
.setPopExitAnim(R.anim.exit_right)
|
|
||||||
.build()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getLeftToRightAnimationNavOptions(
|
|
||||||
popUpTo: Int = -1,
|
|
||||||
popUpInclusive: Boolean = false,
|
|
||||||
singleTop: Boolean = true
|
|
||||||
): NavOptions {
|
|
||||||
val builder = NavOptions.Builder()
|
|
||||||
builder.setPopUpTo(popUpTo, popUpInclusive).setLaunchSingleTop(singleTop)
|
|
||||||
if (!corePreferences.enableAnimations) return builder.build()
|
|
||||||
return builder
|
|
||||||
.setEnterAnim(R.anim.enter_left)
|
|
||||||
.setExitAnim(R.anim.exit_right)
|
|
||||||
.setPopEnterAnim(R.anim.enter_right)
|
|
||||||
.setPopExitAnim(R.anim.exit_left)
|
|
||||||
.build()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getRightBottomToLeftTopAnimationNavOptions(
|
|
||||||
popUpTo: Int = -1,
|
|
||||||
popUpInclusive: Boolean = false,
|
|
||||||
singleTop: Boolean = true
|
|
||||||
): NavOptions {
|
|
||||||
val builder = NavOptions.Builder()
|
|
||||||
builder.setPopUpTo(popUpTo, popUpInclusive).setLaunchSingleTop(singleTop)
|
|
||||||
if (!corePreferences.enableAnimations) return builder.build()
|
|
||||||
return builder
|
|
||||||
.setEnterAnim(R.anim.enter_right_or_bottom)
|
|
||||||
.setExitAnim(R.anim.exit_left_or_top)
|
|
||||||
.setPopEnterAnim(R.anim.enter_left_or_top)
|
|
||||||
.setPopExitAnim(R.anim.exit_right_or_bottom)
|
|
||||||
.build()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getLeftTopToRightBottomAnimationNavOptions(
|
|
||||||
popUpTo: Int = -1,
|
|
||||||
popUpInclusive: Boolean = false,
|
|
||||||
singleTop: Boolean = true
|
|
||||||
): NavOptions {
|
|
||||||
val builder = NavOptions.Builder()
|
|
||||||
builder.setPopUpTo(popUpTo, popUpInclusive).setLaunchSingleTop(singleTop)
|
|
||||||
if (!corePreferences.enableAnimations) return builder.build()
|
|
||||||
return builder
|
|
||||||
.setEnterAnim(R.anim.enter_left_or_top)
|
|
||||||
.setExitAnim(R.anim.exit_right_or_bottom)
|
|
||||||
.setPopEnterAnim(R.anim.enter_right_or_bottom)
|
|
||||||
.setPopExitAnim(R.anim.exit_left_or_top)
|
|
||||||
.build()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getRightBottomToLeftTopNoPopAnimationNavOptions(
|
|
||||||
popUpTo: Int = -1,
|
|
||||||
popUpInclusive: Boolean = false,
|
|
||||||
singleTop: Boolean = true
|
|
||||||
): NavOptions {
|
|
||||||
val builder = NavOptions.Builder()
|
|
||||||
builder.setPopUpTo(popUpTo, popUpInclusive).setLaunchSingleTop(singleTop)
|
|
||||||
if (!corePreferences.enableAnimations) return builder.build()
|
|
||||||
return builder
|
|
||||||
.setEnterAnim(R.anim.enter_right_or_bottom)
|
|
||||||
.setExitAnim(R.anim.exit_left_or_top)
|
|
||||||
.build()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getLeftTopToRightBottomNoPopAnimationNavOptions(
|
|
||||||
popUpTo: Int = -1,
|
|
||||||
popUpInclusive: Boolean = false,
|
|
||||||
singleTop: Boolean = true
|
|
||||||
): NavOptions {
|
|
||||||
val builder = NavOptions.Builder()
|
|
||||||
builder.setPopUpTo(popUpTo, popUpInclusive).setLaunchSingleTop(singleTop)
|
|
||||||
if (!corePreferences.enableAnimations) return builder.build()
|
|
||||||
return builder
|
|
||||||
.setEnterAnim(R.anim.enter_left_or_top)
|
|
||||||
.setExitAnim(R.anim.exit_right_or_bottom)
|
|
||||||
.build()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun popupTo(
|
fun popupTo(
|
||||||
popUpTo: Int = -1,
|
popUpTo: Int = -1,
|
||||||
popUpInclusive: Boolean = false,
|
popUpInclusive: Boolean = false,
|
||||||
|
@ -174,90 +68,62 @@ internal fun MainActivity.navigateToDialer(args: Bundle?) {
|
||||||
findNavController(R.id.nav_host_fragment).navigate(
|
findNavController(R.id.nav_host_fragment).navigate(
|
||||||
R.id.action_global_dialerFragment,
|
R.id.action_global_dialerFragment,
|
||||||
args,
|
args,
|
||||||
getRightToLeftAnimationNavOptions(R.id.dialerFragment, true)
|
popupTo(R.id.dialerFragment, true)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Tabs fragment related */
|
/* Tabs fragment related */
|
||||||
|
|
||||||
internal fun TabsFragment.navigateToCallHistory() {
|
internal fun TabsFragment.navigateToCallHistory() {
|
||||||
when (findNavController().currentDestination?.id) {
|
val action = when (findNavController().currentDestination?.id) {
|
||||||
R.id.masterContactsFragment -> findNavController().navigate(
|
R.id.masterContactsFragment -> R.id.action_masterContactsFragment_to_masterCallLogsFragment
|
||||||
R.id.action_masterContactsFragment_to_masterCallLogsFragment,
|
R.id.dialerFragment -> R.id.action_dialerFragment_to_masterCallLogsFragment
|
||||||
null,
|
else -> R.id.action_masterChatRoomsFragment_to_masterCallLogsFragment
|
||||||
getLeftTopToRightBottomAnimationNavOptions()
|
|
||||||
)
|
|
||||||
R.id.dialerFragment -> findNavController().navigate(
|
|
||||||
R.id.action_dialerFragment_to_masterCallLogsFragment,
|
|
||||||
null,
|
|
||||||
getLeftTopToRightBottomAnimationNavOptions()
|
|
||||||
)
|
|
||||||
R.id.masterChatRoomsFragment -> findNavController().navigate(
|
|
||||||
R.id.action_masterChatRoomsFragment_to_masterCallLogsFragment,
|
|
||||||
null,
|
|
||||||
getLeftTopToRightBottomAnimationNavOptions()
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
findNavController().navigate(
|
||||||
|
action,
|
||||||
|
null,
|
||||||
|
popupTo(R.id.masterCallLogsFragment, true)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun TabsFragment.navigateToContacts() {
|
internal fun TabsFragment.navigateToContacts() {
|
||||||
when (findNavController().currentDestination?.id) {
|
val action = when (findNavController().currentDestination?.id) {
|
||||||
R.id.masterCallLogsFragment -> findNavController().navigate(
|
R.id.masterCallLogsFragment -> R.id.action_masterCallLogsFragment_to_masterContactsFragment
|
||||||
R.id.action_masterCallLogsFragment_to_masterContactsFragment,
|
R.id.dialerFragment -> R.id.action_dialerFragment_to_masterContactsFragment
|
||||||
null,
|
else -> R.id.action_masterChatRoomsFragment_to_masterContactsFragment
|
||||||
getRightBottomToLeftTopAnimationNavOptions()
|
|
||||||
)
|
|
||||||
R.id.dialerFragment -> findNavController().navigate(
|
|
||||||
R.id.action_dialerFragment_to_masterContactsFragment,
|
|
||||||
null,
|
|
||||||
getLeftTopToRightBottomAnimationNavOptions()
|
|
||||||
)
|
|
||||||
R.id.masterChatRoomsFragment -> findNavController().navigate(
|
|
||||||
R.id.action_masterChatRoomsFragment_to_masterContactsFragment,
|
|
||||||
null,
|
|
||||||
getLeftTopToRightBottomAnimationNavOptions()
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
findNavController().navigate(
|
||||||
|
action,
|
||||||
|
null,
|
||||||
|
popupTo(R.id.masterContactsFragment, true)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun TabsFragment.navigateToDialer() {
|
internal fun TabsFragment.navigateToDialer() {
|
||||||
when (findNavController().currentDestination?.id) {
|
val action = when (findNavController().currentDestination?.id) {
|
||||||
R.id.masterCallLogsFragment -> findNavController().navigate(
|
R.id.masterCallLogsFragment -> R.id.action_masterCallLogsFragment_to_dialerFragment
|
||||||
R.id.action_masterCallLogsFragment_to_dialerFragment,
|
R.id.masterContactsFragment -> R.id.action_masterContactsFragment_to_dialerFragment
|
||||||
null,
|
else -> R.id.action_masterChatRoomsFragment_to_dialerFragment
|
||||||
getRightBottomToLeftTopAnimationNavOptions()
|
|
||||||
)
|
|
||||||
R.id.masterContactsFragment -> findNavController().navigate(
|
|
||||||
R.id.action_masterContactsFragment_to_dialerFragment,
|
|
||||||
null,
|
|
||||||
getRightBottomToLeftTopAnimationNavOptions()
|
|
||||||
)
|
|
||||||
R.id.masterChatRoomsFragment -> findNavController().navigate(
|
|
||||||
R.id.action_masterChatRoomsFragment_to_dialerFragment,
|
|
||||||
null,
|
|
||||||
getLeftTopToRightBottomAnimationNavOptions()
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
findNavController().navigate(
|
||||||
|
action,
|
||||||
|
null,
|
||||||
|
popupTo(R.id.dialerFragment, true)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun TabsFragment.navigateToChatRooms() {
|
internal fun TabsFragment.navigateToChatRooms() {
|
||||||
when (findNavController().currentDestination?.id) {
|
val action = when (findNavController().currentDestination?.id) {
|
||||||
R.id.masterCallLogsFragment -> findNavController().navigate(
|
R.id.masterCallLogsFragment -> R.id.action_masterCallLogsFragment_to_masterChatRoomsFragment
|
||||||
R.id.action_masterCallLogsFragment_to_masterChatRoomsFragment,
|
R.id.masterContactsFragment -> R.id.action_masterContactsFragment_to_masterChatRoomsFragment
|
||||||
null,
|
else -> R.id.action_dialerFragment_to_masterChatRoomsFragment
|
||||||
getRightBottomToLeftTopAnimationNavOptions()
|
|
||||||
)
|
|
||||||
R.id.masterContactsFragment -> findNavController().navigate(
|
|
||||||
R.id.action_masterContactsFragment_to_masterChatRoomsFragment,
|
|
||||||
null,
|
|
||||||
getRightBottomToLeftTopAnimationNavOptions()
|
|
||||||
)
|
|
||||||
R.id.dialerFragment -> findNavController().navigate(
|
|
||||||
R.id.action_dialerFragment_to_masterChatRoomsFragment,
|
|
||||||
null,
|
|
||||||
getRightBottomToLeftTopAnimationNavOptions()
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
findNavController().navigate(
|
||||||
|
action,
|
||||||
|
null,
|
||||||
|
popupTo(R.id.masterChatRoomsFragment, true)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Dialer related */
|
/* Dialer related */
|
||||||
|
@ -266,7 +132,7 @@ internal fun DialerFragment.navigateToContacts(uriToAdd: String?) {
|
||||||
val deepLink = "linphone-android://contact/new/$uriToAdd"
|
val deepLink = "linphone-android://contact/new/$uriToAdd"
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
Uri.parse(deepLink),
|
Uri.parse(deepLink),
|
||||||
getLeftTopToRightBottomNoPopAnimationNavOptions(R.id.masterContactsFragment, true)
|
popupTo(R.id.masterContactsFragment, true)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -275,7 +141,7 @@ internal fun DialerFragment.navigateToConfigFileViewer() {
|
||||||
findMasterNavController().navigate(
|
findMasterNavController().navigate(
|
||||||
R.id.action_global_configViewerFragment,
|
R.id.action_global_configViewerFragment,
|
||||||
bundle,
|
bundle,
|
||||||
getRightToLeftAnimationNavOptions()
|
popupTo()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -296,7 +162,7 @@ internal fun MasterChatRoomsFragment.navigateToChatRoom(
|
||||||
navHostFragment.navController.navigate(
|
navHostFragment.navController.navigate(
|
||||||
R.id.action_global_detailChatRoomFragment,
|
R.id.action_global_detailChatRoomFragment,
|
||||||
args,
|
args,
|
||||||
computeSlidingPaneNavOptions(slidingPane, popUpToFragmentId, true)
|
popupTo(popUpToFragmentId, true)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -316,7 +182,7 @@ internal fun MasterChatRoomsFragment.navigateToChatRoomCreation(
|
||||||
navHostFragment.navController.navigate(
|
navHostFragment.navController.navigate(
|
||||||
R.id.action_global_chatRoomCreationFragment,
|
R.id.action_global_chatRoomCreationFragment,
|
||||||
bundle,
|
bundle,
|
||||||
computeSlidingPaneNavOptions(slidingPane, popUpToFragmentId, true)
|
popupTo(popUpToFragmentId, true)
|
||||||
)
|
)
|
||||||
if (!slidingPane.isOpen) slidingPane.openPane()
|
if (!slidingPane.isOpen) slidingPane.openPane()
|
||||||
}
|
}
|
||||||
|
@ -328,14 +194,14 @@ internal fun MasterChatRoomsFragment.clearDisplayedChatRoom() {
|
||||||
navHostFragment.navController.navigate(
|
navHostFragment.navController.navigate(
|
||||||
R.id.action_global_emptyChatFragment,
|
R.id.action_global_emptyChatFragment,
|
||||||
null,
|
null,
|
||||||
getLeftToRightAnimationNavOptions(R.id.emptyChatFragment, true)
|
popupTo(R.id.emptyChatFragment, true)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun DetailChatRoomFragment.navigateToContacts(sipUriToAdd: String) {
|
internal fun DetailChatRoomFragment.navigateToContacts(sipUriToAdd: String) {
|
||||||
val deepLink = "linphone-android://contact/new/$sipUriToAdd"
|
val deepLink = "linphone-android://contact/new/$sipUriToAdd"
|
||||||
findMasterNavController().navigate(Uri.parse(deepLink), getLeftToRightAnimationNavOptions())
|
findMasterNavController().navigate(Uri.parse(deepLink))
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun DetailChatRoomFragment.navigateToImdn(args: Bundle?) {
|
internal fun DetailChatRoomFragment.navigateToImdn(args: Bundle?) {
|
||||||
|
@ -343,7 +209,7 @@ internal fun DetailChatRoomFragment.navigateToImdn(args: Bundle?) {
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
R.id.action_detailChatRoomFragment_to_imdnFragment,
|
R.id.action_detailChatRoomFragment_to_imdnFragment,
|
||||||
args,
|
args,
|
||||||
getRightToLeftAnimationNavOptions()
|
popupTo()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -353,7 +219,7 @@ internal fun DetailChatRoomFragment.navigateToDevices() {
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
R.id.action_detailChatRoomFragment_to_devicesFragment,
|
R.id.action_detailChatRoomFragment_to_devicesFragment,
|
||||||
null,
|
null,
|
||||||
getRightToLeftAnimationNavOptions()
|
popupTo()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -363,7 +229,7 @@ internal fun DetailChatRoomFragment.navigateToGroupInfo() {
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
R.id.action_detailChatRoomFragment_to_groupInfoFragment,
|
R.id.action_detailChatRoomFragment_to_groupInfoFragment,
|
||||||
null,
|
null,
|
||||||
getRightToLeftAnimationNavOptions()
|
popupTo(R.id.groupInfoFragment, true)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -373,7 +239,7 @@ internal fun DetailChatRoomFragment.navigateToEphemeralInfo() {
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
R.id.action_detailChatRoomFragment_to_ephemeralFragment,
|
R.id.action_detailChatRoomFragment_to_ephemeralFragment,
|
||||||
null,
|
null,
|
||||||
getRightToLeftAnimationNavOptions()
|
popupTo()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -383,7 +249,7 @@ internal fun DetailChatRoomFragment.navigateToTextFileViewer(secure: Boolean) {
|
||||||
findMasterNavController().navigate(
|
findMasterNavController().navigate(
|
||||||
R.id.action_global_textViewerFragment,
|
R.id.action_global_textViewerFragment,
|
||||||
bundle,
|
bundle,
|
||||||
getRightToLeftAnimationNavOptions()
|
popupTo()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -392,7 +258,7 @@ internal fun DetailChatRoomFragment.navigateToPdfFileViewer(secure: Boolean) {
|
||||||
findMasterNavController().navigate(
|
findMasterNavController().navigate(
|
||||||
R.id.action_global_pdfViewerFragment,
|
R.id.action_global_pdfViewerFragment,
|
||||||
bundle,
|
bundle,
|
||||||
getRightToLeftAnimationNavOptions()
|
popupTo()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -401,7 +267,7 @@ internal fun DetailChatRoomFragment.navigateToImageFileViewer(secure: Boolean) {
|
||||||
findMasterNavController().navigate(
|
findMasterNavController().navigate(
|
||||||
R.id.action_global_imageViewerFragment,
|
R.id.action_global_imageViewerFragment,
|
||||||
bundle,
|
bundle,
|
||||||
getRightToLeftAnimationNavOptions()
|
popupTo()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -410,7 +276,7 @@ internal fun DetailChatRoomFragment.navigateToVideoFileViewer(secure: Boolean) {
|
||||||
findMasterNavController().navigate(
|
findMasterNavController().navigate(
|
||||||
R.id.action_global_videoViewerFragment,
|
R.id.action_global_videoViewerFragment,
|
||||||
bundle,
|
bundle,
|
||||||
getRightToLeftAnimationNavOptions()
|
popupTo()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -419,7 +285,7 @@ internal fun DetailChatRoomFragment.navigateToAudioFileViewer(secure: Boolean) {
|
||||||
findMasterNavController().navigate(
|
findMasterNavController().navigate(
|
||||||
R.id.action_global_audioViewerFragment,
|
R.id.action_global_audioViewerFragment,
|
||||||
bundle,
|
bundle,
|
||||||
getRightToLeftAnimationNavOptions()
|
popupTo()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -427,7 +293,7 @@ internal fun DetailChatRoomFragment.navigateToEmptyChatRoom() {
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
R.id.action_global_emptyChatFragment,
|
R.id.action_global_emptyChatFragment,
|
||||||
null,
|
null,
|
||||||
getLeftToRightAnimationNavOptions()
|
popupTo(R.id.emptyChatFragment, true)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -436,7 +302,7 @@ internal fun ChatRoomCreationFragment.navigateToGroupInfo() {
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
R.id.action_chatRoomCreationFragment_to_groupInfoFragment,
|
R.id.action_chatRoomCreationFragment_to_groupInfoFragment,
|
||||||
null,
|
null,
|
||||||
getRightToLeftAnimationNavOptions()
|
popupTo(R.id.groupInfoFragment, true)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -446,7 +312,7 @@ 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.emptyChatFragment, true)
|
popupTo(R.id.emptyChatFragment, true)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -455,7 +321,7 @@ internal fun ChatRoomCreationFragment.navigateToEmptyChatRoom() {
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
R.id.action_global_emptyChatFragment,
|
R.id.action_global_emptyChatFragment,
|
||||||
null,
|
null,
|
||||||
getLeftToRightAnimationNavOptions()
|
popupTo(R.id.emptyChatFragment, true)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -464,7 +330,7 @@ internal fun GroupInfoFragment.navigateToChatRoomCreation(args: Bundle?) {
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
R.id.action_groupInfoFragment_to_chatRoomCreationFragment,
|
R.id.action_groupInfoFragment_to_chatRoomCreationFragment,
|
||||||
args,
|
args,
|
||||||
getLeftToRightAnimationNavOptions(R.id.chatRoomCreationFragment, true)
|
popupTo(R.id.chatRoomCreationFragment, true)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -474,7 +340,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.emptyChatFragment, true)
|
popupTo(R.id.emptyChatFragment, true)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -488,7 +354,7 @@ internal fun MasterContactsFragment.navigateToContact(slidingPane: SlidingPaneLa
|
||||||
navHostFragment.navController.navigate(
|
navHostFragment.navController.navigate(
|
||||||
R.id.action_global_detailContactFragment,
|
R.id.action_global_detailContactFragment,
|
||||||
null,
|
null,
|
||||||
computeSlidingPaneNavOptions(slidingPane, R.id.emptyContactFragment, true)
|
popupTo(R.id.emptyContactFragment, true)
|
||||||
)
|
)
|
||||||
if (!slidingPane.isOpen) slidingPane.openPane()
|
if (!slidingPane.isOpen) slidingPane.openPane()
|
||||||
}
|
}
|
||||||
|
@ -505,7 +371,7 @@ internal fun MasterContactsFragment.navigateToContactEditor(
|
||||||
navHostFragment.navController.navigate(
|
navHostFragment.navController.navigate(
|
||||||
R.id.action_global_contactEditorFragment,
|
R.id.action_global_contactEditorFragment,
|
||||||
bundle,
|
bundle,
|
||||||
computeSlidingPaneNavOptions(slidingPane, R.id.emptyContactFragment, true)
|
popupTo(R.id.emptyContactFragment, true)
|
||||||
)
|
)
|
||||||
if (!slidingPane.isOpen) slidingPane.openPane()
|
if (!slidingPane.isOpen) slidingPane.openPane()
|
||||||
}
|
}
|
||||||
|
@ -518,7 +384,7 @@ internal fun MasterContactsFragment.clearDisplayedContact() {
|
||||||
navHostFragment.navController.navigate(
|
navHostFragment.navController.navigate(
|
||||||
R.id.action_global_emptyContactFragment,
|
R.id.action_global_emptyContactFragment,
|
||||||
null,
|
null,
|
||||||
getLeftToRightAnimationNavOptions(R.id.emptyContactFragment, true)
|
popupTo(R.id.emptyContactFragment, true)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -529,7 +395,7 @@ internal fun ContactEditorFragment.navigateToContact(contact: NativeContact) {
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
R.id.action_contactEditorFragment_to_detailContactFragment,
|
R.id.action_contactEditorFragment_to_detailContactFragment,
|
||||||
bundle,
|
bundle,
|
||||||
getRightToLeftAnimationNavOptions(R.id.masterContactsFragment, false)
|
popupTo(R.id.masterContactsFragment, false)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -537,7 +403,7 @@ internal fun ContactEditorFragment.navigateToEmptyContact() {
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
R.id.action_global_emptyContactFragment,
|
R.id.action_global_emptyContactFragment,
|
||||||
null,
|
null,
|
||||||
getLeftToRightAnimationNavOptions()
|
popupTo(R.id.emptyContactFragment, true)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -545,7 +411,7 @@ internal fun DetailContactFragment.navigateToChatRoom(args: Bundle?) {
|
||||||
findMasterNavController().navigate(
|
findMasterNavController().navigate(
|
||||||
R.id.action_global_masterChatRoomsFragment,
|
R.id.action_global_masterChatRoomsFragment,
|
||||||
args,
|
args,
|
||||||
getRightBottomToLeftTopAnimationNavOptions()
|
popupTo(R.id.masterChatRoomsFragment, true)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -553,7 +419,7 @@ internal fun DetailContactFragment.navigateToDialer(args: Bundle?) {
|
||||||
findMasterNavController().navigate(
|
findMasterNavController().navigate(
|
||||||
R.id.action_global_dialerFragment,
|
R.id.action_global_dialerFragment,
|
||||||
args,
|
args,
|
||||||
getRightToLeftAnimationNavOptions()
|
popupTo(R.id.dialerFragment, true)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -562,7 +428,7 @@ internal fun DetailContactFragment.navigateToContactEditor() {
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
R.id.action_detailContactFragment_to_contactEditorFragment,
|
R.id.action_detailContactFragment_to_contactEditorFragment,
|
||||||
null,
|
null,
|
||||||
getLeftToRightAnimationNavOptions()
|
popupTo(R.id.contactEditorFragment, true)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -571,7 +437,7 @@ internal fun DetailContactFragment.navigateToEmptyContact() {
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
R.id.action_global_emptyContactFragment,
|
R.id.action_global_emptyContactFragment,
|
||||||
null,
|
null,
|
||||||
getLeftToRightAnimationNavOptions()
|
popupTo(R.id.emptyContactFragment, true)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -584,7 +450,7 @@ internal fun MasterCallLogsFragment.navigateToCallHistory(slidingPane: SlidingPa
|
||||||
navHostFragment.navController.navigate(
|
navHostFragment.navController.navigate(
|
||||||
R.id.action_global_detailCallLogFragment,
|
R.id.action_global_detailCallLogFragment,
|
||||||
null,
|
null,
|
||||||
computeSlidingPaneNavOptions(slidingPane, R.id.emptyCallHistoryFragment, true)
|
popupTo(R.id.emptyCallHistoryFragment, true)
|
||||||
)
|
)
|
||||||
if (!slidingPane.isOpen) slidingPane.openPane()
|
if (!slidingPane.isOpen) slidingPane.openPane()
|
||||||
}
|
}
|
||||||
|
@ -597,7 +463,7 @@ internal fun MasterCallLogsFragment.clearDisplayedCallHistory() {
|
||||||
navHostFragment.navController.navigate(
|
navHostFragment.navController.navigate(
|
||||||
R.id.action_global_emptyFragment,
|
R.id.action_global_emptyFragment,
|
||||||
null,
|
null,
|
||||||
getLeftToRightAnimationNavOptions(R.id.emptyCallHistoryFragment, true)
|
popupTo(R.id.emptyCallHistoryFragment, true)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -606,23 +472,23 @@ internal fun MasterCallLogsFragment.navigateToDialer(args: Bundle?) {
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
R.id.action_global_dialerFragment,
|
R.id.action_global_dialerFragment,
|
||||||
args,
|
args,
|
||||||
getRightToLeftAnimationNavOptions()
|
popupTo(R.id.dialerFragment, true)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun DetailCallLogFragment.navigateToContacts(sipUriToAdd: String) {
|
internal fun DetailCallLogFragment.navigateToContacts(sipUriToAdd: String) {
|
||||||
val deepLink = "linphone-android://contact/new/$sipUriToAdd"
|
val deepLink = "linphone-android://contact/new/$sipUriToAdd"
|
||||||
findMasterNavController().navigate(Uri.parse(deepLink), getRightToLeftAnimationNavOptions())
|
findMasterNavController().navigate(Uri.parse(deepLink))
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun DetailCallLogFragment.navigateToContact(contact: NativeContact) {
|
internal fun DetailCallLogFragment.navigateToContact(contact: NativeContact) {
|
||||||
val deepLink = "linphone-android://contact/view/${contact.nativeId}"
|
val deepLink = "linphone-android://contact/view/${contact.nativeId}"
|
||||||
findMasterNavController().navigate(Uri.parse(deepLink), getRightBottomToLeftTopAnimationNavOptions())
|
findMasterNavController().navigate(Uri.parse(deepLink))
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun DetailCallLogFragment.navigateToFriend(friendAddress: Address) {
|
internal fun DetailCallLogFragment.navigateToFriend(friendAddress: Address) {
|
||||||
val deepLink = "linphone-android://contact/new/${friendAddress.asStringUriOnly()}"
|
val deepLink = "linphone-android://contact/new/${friendAddress.asStringUriOnly()}"
|
||||||
findMasterNavController().navigate(Uri.parse(deepLink), getRightToLeftAnimationNavOptions())
|
findMasterNavController().navigate(Uri.parse(deepLink))
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun DetailCallLogFragment.navigateToChatRoom(args: Bundle?) {
|
internal fun DetailCallLogFragment.navigateToChatRoom(args: Bundle?) {
|
||||||
|
@ -630,7 +496,7 @@ internal fun DetailCallLogFragment.navigateToChatRoom(args: Bundle?) {
|
||||||
findMasterNavController().navigate(
|
findMasterNavController().navigate(
|
||||||
R.id.action_global_masterChatRoomsFragment,
|
R.id.action_global_masterChatRoomsFragment,
|
||||||
args,
|
args,
|
||||||
getRightBottomToLeftTopAnimationNavOptions()
|
popupTo(R.id.masterChatRoomsFragment, true)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -640,7 +506,7 @@ internal fun DetailCallLogFragment.navigateToDialer(args: Bundle?) {
|
||||||
findMasterNavController().navigate(
|
findMasterNavController().navigate(
|
||||||
R.id.action_global_dialerFragment,
|
R.id.action_global_dialerFragment,
|
||||||
args,
|
args,
|
||||||
getRightToLeftAnimationNavOptions()
|
popupTo(R.id.dialerFragment, true)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -650,7 +516,7 @@ internal fun DetailCallLogFragment.navigateToEmptyCallHistory() {
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
R.id.action_global_emptyFragment,
|
R.id.action_global_emptyFragment,
|
||||||
null,
|
null,
|
||||||
getLeftToRightAnimationNavOptions()
|
popupTo(R.id.emptyCallHistoryFragment, true)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -668,7 +534,7 @@ internal fun SettingsFragment.navigateToAccountSettings(
|
||||||
navHostFragment.navController.navigate(
|
navHostFragment.navController.navigate(
|
||||||
R.id.action_global_accountSettingsFragment,
|
R.id.action_global_accountSettingsFragment,
|
||||||
bundle,
|
bundle,
|
||||||
computeSlidingPaneNavOptions(slidingPane)
|
popupTo(R.id.accountSettingsFragment, true)
|
||||||
)
|
)
|
||||||
if (!slidingPane.isOpen) slidingPane.openPane()
|
if (!slidingPane.isOpen) slidingPane.openPane()
|
||||||
}
|
}
|
||||||
|
@ -681,7 +547,7 @@ internal fun SettingsFragment.navigateToTunnelSettings(slidingPane: SlidingPaneL
|
||||||
navHostFragment.navController.navigate(
|
navHostFragment.navController.navigate(
|
||||||
R.id.action_global_tunnelSettingsFragment,
|
R.id.action_global_tunnelSettingsFragment,
|
||||||
null,
|
null,
|
||||||
computeSlidingPaneNavOptions(slidingPane)
|
popupTo(R.id.tunnelSettingsFragment, true)
|
||||||
)
|
)
|
||||||
if (!slidingPane.isOpen) slidingPane.openPane()
|
if (!slidingPane.isOpen) slidingPane.openPane()
|
||||||
}
|
}
|
||||||
|
@ -694,7 +560,7 @@ internal fun SettingsFragment.navigateToAudioSettings(slidingPane: SlidingPaneLa
|
||||||
navHostFragment.navController.navigate(
|
navHostFragment.navController.navigate(
|
||||||
R.id.action_global_audioSettingsFragment,
|
R.id.action_global_audioSettingsFragment,
|
||||||
null,
|
null,
|
||||||
computeSlidingPaneNavOptions(slidingPane)
|
popupTo(R.id.audioSettingsFragment, true)
|
||||||
)
|
)
|
||||||
if (!slidingPane.isOpen) slidingPane.openPane()
|
if (!slidingPane.isOpen) slidingPane.openPane()
|
||||||
}
|
}
|
||||||
|
@ -707,7 +573,7 @@ internal fun SettingsFragment.navigateToVideoSettings(slidingPane: SlidingPaneLa
|
||||||
navHostFragment.navController.navigate(
|
navHostFragment.navController.navigate(
|
||||||
R.id.action_global_videoSettingsFragment,
|
R.id.action_global_videoSettingsFragment,
|
||||||
null,
|
null,
|
||||||
computeSlidingPaneNavOptions(slidingPane)
|
popupTo(R.id.videoSettingsFragment, true)
|
||||||
)
|
)
|
||||||
if (!slidingPane.isOpen) slidingPane.openPane()
|
if (!slidingPane.isOpen) slidingPane.openPane()
|
||||||
}
|
}
|
||||||
|
@ -720,7 +586,7 @@ internal fun SettingsFragment.navigateToCallSettings(slidingPane: SlidingPaneLay
|
||||||
navHostFragment.navController.navigate(
|
navHostFragment.navController.navigate(
|
||||||
R.id.action_global_callSettingsFragment,
|
R.id.action_global_callSettingsFragment,
|
||||||
null,
|
null,
|
||||||
computeSlidingPaneNavOptions(slidingPane)
|
popupTo(R.id.callSettingsFragment, true)
|
||||||
)
|
)
|
||||||
if (!slidingPane.isOpen) slidingPane.openPane()
|
if (!slidingPane.isOpen) slidingPane.openPane()
|
||||||
}
|
}
|
||||||
|
@ -733,7 +599,7 @@ internal fun SettingsFragment.navigateToChatSettings(slidingPane: SlidingPaneLay
|
||||||
navHostFragment.navController.navigate(
|
navHostFragment.navController.navigate(
|
||||||
R.id.action_global_chatSettingsFragment,
|
R.id.action_global_chatSettingsFragment,
|
||||||
null,
|
null,
|
||||||
computeSlidingPaneNavOptions(slidingPane)
|
popupTo(R.id.chatSettingsFragment, true)
|
||||||
)
|
)
|
||||||
if (!slidingPane.isOpen) slidingPane.openPane()
|
if (!slidingPane.isOpen) slidingPane.openPane()
|
||||||
}
|
}
|
||||||
|
@ -746,7 +612,7 @@ internal fun SettingsFragment.navigateToNetworkSettings(slidingPane: SlidingPane
|
||||||
navHostFragment.navController.navigate(
|
navHostFragment.navController.navigate(
|
||||||
R.id.action_global_networkSettingsFragment,
|
R.id.action_global_networkSettingsFragment,
|
||||||
null,
|
null,
|
||||||
computeSlidingPaneNavOptions(slidingPane)
|
popupTo(R.id.networkSettingsFragment, true)
|
||||||
)
|
)
|
||||||
if (!slidingPane.isOpen) slidingPane.openPane()
|
if (!slidingPane.isOpen) slidingPane.openPane()
|
||||||
}
|
}
|
||||||
|
@ -759,7 +625,7 @@ internal fun SettingsFragment.navigateToContactsSettings(slidingPane: SlidingPan
|
||||||
navHostFragment.navController.navigate(
|
navHostFragment.navController.navigate(
|
||||||
R.id.action_global_contactsSettingsFragment,
|
R.id.action_global_contactsSettingsFragment,
|
||||||
null,
|
null,
|
||||||
computeSlidingPaneNavOptions(slidingPane)
|
popupTo(R.id.contactsSettingsFragment, true)
|
||||||
)
|
)
|
||||||
if (!slidingPane.isOpen) slidingPane.openPane()
|
if (!slidingPane.isOpen) slidingPane.openPane()
|
||||||
}
|
}
|
||||||
|
@ -772,7 +638,7 @@ internal fun SettingsFragment.navigateToAdvancedSettings(slidingPane: SlidingPan
|
||||||
navHostFragment.navController.navigate(
|
navHostFragment.navController.navigate(
|
||||||
R.id.action_global_advancedSettingsFragment,
|
R.id.action_global_advancedSettingsFragment,
|
||||||
null,
|
null,
|
||||||
computeSlidingPaneNavOptions(slidingPane)
|
popupTo(R.id.advancedSettingsFragment, true)
|
||||||
)
|
)
|
||||||
if (!slidingPane.isOpen) slidingPane.openPane()
|
if (!slidingPane.isOpen) slidingPane.openPane()
|
||||||
}
|
}
|
||||||
|
@ -802,7 +668,7 @@ internal fun navigateToEmptySetting(navController: NavController) {
|
||||||
navController.navigate(
|
navController.navigate(
|
||||||
R.id.action_global_emptySettingsFragment,
|
R.id.action_global_emptySettingsFragment,
|
||||||
null,
|
null,
|
||||||
getLeftToRightAnimationNavOptions()
|
popupTo(R.id.emptySettingsFragment, true)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -846,14 +712,14 @@ internal fun VideoSettingsFragment.navigateToEmptySetting() {
|
||||||
|
|
||||||
internal fun SideMenuFragment.navigateToAccountSettings(identity: String) {
|
internal fun SideMenuFragment.navigateToAccountSettings(identity: String) {
|
||||||
val deepLink = "linphone-android://settings/$identity"
|
val deepLink = "linphone-android://settings/$identity"
|
||||||
findNavController().navigate(Uri.parse(deepLink), getRightToLeftAnimationNavOptions())
|
findNavController().navigate(Uri.parse(deepLink))
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun SideMenuFragment.navigateToSettings() {
|
internal fun SideMenuFragment.navigateToSettings() {
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
R.id.action_global_settingsFragment,
|
R.id.action_global_settingsFragment,
|
||||||
null,
|
null,
|
||||||
getRightToLeftAnimationNavOptions(R.id.settingsFragment)
|
popupTo(R.id.settingsFragment, true)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -861,7 +727,7 @@ internal fun SideMenuFragment.navigateToAbout() {
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
R.id.action_global_aboutFragment,
|
R.id.action_global_aboutFragment,
|
||||||
null,
|
null,
|
||||||
getRightToLeftAnimationNavOptions(R.id.aboutFragment)
|
popupTo(R.id.aboutFragment, true)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -869,7 +735,7 @@ internal fun SideMenuFragment.navigateToRecordings() {
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
R.id.action_global_recordingsFragment,
|
R.id.action_global_recordingsFragment,
|
||||||
null,
|
null,
|
||||||
getRightToLeftAnimationNavOptions(R.id.recordingsFragment)
|
popupTo(R.id.recordingsFragment, true)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -880,7 +746,7 @@ internal fun WelcomeFragment.navigateToEmailAccountCreation() {
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
R.id.action_welcomeFragment_to_emailAccountCreationFragment,
|
R.id.action_welcomeFragment_to_emailAccountCreationFragment,
|
||||||
null,
|
null,
|
||||||
getRightToLeftAnimationNavOptions()
|
popupTo()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -890,7 +756,7 @@ internal fun WelcomeFragment.navigateToPhoneAccountCreation() {
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
R.id.action_welcomeFragment_to_phoneAccountCreationFragment,
|
R.id.action_welcomeFragment_to_phoneAccountCreationFragment,
|
||||||
null,
|
null,
|
||||||
getRightToLeftAnimationNavOptions()
|
popupTo()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -900,7 +766,7 @@ internal fun WelcomeFragment.navigateToAccountLogin() {
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
R.id.action_welcomeFragment_to_accountLoginFragment,
|
R.id.action_welcomeFragment_to_accountLoginFragment,
|
||||||
null,
|
null,
|
||||||
getRightToLeftAnimationNavOptions()
|
popupTo()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -910,7 +776,7 @@ internal fun WelcomeFragment.navigateToGenericLogin() {
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
R.id.action_welcomeFragment_to_genericAccountLoginFragment,
|
R.id.action_welcomeFragment_to_genericAccountLoginFragment,
|
||||||
null,
|
null,
|
||||||
getRightToLeftAnimationNavOptions()
|
popupTo()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -920,7 +786,7 @@ internal fun WelcomeFragment.navigateToRemoteProvisioning() {
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
R.id.action_welcomeFragment_to_remoteProvisioningFragment,
|
R.id.action_welcomeFragment_to_remoteProvisioningFragment,
|
||||||
null,
|
null,
|
||||||
getRightToLeftAnimationNavOptions()
|
popupTo()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -930,7 +796,7 @@ internal fun AccountLoginFragment.navigateToEchoCancellerCalibration() {
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
R.id.action_accountLoginFragment_to_echoCancellerCalibrationFragment,
|
R.id.action_accountLoginFragment_to_echoCancellerCalibrationFragment,
|
||||||
null,
|
null,
|
||||||
getRightToLeftAnimationNavOptions()
|
popupTo()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -940,7 +806,7 @@ internal fun AccountLoginFragment.navigateToPhoneAccountValidation(args: Bundle?
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
R.id.action_accountLoginFragment_to_phoneAccountValidationFragment,
|
R.id.action_accountLoginFragment_to_phoneAccountValidationFragment,
|
||||||
args,
|
args,
|
||||||
getRightToLeftAnimationNavOptions()
|
popupTo()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -950,7 +816,7 @@ internal fun GenericAccountLoginFragment.navigateToEchoCancellerCalibration() {
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
R.id.action_genericAccountLoginFragment_to_echoCancellerCalibrationFragment,
|
R.id.action_genericAccountLoginFragment_to_echoCancellerCalibrationFragment,
|
||||||
null,
|
null,
|
||||||
getRightToLeftAnimationNavOptions()
|
popupTo()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -960,7 +826,7 @@ internal fun RemoteProvisioningFragment.navigateToQrCode() {
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
R.id.action_remoteProvisioningFragment_to_qrCodeFragment,
|
R.id.action_remoteProvisioningFragment_to_qrCodeFragment,
|
||||||
null,
|
null,
|
||||||
getRightToLeftAnimationNavOptions()
|
popupTo()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -970,7 +836,7 @@ internal fun RemoteProvisioningFragment.navigateToEchoCancellerCalibration() {
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
R.id.action_remoteProvisioningFragment_to_echoCancellerCalibrationFragment,
|
R.id.action_remoteProvisioningFragment_to_echoCancellerCalibrationFragment,
|
||||||
null,
|
null,
|
||||||
getRightToLeftAnimationNavOptions()
|
popupTo()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -980,7 +846,7 @@ internal fun EmailAccountCreationFragment.navigateToEmailAccountValidation() {
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
R.id.action_emailAccountCreationFragment_to_emailAccountValidationFragment,
|
R.id.action_emailAccountCreationFragment_to_emailAccountValidationFragment,
|
||||||
null,
|
null,
|
||||||
getRightToLeftAnimationNavOptions()
|
popupTo()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -990,7 +856,7 @@ internal fun EmailAccountValidationFragment.navigateToAccountLinking(args: Bundl
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
R.id.action_emailAccountValidationFragment_to_phoneAccountLinkingFragment,
|
R.id.action_emailAccountValidationFragment_to_phoneAccountLinkingFragment,
|
||||||
args,
|
args,
|
||||||
getRightToLeftAnimationNavOptions()
|
popupTo()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1000,7 +866,7 @@ internal fun PhoneAccountCreationFragment.navigateToPhoneAccountValidation(args:
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
R.id.action_phoneAccountCreationFragment_to_phoneAccountValidationFragment,
|
R.id.action_phoneAccountCreationFragment_to_phoneAccountValidationFragment,
|
||||||
args,
|
args,
|
||||||
getRightToLeftAnimationNavOptions()
|
popupTo()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1010,7 +876,7 @@ internal fun PhoneAccountValidationFragment.navigateToAccountSettings(args: Bund
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
R.id.action_phoneAccountValidationFragment_to_accountSettingsFragment,
|
R.id.action_phoneAccountValidationFragment_to_accountSettingsFragment,
|
||||||
args,
|
args,
|
||||||
getLeftToRightAnimationNavOptions(R.id.accountSettingsFragment, true)
|
popupTo(R.id.accountSettingsFragment, true)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1020,7 +886,7 @@ internal fun PhoneAccountValidationFragment.navigateToEchoCancellerCalibration()
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
R.id.action_phoneAccountValidationFragment_to_echoCancellerCalibrationFragment,
|
R.id.action_phoneAccountValidationFragment_to_echoCancellerCalibrationFragment,
|
||||||
null,
|
null,
|
||||||
getRightToLeftAnimationNavOptions()
|
popupTo()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1030,7 +896,7 @@ internal fun PhoneAccountLinkingFragment.navigateToEchoCancellerCalibration() {
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
R.id.action_phoneAccountLinkingFragment_to_echoCancellerCalibrationFragment,
|
R.id.action_phoneAccountLinkingFragment_to_echoCancellerCalibrationFragment,
|
||||||
null,
|
null,
|
||||||
getRightToLeftAnimationNavOptions()
|
popupTo()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,7 +46,7 @@ class AccountLoginFragment : AbstractPhoneFragment<AssistantAccountLoginFragment
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
sharedViewModel = requireActivity().run {
|
sharedViewModel = requireActivity().run {
|
||||||
ViewModelProvider(this).get(SharedAssistantViewModel::class.java)
|
ViewModelProvider(this).get(SharedAssistantViewModel::class.java)
|
||||||
|
|
|
@ -38,7 +38,7 @@ class EchoCancellerCalibrationFragment : GenericFragment<AssistantEchoCancellerC
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
viewModel = ViewModelProvider(this).get(EchoCancellerCalibrationViewModel::class.java)
|
viewModel = ViewModelProvider(this).get(EchoCancellerCalibrationViewModel::class.java)
|
||||||
binding.viewModel = viewModel
|
binding.viewModel = viewModel
|
||||||
|
|
|
@ -40,7 +40,7 @@ class EmailAccountCreationFragment : GenericFragment<AssistantEmailAccountCreati
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
sharedViewModel = requireActivity().run {
|
sharedViewModel = requireActivity().run {
|
||||||
ViewModelProvider(this).get(SharedAssistantViewModel::class.java)
|
ViewModelProvider(this).get(SharedAssistantViewModel::class.java)
|
||||||
|
|
|
@ -39,7 +39,7 @@ class EmailAccountValidationFragment : GenericFragment<AssistantEmailAccountVali
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
sharedViewModel = requireActivity().run {
|
sharedViewModel = requireActivity().run {
|
||||||
ViewModelProvider(this).get(SharedAssistantViewModel::class.java)
|
ViewModelProvider(this).get(SharedAssistantViewModel::class.java)
|
||||||
|
|
|
@ -44,7 +44,7 @@ class GenericAccountLoginFragment : GenericFragment<AssistantGenericAccountLogin
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
sharedViewModel = requireActivity().run {
|
sharedViewModel = requireActivity().run {
|
||||||
ViewModelProvider(this).get(SharedAssistantViewModel::class.java)
|
ViewModelProvider(this).get(SharedAssistantViewModel::class.java)
|
||||||
|
|
|
@ -39,7 +39,7 @@ class PhoneAccountCreationFragment : AbstractPhoneFragment<AssistantPhoneAccount
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
sharedViewModel = requireActivity().run {
|
sharedViewModel = requireActivity().run {
|
||||||
ViewModelProvider(this).get(SharedAssistantViewModel::class.java)
|
ViewModelProvider(this).get(SharedAssistantViewModel::class.java)
|
||||||
|
|
|
@ -40,7 +40,7 @@ class PhoneAccountLinkingFragment : AbstractPhoneFragment<AssistantPhoneAccountL
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
sharedViewModel = requireActivity().run {
|
sharedViewModel = requireActivity().run {
|
||||||
ViewModelProvider(this).get(SharedAssistantViewModel::class.java)
|
ViewModelProvider(this).get(SharedAssistantViewModel::class.java)
|
||||||
|
|
|
@ -44,7 +44,7 @@ class PhoneAccountValidationFragment : GenericFragment<AssistantPhoneAccountVali
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
sharedViewModel = requireActivity().run {
|
sharedViewModel = requireActivity().run {
|
||||||
ViewModelProvider(this).get(SharedAssistantViewModel::class.java)
|
ViewModelProvider(this).get(SharedAssistantViewModel::class.java)
|
||||||
|
|
|
@ -42,7 +42,7 @@ class QrCodeFragment : GenericFragment<AssistantQrCodeFragmentBinding>() {
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
sharedViewModel = requireActivity().run {
|
sharedViewModel = requireActivity().run {
|
||||||
ViewModelProvider(this).get(SharedAssistantViewModel::class.java)
|
ViewModelProvider(this).get(SharedAssistantViewModel::class.java)
|
||||||
|
|
|
@ -41,7 +41,7 @@ class RemoteProvisioningFragment : GenericFragment<AssistantRemoteProvisioningFr
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
sharedViewModel = requireActivity().run {
|
sharedViewModel = requireActivity().run {
|
||||||
ViewModelProvider(this).get(SharedAssistantViewModel::class.java)
|
ViewModelProvider(this).get(SharedAssistantViewModel::class.java)
|
||||||
|
|
|
@ -22,7 +22,6 @@ package org.linphone.activities.assistant.fragments
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.navigation.fragment.findNavController
|
import androidx.navigation.fragment.findNavController
|
||||||
import org.linphone.LinphoneApplication.Companion.corePreferences
|
|
||||||
import org.linphone.R
|
import org.linphone.R
|
||||||
import org.linphone.activities.GenericFragment
|
import org.linphone.activities.GenericFragment
|
||||||
import org.linphone.databinding.AssistantTopBarFragmentBinding
|
import org.linphone.databinding.AssistantTopBarFragmentBinding
|
||||||
|
@ -33,7 +32,8 @@ class TopBarFragment : GenericFragment<AssistantTopBarFragmentBinding>() {
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
useMaterialSharedAxisXForwardAnimation = false
|
||||||
|
|
||||||
binding.setBackClickListener {
|
binding.setBackClickListener {
|
||||||
goBack()
|
goBack()
|
||||||
|
@ -43,12 +43,6 @@ class TopBarFragment : GenericFragment<AssistantTopBarFragmentBinding>() {
|
||||||
override fun goBack() {
|
override fun goBack() {
|
||||||
if (!findNavController().popBackStack()) {
|
if (!findNavController().popBackStack()) {
|
||||||
requireActivity().finish()
|
requireActivity().finish()
|
||||||
if (corePreferences.enableAnimations) {
|
|
||||||
requireActivity().overridePendingTransition(
|
|
||||||
R.anim.enter_left,
|
|
||||||
R.anim.exit_right
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,7 +47,7 @@ class WelcomeFragment : GenericFragment<AssistantWelcomeFragmentBinding>() {
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
viewModel = ViewModelProvider(this).get(WelcomeViewModel::class.java)
|
viewModel = ViewModelProvider(this).get(WelcomeViewModel::class.java)
|
||||||
binding.viewModel = viewModel
|
binding.viewModel = viewModel
|
||||||
|
|
|
@ -65,7 +65,8 @@ class ControlsFragment : GenericFragment<CallControlsFragmentBinding>() {
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
useMaterialSharedAxisXForwardAnimation = false
|
||||||
|
|
||||||
sharedViewModel = requireActivity().run {
|
sharedViewModel = requireActivity().run {
|
||||||
ViewModelProvider(this).get(SharedCallViewModel::class.java)
|
ViewModelProvider(this).get(SharedCallViewModel::class.java)
|
||||||
|
|
|
@ -35,7 +35,8 @@ class StatisticsFragment : GenericFragment<CallStatisticsFragmentBinding>() {
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
useMaterialSharedAxisXForwardAnimation = false
|
||||||
|
|
||||||
viewModel = ViewModelProvider(this).get(StatisticsListViewModel::class.java)
|
viewModel = ViewModelProvider(this).get(StatisticsListViewModel::class.java)
|
||||||
binding.viewModel = viewModel
|
binding.viewModel = viewModel
|
||||||
|
|
|
@ -45,7 +45,8 @@ class StatusFragment : GenericFragment<CallStatusFragmentBinding>() {
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
useMaterialSharedAxisXForwardAnimation = false
|
||||||
|
|
||||||
viewModel = ViewModelProvider(this).get(StatusViewModel::class.java)
|
viewModel = ViewModelProvider(this).get(StatusViewModel::class.java)
|
||||||
binding.viewModel = viewModel
|
binding.viewModel = viewModel
|
||||||
|
|
|
@ -36,7 +36,7 @@ class AboutFragment : SecureFragment<AboutFragmentBinding>() {
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
viewModel = ViewModelProvider(this).get(AboutViewModel::class.java)
|
viewModel = ViewModelProvider(this).get(AboutViewModel::class.java)
|
||||||
binding.viewModel = viewModel
|
binding.viewModel = viewModel
|
||||||
|
|
|
@ -51,12 +51,14 @@ class ChatRoomCreationFragment : SecureFragment<ChatRoomCreationFragmentBinding>
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
sharedViewModel = requireActivity().run {
|
sharedViewModel = requireActivity().run {
|
||||||
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
useMaterialSharedAxisXForwardAnimation = sharedViewModel.isSlidingPaneSlideable.value == false
|
||||||
|
|
||||||
val createGroup = arguments?.getBoolean("createGroup") ?: false
|
val createGroup = arguments?.getBoolean("createGroup") ?: false
|
||||||
|
|
||||||
viewModel = ViewModelProvider(this).get(ChatRoomCreationViewModel::class.java)
|
viewModel = ViewModelProvider(this).get(ChatRoomCreationViewModel::class.java)
|
||||||
|
@ -174,7 +176,7 @@ class ChatRoomCreationFragment : SecureFragment<ChatRoomCreationFragmentBinding>
|
||||||
|
|
||||||
override fun goBack() {
|
override fun goBack() {
|
||||||
if (!findNavController().popBackStack()) {
|
if (!findNavController().popBackStack()) {
|
||||||
if (sharedViewModel.canSlidingPaneBeClosed.value == true) {
|
if (sharedViewModel.isSlidingPaneSlideable.value == true) {
|
||||||
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
|
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
|
||||||
} else {
|
} else {
|
||||||
navigateToEmptyChatRoom()
|
navigateToEmptyChatRoom()
|
||||||
|
|
|
@ -94,13 +94,15 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
sharedViewModel = requireActivity().run {
|
sharedViewModel = requireActivity().run {
|
||||||
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
||||||
}
|
}
|
||||||
binding.sharedMainViewModel = sharedViewModel
|
binding.sharedMainViewModel = sharedViewModel
|
||||||
|
|
||||||
|
useMaterialSharedAxisXForwardAnimation = sharedViewModel.isSlidingPaneSlideable.value == false
|
||||||
|
|
||||||
view.doOnPreDraw {
|
view.doOnPreDraw {
|
||||||
// Notifies fragment is ready to be drawn
|
// Notifies fragment is ready to be drawn
|
||||||
sharedViewModel.chatRoomFragmentOpenedEvent.value = Event(true)
|
sharedViewModel.chatRoomFragmentOpenedEvent.value = Event(true)
|
||||||
|
@ -264,7 +266,7 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
|
||||||
sharedViewModel.messageToForwardEvent.value = Event(chatMessage)
|
sharedViewModel.messageToForwardEvent.value = Event(chatMessage)
|
||||||
sharedViewModel.isPendingMessageForward.value = true
|
sharedViewModel.isPendingMessageForward.value = true
|
||||||
|
|
||||||
if (sharedViewModel.canSlidingPaneBeClosed.value == true) {
|
if (sharedViewModel.isSlidingPaneSlideable.value == true) {
|
||||||
Log.i("[Chat Room] Forwarding message, going to chat rooms list")
|
Log.i("[Chat Room] Forwarding message, going to chat rooms list")
|
||||||
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
|
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
|
||||||
}
|
}
|
||||||
|
@ -299,6 +301,7 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
|
||||||
{
|
{
|
||||||
it.consume { sipUri ->
|
it.consume { sipUri ->
|
||||||
Log.i("[Chat Room] Going to contacts list with SIP URI to add: $sipUri")
|
Log.i("[Chat Room] Going to contacts list with SIP URI to add: $sipUri")
|
||||||
|
sharedViewModel.updateContactsAnimationsBasedOnDestination.value = Event(R.id.masterChatRoomsFragment)
|
||||||
navigateToContacts(sipUri)
|
navigateToContacts(sipUri)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -527,7 +530,7 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
|
||||||
|
|
||||||
override fun goBack() {
|
override fun goBack() {
|
||||||
if (!findNavController().popBackStack()) {
|
if (!findNavController().popBackStack()) {
|
||||||
if (sharedViewModel.canSlidingPaneBeClosed.value == true) {
|
if (sharedViewModel.isSlidingPaneSlideable.value == true) {
|
||||||
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
|
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
|
||||||
} else {
|
} else {
|
||||||
navigateToEmptyChatRoom()
|
navigateToEmptyChatRoom()
|
||||||
|
|
|
@ -40,7 +40,7 @@ class DevicesFragment : SecureFragment<ChatRoomDevicesFragmentBinding>() {
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
sharedViewModel = requireActivity().run {
|
sharedViewModel = requireActivity().run {
|
||||||
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
||||||
|
|
|
@ -43,7 +43,7 @@ class EphemeralFragment : SecureFragment<ChatRoomEphemeralFragmentBinding>() {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
isSecure = true
|
isSecure = true
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
sharedViewModel = requireActivity().run {
|
sharedViewModel = requireActivity().run {
|
||||||
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
||||||
|
|
|
@ -54,7 +54,7 @@ class GroupInfoFragment : SecureFragment<ChatRoomGroupInfoFragmentBinding>() {
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
sharedViewModel = requireActivity().run {
|
sharedViewModel = requireActivity().run {
|
||||||
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
||||||
|
|
|
@ -47,7 +47,7 @@ class ImdnFragment : SecureFragment<ChatRoomImdnFragmentBinding>() {
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
sharedViewModel = requireActivity().run {
|
sharedViewModel = requireActivity().run {
|
||||||
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
package org.linphone.activities.main.chat.fragments
|
package org.linphone.activities.main.chat.fragments
|
||||||
|
|
||||||
import android.app.Dialog
|
import android.app.Dialog
|
||||||
|
import android.content.res.Configuration
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
|
@ -30,7 +31,9 @@ import androidx.recyclerview.widget.ItemTouchHelper
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import androidx.slidingpanelayout.widget.SlidingPaneLayout
|
import androidx.slidingpanelayout.widget.SlidingPaneLayout
|
||||||
|
import com.google.android.material.transition.MaterialSharedAxis
|
||||||
import org.linphone.LinphoneApplication.Companion.coreContext
|
import org.linphone.LinphoneApplication.Companion.coreContext
|
||||||
|
import org.linphone.LinphoneApplication.Companion.corePreferences
|
||||||
import org.linphone.R
|
import org.linphone.R
|
||||||
import org.linphone.activities.GenericActivity
|
import org.linphone.activities.GenericActivity
|
||||||
import org.linphone.activities.clearDisplayedChatRoom
|
import org.linphone.activities.clearDisplayedChatRoom
|
||||||
|
@ -75,11 +78,25 @@ class MasterChatRoomsFragment : MasterFragment<ChatRoomMasterFragmentBinding, Ch
|
||||||
super.onDestroyView()
|
super.onDestroyView()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
|
useMaterialSharedAxisXForwardAnimation = false
|
||||||
|
if (corePreferences.enableAnimations) {
|
||||||
|
val portraitOrientation = resources.configuration.orientation != Configuration.ORIENTATION_LANDSCAPE
|
||||||
|
val axis = if (portraitOrientation) MaterialSharedAxis.X else MaterialSharedAxis.Y
|
||||||
|
enterTransition = MaterialSharedAxis(axis, true)
|
||||||
|
reenterTransition = MaterialSharedAxis(axis, true)
|
||||||
|
returnTransition = MaterialSharedAxis(axis, false)
|
||||||
|
exitTransition = MaterialSharedAxis(axis, false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
isSecure = true
|
isSecure = true
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
listViewModel = ViewModelProvider(this).get(ChatRoomsListViewModel::class.java)
|
listViewModel = ViewModelProvider(this).get(ChatRoomsListViewModel::class.java)
|
||||||
binding.viewModel = listViewModel
|
binding.viewModel = listViewModel
|
||||||
|
@ -90,7 +107,7 @@ class MasterChatRoomsFragment : MasterFragment<ChatRoomMasterFragmentBinding, Ch
|
||||||
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
||||||
}
|
}
|
||||||
|
|
||||||
view.doOnPreDraw { sharedViewModel.canSlidingPaneBeClosed.value = binding.slidingPane.isSlideable }
|
view.doOnPreDraw { sharedViewModel.isSlidingPaneSlideable.value = binding.slidingPane.isSlideable }
|
||||||
|
|
||||||
// Chat room loading can take some time, so wait until it is ready before opening the pane
|
// Chat room loading can take some time, so wait until it is ready before opening the pane
|
||||||
sharedViewModel.chatRoomFragmentOpenedEvent.observe(
|
sharedViewModel.chatRoomFragmentOpenedEvent.observe(
|
||||||
|
@ -116,7 +133,7 @@ class MasterChatRoomsFragment : MasterFragment<ChatRoomMasterFragmentBinding, Ch
|
||||||
viewLifecycleOwner,
|
viewLifecycleOwner,
|
||||||
{
|
{
|
||||||
it.consume {
|
it.consume {
|
||||||
sharedViewModel.canSlidingPaneBeClosed.value = binding.slidingPane.isSlideable
|
sharedViewModel.isSlidingPaneSlideable.value = binding.slidingPane.isSlideable
|
||||||
if (binding.slidingPane.isSlideable) {
|
if (binding.slidingPane.isSlideable) {
|
||||||
val navHostFragment = childFragmentManager.findFragmentById(R.id.chat_nav_container) as NavHostFragment
|
val navHostFragment = childFragmentManager.findFragmentById(R.id.chat_nav_container) as NavHostFragment
|
||||||
if (navHostFragment.navController.currentDestination?.id == R.id.emptyChatFragment) {
|
if (navHostFragment.navController.currentDestination?.id == R.id.emptyChatFragment) {
|
||||||
|
|
|
@ -58,7 +58,7 @@ class ContactEditorFragment : GenericFragment<ContactEditorFragmentBinding>(), S
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
sharedViewModel = requireActivity().run {
|
sharedViewModel = requireActivity().run {
|
||||||
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
||||||
|
@ -70,6 +70,8 @@ class ContactEditorFragment : GenericFragment<ContactEditorFragmentBinding>(), S
|
||||||
)[ContactEditorViewModel::class.java]
|
)[ContactEditorViewModel::class.java]
|
||||||
binding.viewModel = viewModel
|
binding.viewModel = viewModel
|
||||||
|
|
||||||
|
useMaterialSharedAxisXForwardAnimation = sharedViewModel.isSlidingPaneSlideable.value == false
|
||||||
|
|
||||||
binding.setBackClickListener {
|
binding.setBackClickListener {
|
||||||
goBack()
|
goBack()
|
||||||
}
|
}
|
||||||
|
@ -110,7 +112,7 @@ class ContactEditorFragment : GenericFragment<ContactEditorFragmentBinding>(), S
|
||||||
|
|
||||||
override fun goBack() {
|
override fun goBack() {
|
||||||
if (!findNavController().popBackStack()) {
|
if (!findNavController().popBackStack()) {
|
||||||
if (sharedViewModel.canSlidingPaneBeClosed.value == true) {
|
if (sharedViewModel.isSlidingPaneSlideable.value == true) {
|
||||||
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
|
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
|
||||||
} else {
|
} else {
|
||||||
navigateToEmptyContact()
|
navigateToEmptyContact()
|
||||||
|
|
|
@ -50,13 +50,15 @@ class DetailContactFragment : GenericFragment<ContactDetailFragmentBinding>() {
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
sharedViewModel = requireActivity().run {
|
sharedViewModel = requireActivity().run {
|
||||||
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
||||||
}
|
}
|
||||||
binding.sharedMainViewModel = sharedViewModel
|
binding.sharedMainViewModel = sharedViewModel
|
||||||
|
|
||||||
|
useMaterialSharedAxisXForwardAnimation = sharedViewModel.isSlidingPaneSlideable.value == false
|
||||||
|
|
||||||
val id = arguments?.getString("id")
|
val id = arguments?.getString("id")
|
||||||
arguments?.clear()
|
arguments?.clear()
|
||||||
if (id != null) {
|
if (id != null) {
|
||||||
|
@ -93,6 +95,9 @@ class DetailContactFragment : GenericFragment<ContactDetailFragmentBinding>() {
|
||||||
it.consume { address ->
|
it.consume { address ->
|
||||||
if (coreContext.core.callsNb > 0) {
|
if (coreContext.core.callsNb > 0) {
|
||||||
Log.i("[Contact] Starting dialer with pre-filled URI ${address.asStringUriOnly()}, is transfer? ${sharedViewModel.pendingCallTransfer}")
|
Log.i("[Contact] Starting dialer with pre-filled URI ${address.asStringUriOnly()}, is transfer? ${sharedViewModel.pendingCallTransfer}")
|
||||||
|
sharedViewModel.updateContactsAnimationsBasedOnDestination.value = Event(R.id.dialerFragment)
|
||||||
|
sharedViewModel.updateDialerAnimationsBasedOnDestination.value = Event(R.id.masterContactsFragment)
|
||||||
|
|
||||||
val args = Bundle()
|
val args = Bundle()
|
||||||
args.putString("URI", address.asStringUriOnly())
|
args.putString("URI", address.asStringUriOnly())
|
||||||
args.putBoolean("Transfer", sharedViewModel.pendingCallTransfer)
|
args.putBoolean("Transfer", sharedViewModel.pendingCallTransfer)
|
||||||
|
@ -109,6 +114,7 @@ class DetailContactFragment : GenericFragment<ContactDetailFragmentBinding>() {
|
||||||
viewLifecycleOwner,
|
viewLifecycleOwner,
|
||||||
{
|
{
|
||||||
it.consume { chatRoom ->
|
it.consume { chatRoom ->
|
||||||
|
sharedViewModel.updateContactsAnimationsBasedOnDestination.value = Event(R.id.masterChatRoomsFragment)
|
||||||
val args = Bundle()
|
val args = Bundle()
|
||||||
args.putString("LocalSipUri", chatRoom.localAddress.asStringUriOnly())
|
args.putString("LocalSipUri", chatRoom.localAddress.asStringUriOnly())
|
||||||
args.putString("RemoteSipUri", chatRoom.peerAddress.asStringUriOnly())
|
args.putString("RemoteSipUri", chatRoom.peerAddress.asStringUriOnly())
|
||||||
|
@ -140,7 +146,7 @@ class DetailContactFragment : GenericFragment<ContactDetailFragmentBinding>() {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun goBack() {
|
override fun goBack() {
|
||||||
if (sharedViewModel.canSlidingPaneBeClosed.value == true) {
|
if (sharedViewModel.isSlidingPaneSlideable.value == true) {
|
||||||
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
|
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
|
||||||
} else {
|
} else {
|
||||||
navigateToEmptyContact()
|
navigateToEmptyContact()
|
||||||
|
|
|
@ -21,6 +21,7 @@ package org.linphone.activities.main.contact.fragments
|
||||||
|
|
||||||
import android.app.Dialog
|
import android.app.Dialog
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
|
import android.content.res.Configuration
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
|
@ -31,7 +32,9 @@ import androidx.recyclerview.widget.ItemTouchHelper
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import androidx.slidingpanelayout.widget.SlidingPaneLayout
|
import androidx.slidingpanelayout.widget.SlidingPaneLayout
|
||||||
|
import com.google.android.material.transition.MaterialSharedAxis
|
||||||
import org.linphone.LinphoneApplication.Companion.coreContext
|
import org.linphone.LinphoneApplication.Companion.coreContext
|
||||||
|
import org.linphone.LinphoneApplication.Companion.corePreferences
|
||||||
import org.linphone.R
|
import org.linphone.R
|
||||||
import org.linphone.activities.clearDisplayedContact
|
import org.linphone.activities.clearDisplayedContact
|
||||||
import org.linphone.activities.main.MainActivity
|
import org.linphone.activities.main.MainActivity
|
||||||
|
@ -67,7 +70,7 @@ class MasterContactsFragment : MasterFragment<ContactMasterFragmentBinding, Cont
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
listViewModel = ViewModelProvider(this).get(ContactsListViewModel::class.java)
|
listViewModel = ViewModelProvider(this).get(ContactsListViewModel::class.java)
|
||||||
binding.viewModel = listViewModel
|
binding.viewModel = listViewModel
|
||||||
|
@ -78,7 +81,28 @@ class MasterContactsFragment : MasterFragment<ContactMasterFragmentBinding, Cont
|
||||||
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
||||||
}
|
}
|
||||||
|
|
||||||
view.doOnPreDraw { sharedViewModel.canSlidingPaneBeClosed.value = binding.slidingPane.isSlideable }
|
view.doOnPreDraw { sharedViewModel.isSlidingPaneSlideable.value = binding.slidingPane.isSlideable }
|
||||||
|
|
||||||
|
useMaterialSharedAxisXForwardAnimation = false
|
||||||
|
sharedViewModel.updateContactsAnimationsBasedOnDestination.observe(
|
||||||
|
viewLifecycleOwner,
|
||||||
|
{
|
||||||
|
it.consume { id ->
|
||||||
|
val forward = when (id) {
|
||||||
|
R.id.dialerFragment, R.id.masterChatRoomsFragment -> false
|
||||||
|
else -> true
|
||||||
|
}
|
||||||
|
if (corePreferences.enableAnimations) {
|
||||||
|
val portraitOrientation = resources.configuration.orientation != Configuration.ORIENTATION_LANDSCAPE
|
||||||
|
val axis = if (portraitOrientation) MaterialSharedAxis.X else MaterialSharedAxis.Y
|
||||||
|
enterTransition = MaterialSharedAxis(axis, forward)
|
||||||
|
reenterTransition = MaterialSharedAxis(axis, forward)
|
||||||
|
returnTransition = MaterialSharedAxis(axis, !forward)
|
||||||
|
exitTransition = MaterialSharedAxis(axis, !forward)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
sharedViewModel.closeSlidingPaneEvent.observe(
|
sharedViewModel.closeSlidingPaneEvent.observe(
|
||||||
viewLifecycleOwner,
|
viewLifecycleOwner,
|
||||||
|
@ -94,7 +118,7 @@ class MasterContactsFragment : MasterFragment<ContactMasterFragmentBinding, Cont
|
||||||
viewLifecycleOwner,
|
viewLifecycleOwner,
|
||||||
{
|
{
|
||||||
it.consume {
|
it.consume {
|
||||||
sharedViewModel.canSlidingPaneBeClosed.value = binding.slidingPane.isSlideable
|
sharedViewModel.isSlidingPaneSlideable.value = binding.slidingPane.isSlideable
|
||||||
if (binding.slidingPane.isSlideable) {
|
if (binding.slidingPane.isSlideable) {
|
||||||
val navHostFragment = childFragmentManager.findFragmentById(R.id.contacts_nav_container) as NavHostFragment
|
val navHostFragment = childFragmentManager.findFragmentById(R.id.contacts_nav_container) as NavHostFragment
|
||||||
if (navHostFragment.navController.currentDestination?.id == R.id.emptyContactFragment) {
|
if (navHostFragment.navController.currentDestination?.id == R.id.emptyContactFragment) {
|
||||||
|
|
|
@ -38,7 +38,7 @@ class ConfigViewerFragment : SecureFragment<FileConfigViewerFragmentBinding>() {
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
viewModel = ViewModelProvider(this)[ConfigFileViewModel::class.java]
|
viewModel = ViewModelProvider(this)[ConfigFileViewModel::class.java]
|
||||||
binding.viewModel = viewModel
|
binding.viewModel = viewModel
|
||||||
|
|
|
@ -24,11 +24,13 @@ import android.content.ClipData
|
||||||
import android.content.ClipboardManager
|
import android.content.ClipboardManager
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
import android.content.res.Configuration
|
||||||
import android.net.Uri
|
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 com.google.android.material.dialog.MaterialAlertDialogBuilder
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
|
import com.google.android.material.transition.MaterialSharedAxis
|
||||||
import org.linphone.BuildConfig
|
import org.linphone.BuildConfig
|
||||||
import org.linphone.LinphoneApplication.Companion.coreContext
|
import org.linphone.LinphoneApplication.Companion.coreContext
|
||||||
import org.linphone.LinphoneApplication.Companion.corePreferences
|
import org.linphone.LinphoneApplication.Companion.corePreferences
|
||||||
|
@ -44,6 +46,7 @@ import org.linphone.core.tools.Log
|
||||||
import org.linphone.databinding.DialerFragmentBinding
|
import org.linphone.databinding.DialerFragmentBinding
|
||||||
import org.linphone.utils.AppUtils
|
import org.linphone.utils.AppUtils
|
||||||
import org.linphone.utils.DialogUtils
|
import org.linphone.utils.DialogUtils
|
||||||
|
import org.linphone.utils.Event
|
||||||
|
|
||||||
class DialerFragment : SecureFragment<DialerFragmentBinding>() {
|
class DialerFragment : SecureFragment<DialerFragmentBinding>() {
|
||||||
private lateinit var viewModel: DialerViewModel
|
private lateinit var viewModel: DialerViewModel
|
||||||
|
@ -56,7 +59,7 @@ class DialerFragment : SecureFragment<DialerFragmentBinding>() {
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
viewModel = ViewModelProvider(this).get(DialerViewModel::class.java)
|
viewModel = ViewModelProvider(this).get(DialerViewModel::class.java)
|
||||||
binding.viewModel = viewModel
|
binding.viewModel = viewModel
|
||||||
|
@ -65,7 +68,30 @@ class DialerFragment : SecureFragment<DialerFragmentBinding>() {
|
||||||
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
useMaterialSharedAxisXForwardAnimation = false
|
||||||
|
sharedViewModel.updateDialerAnimationsBasedOnDestination.observe(
|
||||||
|
viewLifecycleOwner,
|
||||||
|
{
|
||||||
|
it.consume { id ->
|
||||||
|
val forward = when (id) {
|
||||||
|
R.id.masterChatRoomsFragment -> false
|
||||||
|
else -> true
|
||||||
|
}
|
||||||
|
if (corePreferences.enableAnimations) {
|
||||||
|
val portraitOrientation = resources.configuration.orientation != Configuration.ORIENTATION_LANDSCAPE
|
||||||
|
val axis = if (portraitOrientation) MaterialSharedAxis.X else MaterialSharedAxis.Y
|
||||||
|
enterTransition = MaterialSharedAxis(axis, forward)
|
||||||
|
reenterTransition = MaterialSharedAxis(axis, forward)
|
||||||
|
returnTransition = MaterialSharedAxis(axis, !forward)
|
||||||
|
exitTransition = MaterialSharedAxis(axis, !forward)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
binding.setNewContactClickListener {
|
binding.setNewContactClickListener {
|
||||||
|
sharedViewModel.updateDialerAnimationsBasedOnDestination.value = Event(R.id.masterContactsFragment)
|
||||||
|
sharedViewModel.updateContactsAnimationsBasedOnDestination.value = Event(R.id.dialerFragment)
|
||||||
navigateToContacts(viewModel.enteredUri.value)
|
navigateToContacts(viewModel.enteredUri.value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ class AudioViewerFragment : GenericViewerFragment<FileAudioViewerFragmentBinding
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
val content = sharedViewModel.contentToOpen.value
|
val content = sharedViewModel.contentToOpen.value
|
||||||
if (content == null) {
|
if (content == null) {
|
||||||
|
|
|
@ -39,7 +39,7 @@ class ImageViewerFragment : GenericViewerFragment<FileImageViewerFragmentBinding
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
val content = sharedViewModel.contentToOpen.value
|
val content = sharedViewModel.contentToOpen.value
|
||||||
if (content == null) {
|
if (content == null) {
|
||||||
|
|
|
@ -39,7 +39,7 @@ class PdfViewerFragment : GenericViewerFragment<FilePdfViewerFragmentBinding>()
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
val content = sharedViewModel.contentToOpen.value
|
val content = sharedViewModel.contentToOpen.value
|
||||||
if (content == null) {
|
if (content == null) {
|
||||||
|
|
|
@ -37,7 +37,7 @@ class TextViewerFragment : GenericViewerFragment<FileTextViewerFragmentBinding>(
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
val content = sharedViewModel.contentToOpen.value
|
val content = sharedViewModel.contentToOpen.value
|
||||||
if (content == null) {
|
if (content == null) {
|
||||||
|
|
|
@ -38,7 +38,8 @@ class TopBarFragment : GenericFragment<FileViewerTopBarFragmentBinding>() {
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
useMaterialSharedAxisXForwardAnimation = false
|
||||||
|
|
||||||
binding.setBackClickListener {
|
binding.setBackClickListener {
|
||||||
goBack()
|
goBack()
|
||||||
|
|
|
@ -41,7 +41,7 @@ class VideoViewerFragment : GenericViewerFragment<FileVideoViewerFragmentBinding
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
val content = sharedViewModel.contentToOpen.value
|
val content = sharedViewModel.contentToOpen.value
|
||||||
if (content == null) {
|
if (content == null) {
|
||||||
|
|
|
@ -24,6 +24,7 @@ import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
|
import com.google.android.material.transition.MaterialSharedAxis
|
||||||
import org.linphone.R
|
import org.linphone.R
|
||||||
|
|
||||||
class EmptyFragment : Fragment() {
|
class EmptyFragment : Fragment() {
|
||||||
|
@ -32,6 +33,8 @@ class EmptyFragment : Fragment() {
|
||||||
container: ViewGroup?,
|
container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
): View? {
|
): View? {
|
||||||
|
reenterTransition = MaterialSharedAxis(MaterialSharedAxis.X, true)
|
||||||
|
returnTransition = MaterialSharedAxis(MaterialSharedAxis.X, false)
|
||||||
return inflater.inflate(R.layout.empty_fragment, container, false)
|
return inflater.inflate(R.layout.empty_fragment, container, false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,7 +36,8 @@ class ListTopBarFragment : GenericFragment<ListEditTopBarFragmentBinding>() {
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
useMaterialSharedAxisXForwardAnimation = false
|
||||||
|
|
||||||
viewModel = ViewModelProvider(parentFragment ?: this)[ListTopBarViewModel::class.java]
|
viewModel = ViewModelProvider(parentFragment ?: this)[ListTopBarViewModel::class.java]
|
||||||
binding.viewModel = viewModel
|
binding.viewModel = viewModel
|
||||||
|
|
|
@ -22,10 +22,8 @@ package org.linphone.activities.main.fragments
|
||||||
import android.app.Dialog
|
import android.app.Dialog
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.core.view.doOnPreDraw
|
|
||||||
import androidx.databinding.ViewDataBinding
|
import androidx.databinding.ViewDataBinding
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelProvider
|
||||||
import org.linphone.LinphoneApplication
|
|
||||||
import org.linphone.R
|
import org.linphone.R
|
||||||
import org.linphone.activities.main.adapters.SelectionListAdapter
|
import org.linphone.activities.main.adapters.SelectionListAdapter
|
||||||
import org.linphone.activities.main.viewmodels.DialogViewModel
|
import org.linphone.activities.main.viewmodels.DialogViewModel
|
||||||
|
@ -52,11 +50,6 @@ abstract class MasterFragment<T : ViewDataBinding, U : SelectionListAdapter<*, *
|
||||||
protected open val dialogConfirmationMessageBeforeRemoval: Int = R.plurals.dialog_default_delete
|
protected open val dialogConfirmationMessageBeforeRemoval: Int = R.plurals.dialog_default_delete
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
if (LinphoneApplication.corePreferences.enableAnimations) {
|
|
||||||
postponeEnterTransition()
|
|
||||||
view.doOnPreDraw { startPostponedEnterTransition() }
|
|
||||||
}
|
|
||||||
|
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
// List selection
|
// List selection
|
||||||
|
|
|
@ -40,7 +40,8 @@ class StatusFragment : GenericFragment<StatusFragmentBinding>() {
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
useMaterialSharedAxisXForwardAnimation = false
|
||||||
|
|
||||||
viewModel = ViewModelProvider(this).get(StatusViewModel::class.java)
|
viewModel = ViewModelProvider(this).get(StatusViewModel::class.java)
|
||||||
binding.viewModel = viewModel
|
binding.viewModel = viewModel
|
||||||
|
|
|
@ -28,22 +28,30 @@ import androidx.navigation.fragment.findNavController
|
||||||
import org.linphone.LinphoneApplication.Companion.corePreferences
|
import org.linphone.LinphoneApplication.Companion.corePreferences
|
||||||
import org.linphone.R
|
import org.linphone.R
|
||||||
import org.linphone.activities.GenericFragment
|
import org.linphone.activities.GenericFragment
|
||||||
|
import org.linphone.activities.main.viewmodels.SharedMainViewModel
|
||||||
import org.linphone.activities.main.viewmodels.TabsViewModel
|
import org.linphone.activities.main.viewmodels.TabsViewModel
|
||||||
import org.linphone.activities.navigateToCallHistory
|
import org.linphone.activities.navigateToCallHistory
|
||||||
import org.linphone.activities.navigateToChatRooms
|
import org.linphone.activities.navigateToChatRooms
|
||||||
import org.linphone.activities.navigateToContacts
|
import org.linphone.activities.navigateToContacts
|
||||||
import org.linphone.activities.navigateToDialer
|
import org.linphone.activities.navigateToDialer
|
||||||
import org.linphone.databinding.TabsFragmentBinding
|
import org.linphone.databinding.TabsFragmentBinding
|
||||||
|
import org.linphone.utils.Event
|
||||||
|
|
||||||
class TabsFragment : GenericFragment<TabsFragmentBinding>(), NavController.OnDestinationChangedListener {
|
class TabsFragment : GenericFragment<TabsFragmentBinding>(), NavController.OnDestinationChangedListener {
|
||||||
private lateinit var viewModel: TabsViewModel
|
private lateinit var viewModel: TabsViewModel
|
||||||
|
private lateinit var sharedViewModel: SharedMainViewModel
|
||||||
|
|
||||||
override fun getLayoutId(): Int = R.layout.tabs_fragment
|
override fun getLayoutId(): Int = R.layout.tabs_fragment
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
useMaterialSharedAxisXForwardAnimation = false
|
||||||
|
|
||||||
|
sharedViewModel = requireActivity().run {
|
||||||
|
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
||||||
|
}
|
||||||
|
|
||||||
viewModel = requireActivity().run {
|
viewModel = requireActivity().run {
|
||||||
ViewModelProvider(this).get(TabsViewModel::class.java)
|
ViewModelProvider(this).get(TabsViewModel::class.java)
|
||||||
|
@ -51,18 +59,34 @@ class TabsFragment : GenericFragment<TabsFragmentBinding>(), NavController.OnDes
|
||||||
binding.viewModel = viewModel
|
binding.viewModel = viewModel
|
||||||
|
|
||||||
binding.setHistoryClickListener {
|
binding.setHistoryClickListener {
|
||||||
|
when (findNavController().currentDestination?.id) {
|
||||||
|
R.id.masterContactsFragment -> sharedViewModel.updateContactsAnimationsBasedOnDestination.value = Event(R.id.masterCallLogsFragment)
|
||||||
|
R.id.dialerFragment -> sharedViewModel.updateDialerAnimationsBasedOnDestination.value = Event(R.id.masterCallLogsFragment)
|
||||||
|
}
|
||||||
navigateToCallHistory()
|
navigateToCallHistory()
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.setContactsClickListener {
|
binding.setContactsClickListener {
|
||||||
|
when (findNavController().currentDestination?.id) {
|
||||||
|
R.id.dialerFragment -> sharedViewModel.updateDialerAnimationsBasedOnDestination.value = Event(R.id.masterContactsFragment)
|
||||||
|
}
|
||||||
|
sharedViewModel.updateContactsAnimationsBasedOnDestination.value = Event(findNavController().currentDestination?.id ?: -1)
|
||||||
navigateToContacts()
|
navigateToContacts()
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.setDialerClickListener {
|
binding.setDialerClickListener {
|
||||||
|
when (findNavController().currentDestination?.id) {
|
||||||
|
R.id.masterContactsFragment -> sharedViewModel.updateContactsAnimationsBasedOnDestination.value = Event(R.id.dialerFragment)
|
||||||
|
}
|
||||||
|
sharedViewModel.updateDialerAnimationsBasedOnDestination.value = Event(findNavController().currentDestination?.id ?: -1)
|
||||||
navigateToDialer()
|
navigateToDialer()
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.setChatClickListener {
|
binding.setChatClickListener {
|
||||||
|
when (findNavController().currentDestination?.id) {
|
||||||
|
R.id.masterContactsFragment -> sharedViewModel.updateContactsAnimationsBasedOnDestination.value = Event(R.id.masterChatRoomsFragment)
|
||||||
|
R.id.dialerFragment -> sharedViewModel.updateDialerAnimationsBasedOnDestination.value = Event(R.id.masterChatRoomsFragment)
|
||||||
|
}
|
||||||
navigateToChatRooms()
|
navigateToChatRooms()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,7 +47,7 @@ class DetailCallLogFragment : GenericFragment<HistoryDetailFragmentBinding>() {
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
sharedViewModel = requireActivity().run {
|
sharedViewModel = requireActivity().run {
|
||||||
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
||||||
|
@ -68,6 +68,8 @@ class DetailCallLogFragment : GenericFragment<HistoryDetailFragmentBinding>() {
|
||||||
)[CallLogViewModel::class.java]
|
)[CallLogViewModel::class.java]
|
||||||
binding.viewModel = viewModel
|
binding.viewModel = viewModel
|
||||||
|
|
||||||
|
useMaterialSharedAxisXForwardAnimation = sharedViewModel.isSlidingPaneSlideable.value == false
|
||||||
|
|
||||||
viewModel.relatedCallLogs.value = callLogGroup.callLogs
|
viewModel.relatedCallLogs.value = callLogGroup.callLogs
|
||||||
|
|
||||||
binding.setBackClickListener {
|
binding.setBackClickListener {
|
||||||
|
@ -78,10 +80,12 @@ class DetailCallLogFragment : GenericFragment<HistoryDetailFragmentBinding>() {
|
||||||
val copy = viewModel.callLog.remoteAddress.clone()
|
val copy = viewModel.callLog.remoteAddress.clone()
|
||||||
copy.clean()
|
copy.clean()
|
||||||
Log.i("[History] Creating contact with SIP URI: ${copy.asStringUriOnly()}")
|
Log.i("[History] Creating contact with SIP URI: ${copy.asStringUriOnly()}")
|
||||||
|
sharedViewModel.updateContactsAnimationsBasedOnDestination.value = Event(R.id.masterCallLogsFragment)
|
||||||
navigateToContacts(copy.asStringUriOnly())
|
navigateToContacts(copy.asStringUriOnly())
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.setContactClickListener {
|
binding.setContactClickListener {
|
||||||
|
sharedViewModel.updateContactsAnimationsBasedOnDestination.value = Event(R.id.masterCallLogsFragment)
|
||||||
val contact = viewModel.contact.value as? NativeContact
|
val contact = viewModel.contact.value as? NativeContact
|
||||||
if (contact != null) {
|
if (contact != null) {
|
||||||
Log.i("[History] Displaying contact $contact")
|
Log.i("[History] Displaying contact $contact")
|
||||||
|
@ -101,6 +105,8 @@ class DetailCallLogFragment : GenericFragment<HistoryDetailFragmentBinding>() {
|
||||||
val address = callLog.remoteAddress
|
val address = callLog.remoteAddress
|
||||||
if (coreContext.core.callsNb > 0) {
|
if (coreContext.core.callsNb > 0) {
|
||||||
Log.i("[History] Starting dialer with pre-filled URI ${address.asStringUriOnly()}, is transfer? ${sharedViewModel.pendingCallTransfer}")
|
Log.i("[History] Starting dialer with pre-filled URI ${address.asStringUriOnly()}, is transfer? ${sharedViewModel.pendingCallTransfer}")
|
||||||
|
sharedViewModel.updateDialerAnimationsBasedOnDestination.value = Event(R.id.masterCallLogsFragment)
|
||||||
|
|
||||||
val args = Bundle()
|
val args = Bundle()
|
||||||
args.putString("URI", address.asStringUriOnly())
|
args.putString("URI", address.asStringUriOnly())
|
||||||
args.putBoolean("Transfer", sharedViewModel.pendingCallTransfer)
|
args.putBoolean("Transfer", sharedViewModel.pendingCallTransfer)
|
||||||
|
@ -140,7 +146,7 @@ class DetailCallLogFragment : GenericFragment<HistoryDetailFragmentBinding>() {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun goBack() {
|
override fun goBack() {
|
||||||
if (sharedViewModel.canSlidingPaneBeClosed.value == true) {
|
if (sharedViewModel.isSlidingPaneSlideable.value == true) {
|
||||||
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
|
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
|
||||||
} else {
|
} else {
|
||||||
navigateToEmptyCallHistory()
|
navigateToEmptyCallHistory()
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
package org.linphone.activities.main.history.fragments
|
package org.linphone.activities.main.history.fragments
|
||||||
|
|
||||||
import android.app.Dialog
|
import android.app.Dialog
|
||||||
|
import android.content.res.Configuration
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
|
@ -30,7 +31,9 @@ import androidx.recyclerview.widget.ItemTouchHelper
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import androidx.slidingpanelayout.widget.SlidingPaneLayout
|
import androidx.slidingpanelayout.widget.SlidingPaneLayout
|
||||||
|
import com.google.android.material.transition.MaterialSharedAxis
|
||||||
import org.linphone.LinphoneApplication.Companion.coreContext
|
import org.linphone.LinphoneApplication.Companion.coreContext
|
||||||
|
import org.linphone.LinphoneApplication.Companion.corePreferences
|
||||||
import org.linphone.R
|
import org.linphone.R
|
||||||
import org.linphone.activities.clearDisplayedCallHistory
|
import org.linphone.activities.clearDisplayedCallHistory
|
||||||
import org.linphone.activities.main.fragments.MasterFragment
|
import org.linphone.activities.main.fragments.MasterFragment
|
||||||
|
@ -67,10 +70,24 @@ class MasterCallLogsFragment : MasterFragment<HistoryMasterFragmentBinding, Call
|
||||||
super.onDestroyView()
|
super.onDestroyView()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
useMaterialSharedAxisXForwardAnimation = false
|
||||||
|
|
||||||
|
if (corePreferences.enableAnimations) {
|
||||||
|
val portraitOrientation = resources.configuration.orientation != Configuration.ORIENTATION_LANDSCAPE
|
||||||
|
val axis = if (portraitOrientation) MaterialSharedAxis.X else MaterialSharedAxis.Y
|
||||||
|
enterTransition = MaterialSharedAxis(axis, false)
|
||||||
|
reenterTransition = MaterialSharedAxis(axis, false)
|
||||||
|
returnTransition = MaterialSharedAxis(axis, true)
|
||||||
|
exitTransition = MaterialSharedAxis(axis, true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
listViewModel = ViewModelProvider(this).get(CallLogsListViewModel::class.java)
|
listViewModel = ViewModelProvider(this).get(CallLogsListViewModel::class.java)
|
||||||
binding.viewModel = listViewModel
|
binding.viewModel = listViewModel
|
||||||
|
@ -81,7 +98,7 @@ class MasterCallLogsFragment : MasterFragment<HistoryMasterFragmentBinding, Call
|
||||||
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
||||||
}
|
}
|
||||||
|
|
||||||
view.doOnPreDraw { sharedViewModel.canSlidingPaneBeClosed.value = binding.slidingPane.isSlideable }
|
view.doOnPreDraw { sharedViewModel.isSlidingPaneSlideable.value = binding.slidingPane.isSlideable }
|
||||||
|
|
||||||
sharedViewModel.closeSlidingPaneEvent.observe(
|
sharedViewModel.closeSlidingPaneEvent.observe(
|
||||||
viewLifecycleOwner,
|
viewLifecycleOwner,
|
||||||
|
@ -97,7 +114,7 @@ class MasterCallLogsFragment : MasterFragment<HistoryMasterFragmentBinding, Call
|
||||||
viewLifecycleOwner,
|
viewLifecycleOwner,
|
||||||
{
|
{
|
||||||
it.consume {
|
it.consume {
|
||||||
sharedViewModel.canSlidingPaneBeClosed.value = binding.slidingPane.isSlideable
|
sharedViewModel.isSlidingPaneSlideable.value = binding.slidingPane.isSlideable
|
||||||
if (binding.slidingPane.isSlideable) {
|
if (binding.slidingPane.isSlideable) {
|
||||||
val navHostFragment = childFragmentManager.findFragmentById(R.id.history_nav_container) as NavHostFragment
|
val navHostFragment = childFragmentManager.findFragmentById(R.id.history_nav_container) as NavHostFragment
|
||||||
if (navHostFragment.navController.currentDestination?.id == R.id.emptyCallHistoryFragment) {
|
if (navHostFragment.navController.currentDestination?.id == R.id.emptyCallHistoryFragment) {
|
||||||
|
@ -245,6 +262,7 @@ class MasterCallLogsFragment : MasterFragment<HistoryMasterFragmentBinding, Call
|
||||||
val remoteAddress = callLogGroup.lastCallLog.remoteAddress
|
val remoteAddress = callLogGroup.lastCallLog.remoteAddress
|
||||||
if (coreContext.core.callsNb > 0) {
|
if (coreContext.core.callsNb > 0) {
|
||||||
Log.i("[History] Starting dialer with pre-filled URI ${remoteAddress.asStringUriOnly()}, is transfer? ${sharedViewModel.pendingCallTransfer}")
|
Log.i("[History] Starting dialer with pre-filled URI ${remoteAddress.asStringUriOnly()}, is transfer? ${sharedViewModel.pendingCallTransfer}")
|
||||||
|
sharedViewModel.updateDialerAnimationsBasedOnDestination.value = Event(R.id.masterCallLogsFragment)
|
||||||
val args = Bundle()
|
val args = Bundle()
|
||||||
args.putString("URI", remoteAddress.asStringUriOnly())
|
args.putString("URI", remoteAddress.asStringUriOnly())
|
||||||
args.putBoolean("Transfer", sharedViewModel.pendingCallTransfer)
|
args.putBoolean("Transfer", sharedViewModel.pendingCallTransfer)
|
||||||
|
|
|
@ -49,7 +49,7 @@ class RecordingsFragment : MasterFragment<RecordingsFragmentBinding, RecordingsL
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
viewModel = ViewModelProvider(this).get(RecordingsViewModel::class.java)
|
viewModel = ViewModelProvider(this).get(RecordingsViewModel::class.java)
|
||||||
binding.viewModel = viewModel
|
binding.viewModel = viewModel
|
||||||
|
|
|
@ -23,18 +23,15 @@ import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelProvider
|
||||||
import org.linphone.R
|
import org.linphone.R
|
||||||
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.navigateToEmptySetting
|
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
|
||||||
import org.linphone.utils.Event
|
import org.linphone.utils.Event
|
||||||
|
|
||||||
class AccountSettingsFragment : GenericFragment<SettingsAccountFragmentBinding>() {
|
class AccountSettingsFragment : GenericSettingFragment<SettingsAccountFragmentBinding>() {
|
||||||
private lateinit var sharedViewModel: SharedMainViewModel
|
|
||||||
private lateinit var viewModel: AccountSettingsViewModel
|
private lateinit var viewModel: AccountSettingsViewModel
|
||||||
|
|
||||||
override fun getLayoutId(): Int = R.layout.settings_account_fragment
|
override fun getLayoutId(): Int = R.layout.settings_account_fragment
|
||||||
|
@ -42,11 +39,7 @@ class AccountSettingsFragment : GenericFragment<SettingsAccountFragmentBinding>(
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
sharedViewModel = requireActivity().run {
|
|
||||||
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
|
||||||
}
|
|
||||||
binding.sharedMainViewModel = sharedViewModel
|
binding.sharedMainViewModel = sharedViewModel
|
||||||
|
|
||||||
val identity = arguments?.getString("Identity")
|
val identity = arguments?.getString("Identity")
|
||||||
|
@ -100,7 +93,7 @@ class AccountSettingsFragment : GenericFragment<SettingsAccountFragmentBinding>(
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun goBack() {
|
override fun goBack() {
|
||||||
if (sharedViewModel.canSlidingPaneBeClosed.value == true) {
|
if (sharedViewModel.isSlidingPaneSlideable.value == true) {
|
||||||
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
|
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
|
||||||
} else {
|
} else {
|
||||||
navigateToEmptySetting()
|
navigateToEmptySetting()
|
||||||
|
|
|
@ -28,10 +28,8 @@ import androidx.appcompat.app.AppCompatDelegate
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelProvider
|
||||||
import org.linphone.R
|
import org.linphone.R
|
||||||
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.navigateToEmptySetting
|
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
|
||||||
|
@ -40,8 +38,7 @@ import org.linphone.utils.AppUtils
|
||||||
import org.linphone.utils.Event
|
import org.linphone.utils.Event
|
||||||
import org.linphone.utils.PowerManagerUtils
|
import org.linphone.utils.PowerManagerUtils
|
||||||
|
|
||||||
class AdvancedSettingsFragment : GenericFragment<SettingsAdvancedFragmentBinding>() {
|
class AdvancedSettingsFragment : GenericSettingFragment<SettingsAdvancedFragmentBinding>() {
|
||||||
private lateinit var sharedViewModel: SharedMainViewModel
|
|
||||||
private lateinit var viewModel: AdvancedSettingsViewModel
|
private lateinit var viewModel: AdvancedSettingsViewModel
|
||||||
|
|
||||||
override fun getLayoutId(): Int = R.layout.settings_advanced_fragment
|
override fun getLayoutId(): Int = R.layout.settings_advanced_fragment
|
||||||
|
@ -49,11 +46,7 @@ class AdvancedSettingsFragment : GenericFragment<SettingsAdvancedFragmentBinding
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
sharedViewModel = requireActivity().run {
|
|
||||||
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
|
||||||
}
|
|
||||||
binding.sharedMainViewModel = sharedViewModel
|
binding.sharedMainViewModel = sharedViewModel
|
||||||
|
|
||||||
viewModel = ViewModelProvider(this).get(AdvancedSettingsViewModel::class.java)
|
viewModel = ViewModelProvider(this).get(AdvancedSettingsViewModel::class.java)
|
||||||
|
@ -162,7 +155,7 @@ class AdvancedSettingsFragment : GenericFragment<SettingsAdvancedFragmentBinding
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun goBack() {
|
override fun goBack() {
|
||||||
if (sharedViewModel.canSlidingPaneBeClosed.value == true) {
|
if (sharedViewModel.isSlidingPaneSlideable.value == true) {
|
||||||
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
|
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
|
||||||
} else {
|
} else {
|
||||||
navigateToEmptySetting()
|
navigateToEmptySetting()
|
||||||
|
|
|
@ -29,18 +29,15 @@ import androidx.lifecycle.ViewModelProvider
|
||||||
import org.linphone.BR
|
import org.linphone.BR
|
||||||
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.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.navigateToEmptySetting
|
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
|
||||||
import org.linphone.utils.PermissionHelper
|
import org.linphone.utils.PermissionHelper
|
||||||
|
|
||||||
class AudioSettingsFragment : GenericFragment<SettingsAudioFragmentBinding>() {
|
class AudioSettingsFragment : GenericSettingFragment<SettingsAudioFragmentBinding>() {
|
||||||
private lateinit var sharedViewModel: SharedMainViewModel
|
|
||||||
private lateinit var viewModel: AudioSettingsViewModel
|
private lateinit var viewModel: AudioSettingsViewModel
|
||||||
|
|
||||||
override fun getLayoutId(): Int = R.layout.settings_audio_fragment
|
override fun getLayoutId(): Int = R.layout.settings_audio_fragment
|
||||||
|
@ -48,11 +45,7 @@ class AudioSettingsFragment : GenericFragment<SettingsAudioFragmentBinding>() {
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
sharedViewModel = requireActivity().run {
|
|
||||||
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
|
||||||
}
|
|
||||||
binding.sharedMainViewModel = sharedViewModel
|
binding.sharedMainViewModel = sharedViewModel
|
||||||
|
|
||||||
viewModel = ViewModelProvider(this).get(AudioSettingsViewModel::class.java)
|
viewModel = ViewModelProvider(this).get(AudioSettingsViewModel::class.java)
|
||||||
|
@ -121,14 +114,14 @@ class AudioSettingsFragment : GenericFragment<SettingsAudioFragmentBinding>() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
list.add(binding)
|
list.add(binding)
|
||||||
}
|
}
|
||||||
viewModel.audioCodecs.value = list
|
viewModel.audioCodecs.value = list
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun goBack() {
|
override fun goBack() {
|
||||||
if (sharedViewModel.canSlidingPaneBeClosed.value == true) {
|
if (sharedViewModel.isSlidingPaneSlideable.value == true) {
|
||||||
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
|
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
|
||||||
} else {
|
} else {
|
||||||
navigateToEmptySetting()
|
navigateToEmptySetting()
|
||||||
|
|
|
@ -27,17 +27,14 @@ import android.provider.Settings
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelProvider
|
||||||
import org.linphone.R
|
import org.linphone.R
|
||||||
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.navigateToEmptySetting
|
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
|
||||||
import org.linphone.utils.Event
|
import org.linphone.utils.Event
|
||||||
|
|
||||||
class CallSettingsFragment : GenericFragment<SettingsCallFragmentBinding>() {
|
class CallSettingsFragment : GenericSettingFragment<SettingsCallFragmentBinding>() {
|
||||||
private lateinit var sharedViewModel: SharedMainViewModel
|
|
||||||
private lateinit var viewModel: CallSettingsViewModel
|
private lateinit var viewModel: CallSettingsViewModel
|
||||||
|
|
||||||
override fun getLayoutId(): Int = R.layout.settings_call_fragment
|
override fun getLayoutId(): Int = R.layout.settings_call_fragment
|
||||||
|
@ -45,11 +42,7 @@ class CallSettingsFragment : GenericFragment<SettingsCallFragmentBinding>() {
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
sharedViewModel = requireActivity().run {
|
|
||||||
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
|
||||||
}
|
|
||||||
binding.sharedMainViewModel = sharedViewModel
|
binding.sharedMainViewModel = sharedViewModel
|
||||||
|
|
||||||
viewModel = ViewModelProvider(this).get(CallSettingsViewModel::class.java)
|
viewModel = ViewModelProvider(this).get(CallSettingsViewModel::class.java)
|
||||||
|
@ -101,7 +94,7 @@ class CallSettingsFragment : GenericFragment<SettingsCallFragmentBinding>() {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun goBack() {
|
override fun goBack() {
|
||||||
if (sharedViewModel.canSlidingPaneBeClosed.value == true) {
|
if (sharedViewModel.isSlidingPaneSlideable.value == true) {
|
||||||
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
|
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
|
||||||
} else {
|
} else {
|
||||||
navigateToEmptySetting()
|
navigateToEmptySetting()
|
||||||
|
|
|
@ -26,17 +26,14 @@ import android.provider.Settings
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelProvider
|
||||||
import org.linphone.R
|
import org.linphone.R
|
||||||
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.navigateToEmptySetting
|
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
|
||||||
import org.linphone.utils.Event
|
import org.linphone.utils.Event
|
||||||
|
|
||||||
class ChatSettingsFragment : GenericFragment<SettingsChatFragmentBinding>() {
|
class ChatSettingsFragment : GenericSettingFragment<SettingsChatFragmentBinding>() {
|
||||||
private lateinit var sharedViewModel: SharedMainViewModel
|
|
||||||
private lateinit var viewModel: ChatSettingsViewModel
|
private lateinit var viewModel: ChatSettingsViewModel
|
||||||
|
|
||||||
override fun getLayoutId(): Int = R.layout.settings_chat_fragment
|
override fun getLayoutId(): Int = R.layout.settings_chat_fragment
|
||||||
|
@ -44,11 +41,7 @@ class ChatSettingsFragment : GenericFragment<SettingsChatFragmentBinding>() {
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
sharedViewModel = requireActivity().run {
|
|
||||||
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
|
||||||
}
|
|
||||||
binding.sharedMainViewModel = sharedViewModel
|
binding.sharedMainViewModel = sharedViewModel
|
||||||
|
|
||||||
viewModel = ViewModelProvider(this).get(ChatSettingsViewModel::class.java)
|
viewModel = ViewModelProvider(this).get(ChatSettingsViewModel::class.java)
|
||||||
|
@ -93,7 +86,7 @@ class ChatSettingsFragment : GenericFragment<SettingsChatFragmentBinding>() {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun goBack() {
|
override fun goBack() {
|
||||||
if (sharedViewModel.canSlidingPaneBeClosed.value == true) {
|
if (sharedViewModel.isSlidingPaneSlideable.value == true) {
|
||||||
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
|
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
|
||||||
} else {
|
} else {
|
||||||
navigateToEmptySetting()
|
navigateToEmptySetting()
|
||||||
|
|
|
@ -26,9 +26,7 @@ import androidx.lifecycle.ViewModelProvider
|
||||||
import org.linphone.LinphoneApplication.Companion.coreContext
|
import org.linphone.LinphoneApplication.Companion.coreContext
|
||||||
import org.linphone.LinphoneApplication.Companion.corePreferences
|
import org.linphone.LinphoneApplication.Companion.corePreferences
|
||||||
import org.linphone.R
|
import org.linphone.R
|
||||||
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.navigateToEmptySetting
|
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
|
||||||
|
@ -36,8 +34,7 @@ import org.linphone.databinding.SettingsContactsFragmentBinding
|
||||||
import org.linphone.utils.Event
|
import org.linphone.utils.Event
|
||||||
import org.linphone.utils.PermissionHelper
|
import org.linphone.utils.PermissionHelper
|
||||||
|
|
||||||
class ContactsSettingsFragment : GenericFragment<SettingsContactsFragmentBinding>() {
|
class ContactsSettingsFragment : GenericSettingFragment<SettingsContactsFragmentBinding>() {
|
||||||
private lateinit var sharedViewModel: SharedMainViewModel
|
|
||||||
private lateinit var viewModel: ContactsSettingsViewModel
|
private lateinit var viewModel: ContactsSettingsViewModel
|
||||||
|
|
||||||
override fun getLayoutId(): Int = R.layout.settings_contacts_fragment
|
override fun getLayoutId(): Int = R.layout.settings_contacts_fragment
|
||||||
|
@ -45,11 +42,7 @@ class ContactsSettingsFragment : GenericFragment<SettingsContactsFragmentBinding
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
sharedViewModel = requireActivity().run {
|
|
||||||
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
|
||||||
}
|
|
||||||
binding.sharedMainViewModel = sharedViewModel
|
binding.sharedMainViewModel = sharedViewModel
|
||||||
|
|
||||||
viewModel = ViewModelProvider(this).get(ContactsSettingsViewModel::class.java)
|
viewModel = ViewModelProvider(this).get(ContactsSettingsViewModel::class.java)
|
||||||
|
@ -120,7 +113,7 @@ class ContactsSettingsFragment : GenericFragment<SettingsContactsFragmentBinding
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun goBack() {
|
override fun goBack() {
|
||||||
if (sharedViewModel.canSlidingPaneBeClosed.value == true) {
|
if (sharedViewModel.isSlidingPaneSlideable.value == true) {
|
||||||
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
|
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
|
||||||
} else {
|
} else {
|
||||||
navigateToEmptySetting()
|
navigateToEmptySetting()
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2010-2021 Belledonne Communications SARL.
|
||||||
|
*
|
||||||
|
* This file is part of linphone-android
|
||||||
|
* (see https://www.linphone.org).
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package org.linphone.activities.main.settings.fragments
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.View
|
||||||
|
import androidx.databinding.ViewDataBinding
|
||||||
|
import androidx.lifecycle.ViewModelProvider
|
||||||
|
import org.linphone.activities.GenericFragment
|
||||||
|
import org.linphone.activities.main.viewmodels.SharedMainViewModel
|
||||||
|
|
||||||
|
abstract class GenericSettingFragment<T : ViewDataBinding> : GenericFragment<T>() {
|
||||||
|
protected lateinit var sharedViewModel: SharedMainViewModel
|
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
sharedViewModel = requireActivity().run {
|
||||||
|
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
||||||
|
}
|
||||||
|
|
||||||
|
useMaterialSharedAxisXForwardAnimation = sharedViewModel.isSlidingPaneSlideable.value == false
|
||||||
|
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
}
|
||||||
|
}
|
|
@ -23,15 +23,12 @@ import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelProvider
|
||||||
import org.linphone.R
|
import org.linphone.R
|
||||||
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.navigateToEmptySetting
|
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
|
||||||
|
|
||||||
class NetworkSettingsFragment : GenericFragment<SettingsNetworkFragmentBinding>() {
|
class NetworkSettingsFragment : GenericSettingFragment<SettingsNetworkFragmentBinding>() {
|
||||||
private lateinit var sharedViewModel: SharedMainViewModel
|
|
||||||
private lateinit var viewModel: NetworkSettingsViewModel
|
private lateinit var viewModel: NetworkSettingsViewModel
|
||||||
|
|
||||||
override fun getLayoutId(): Int = R.layout.settings_network_fragment
|
override fun getLayoutId(): Int = R.layout.settings_network_fragment
|
||||||
|
@ -39,11 +36,7 @@ class NetworkSettingsFragment : GenericFragment<SettingsNetworkFragmentBinding>(
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
sharedViewModel = requireActivity().run {
|
|
||||||
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
|
||||||
}
|
|
||||||
binding.sharedMainViewModel = sharedViewModel
|
binding.sharedMainViewModel = sharedViewModel
|
||||||
|
|
||||||
viewModel = ViewModelProvider(this).get(NetworkSettingsViewModel::class.java)
|
viewModel = ViewModelProvider(this).get(NetworkSettingsViewModel::class.java)
|
||||||
|
@ -53,7 +46,7 @@ class NetworkSettingsFragment : GenericFragment<SettingsNetworkFragmentBinding>(
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun goBack() {
|
override fun goBack() {
|
||||||
if (sharedViewModel.canSlidingPaneBeClosed.value == true) {
|
if (sharedViewModel.isSlidingPaneSlideable.value == true) {
|
||||||
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
|
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
|
||||||
} else {
|
} else {
|
||||||
navigateToEmptySetting()
|
navigateToEmptySetting()
|
||||||
|
|
|
@ -25,6 +25,8 @@ import androidx.core.view.doOnPreDraw
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelProvider
|
||||||
import androidx.navigation.fragment.NavHostFragment
|
import androidx.navigation.fragment.NavHostFragment
|
||||||
import androidx.slidingpanelayout.widget.SlidingPaneLayout
|
import androidx.slidingpanelayout.widget.SlidingPaneLayout
|
||||||
|
import com.google.android.material.transition.MaterialSharedAxis
|
||||||
|
import org.linphone.LinphoneApplication.Companion.corePreferences
|
||||||
import org.linphone.R
|
import org.linphone.R
|
||||||
import org.linphone.activities.*
|
import org.linphone.activities.*
|
||||||
import org.linphone.activities.main.fragments.SecureFragment
|
import org.linphone.activities.main.fragments.SecureFragment
|
||||||
|
@ -47,7 +49,15 @@ class SettingsFragment : SecureFragment<SettingsFragmentBinding>() {
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
|
useMaterialSharedAxisXForwardAnimation = false
|
||||||
|
if (corePreferences.enableAnimations) {
|
||||||
|
enterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true)
|
||||||
|
reenterTransition = MaterialSharedAxis(MaterialSharedAxis.Z, true)
|
||||||
|
returnTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false)
|
||||||
|
exitTransition = MaterialSharedAxis(MaterialSharedAxis.Z, false)
|
||||||
|
}
|
||||||
|
|
||||||
/* Shared view model & sliding pane related */
|
/* Shared view model & sliding pane related */
|
||||||
|
|
||||||
|
@ -55,7 +65,7 @@ class SettingsFragment : SecureFragment<SettingsFragmentBinding>() {
|
||||||
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
||||||
}
|
}
|
||||||
|
|
||||||
view.doOnPreDraw { sharedViewModel.canSlidingPaneBeClosed.value = binding.slidingPane.isSlideable }
|
view.doOnPreDraw { sharedViewModel.isSlidingPaneSlideable.value = binding.slidingPane.isSlideable }
|
||||||
|
|
||||||
sharedViewModel.closeSlidingPaneEvent.observe(
|
sharedViewModel.closeSlidingPaneEvent.observe(
|
||||||
viewLifecycleOwner,
|
viewLifecycleOwner,
|
||||||
|
@ -71,7 +81,7 @@ class SettingsFragment : SecureFragment<SettingsFragmentBinding>() {
|
||||||
viewLifecycleOwner,
|
viewLifecycleOwner,
|
||||||
{
|
{
|
||||||
it.consume {
|
it.consume {
|
||||||
sharedViewModel.canSlidingPaneBeClosed.value = binding.slidingPane.isSlideable
|
sharedViewModel.isSlidingPaneSlideable.value = binding.slidingPane.isSlideable
|
||||||
if (binding.slidingPane.isSlideable) {
|
if (binding.slidingPane.isSlideable) {
|
||||||
val navHostFragment = childFragmentManager.findFragmentById(R.id.settings_nav_container) as NavHostFragment
|
val navHostFragment = childFragmentManager.findFragmentById(R.id.settings_nav_container) as NavHostFragment
|
||||||
if (navHostFragment.navController.currentDestination?.id == R.id.emptySettingsFragment) {
|
if (navHostFragment.navController.currentDestination?.id == R.id.emptySettingsFragment) {
|
||||||
|
|
|
@ -23,15 +23,12 @@ import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelProvider
|
||||||
import org.linphone.R
|
import org.linphone.R
|
||||||
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.navigateToEmptySetting
|
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
|
||||||
|
|
||||||
class TunnelSettingsFragment : GenericFragment<SettingsTunnelFragmentBinding>() {
|
class TunnelSettingsFragment : GenericSettingFragment<SettingsTunnelFragmentBinding>() {
|
||||||
private lateinit var sharedViewModel: SharedMainViewModel
|
|
||||||
private lateinit var viewModel: TunnelSettingsViewModel
|
private lateinit var viewModel: TunnelSettingsViewModel
|
||||||
|
|
||||||
override fun getLayoutId(): Int = R.layout.settings_tunnel_fragment
|
override fun getLayoutId(): Int = R.layout.settings_tunnel_fragment
|
||||||
|
@ -39,11 +36,7 @@ class TunnelSettingsFragment : GenericFragment<SettingsTunnelFragmentBinding>()
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
sharedViewModel = requireActivity().run {
|
|
||||||
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
|
||||||
}
|
|
||||||
binding.sharedMainViewModel = sharedViewModel
|
binding.sharedMainViewModel = sharedViewModel
|
||||||
|
|
||||||
viewModel = ViewModelProvider(this).get(TunnelSettingsViewModel::class.java)
|
viewModel = ViewModelProvider(this).get(TunnelSettingsViewModel::class.java)
|
||||||
|
@ -53,7 +46,7 @@ class TunnelSettingsFragment : GenericFragment<SettingsTunnelFragmentBinding>()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun goBack() {
|
override fun goBack() {
|
||||||
if (sharedViewModel.canSlidingPaneBeClosed.value == true) {
|
if (sharedViewModel.isSlidingPaneSlideable.value == true) {
|
||||||
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
|
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
|
||||||
} else {
|
} else {
|
||||||
navigateToEmptySetting()
|
navigateToEmptySetting()
|
||||||
|
|
|
@ -29,18 +29,15 @@ import androidx.lifecycle.ViewModelProvider
|
||||||
import org.linphone.BR
|
import org.linphone.BR
|
||||||
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.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.navigateToEmptySetting
|
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
|
||||||
import org.linphone.utils.PermissionHelper
|
import org.linphone.utils.PermissionHelper
|
||||||
|
|
||||||
class VideoSettingsFragment : GenericFragment<SettingsVideoFragmentBinding>() {
|
class VideoSettingsFragment : GenericSettingFragment<SettingsVideoFragmentBinding>() {
|
||||||
private lateinit var sharedViewModel: SharedMainViewModel
|
|
||||||
private lateinit var viewModel: VideoSettingsViewModel
|
private lateinit var viewModel: VideoSettingsViewModel
|
||||||
|
|
||||||
override fun getLayoutId(): Int = R.layout.settings_video_fragment
|
override fun getLayoutId(): Int = R.layout.settings_video_fragment
|
||||||
|
@ -48,11 +45,7 @@ class VideoSettingsFragment : GenericFragment<SettingsVideoFragmentBinding>() {
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
sharedViewModel = requireActivity().run {
|
|
||||||
ViewModelProvider(this).get(SharedMainViewModel::class.java)
|
|
||||||
}
|
|
||||||
binding.sharedMainViewModel = sharedViewModel
|
binding.sharedMainViewModel = sharedViewModel
|
||||||
|
|
||||||
viewModel = ViewModelProvider(this).get(VideoSettingsViewModel::class.java)
|
viewModel = ViewModelProvider(this).get(VideoSettingsViewModel::class.java)
|
||||||
|
@ -105,14 +98,14 @@ class VideoSettingsFragment : GenericFragment<SettingsVideoFragmentBinding>() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
list.add(binding)
|
list.add(binding)
|
||||||
}
|
}
|
||||||
viewModel.videoCodecs.value = list
|
viewModel.videoCodecs.value = list
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun goBack() {
|
override fun goBack() {
|
||||||
if (sharedViewModel.canSlidingPaneBeClosed.value == true) {
|
if (sharedViewModel.isSlidingPaneSlideable.value == true) {
|
||||||
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
|
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
|
||||||
} else {
|
} else {
|
||||||
navigateToEmptySetting()
|
navigateToEmptySetting()
|
||||||
|
|
|
@ -31,7 +31,6 @@ import androidx.lifecycle.lifecycleScope
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import org.linphone.LinphoneApplication.Companion.coreContext
|
import org.linphone.LinphoneApplication.Companion.coreContext
|
||||||
import org.linphone.LinphoneApplication.Companion.corePreferences
|
|
||||||
import org.linphone.R
|
import org.linphone.R
|
||||||
import org.linphone.activities.GenericFragment
|
import org.linphone.activities.GenericFragment
|
||||||
import org.linphone.activities.assistant.AssistantActivity
|
import org.linphone.activities.assistant.AssistantActivity
|
||||||
|
@ -58,7 +57,7 @@ class SideMenuFragment : GenericFragment<SideMenuFragmentBinding>() {
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
binding.lifecycleOwner = this
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
|
||||||
viewModel = ViewModelProvider(this).get(SideMenuViewModel::class.java)
|
viewModel = ViewModelProvider(this).get(SideMenuViewModel::class.java)
|
||||||
binding.viewModel = viewModel
|
binding.viewModel = viewModel
|
||||||
|
@ -93,10 +92,6 @@ class SideMenuFragment : GenericFragment<SideMenuFragmentBinding>() {
|
||||||
binding.setAssistantClickListener {
|
binding.setAssistantClickListener {
|
||||||
sharedViewModel.toggleDrawerEvent.value = Event(true)
|
sharedViewModel.toggleDrawerEvent.value = Event(true)
|
||||||
startActivity(Intent(context, AssistantActivity::class.java))
|
startActivity(Intent(context, AssistantActivity::class.java))
|
||||||
|
|
||||||
if (corePreferences.enableAnimations) {
|
|
||||||
requireActivity().overridePendingTransition(R.anim.enter_right, R.anim.exit_left)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.setSettingsClickListener {
|
binding.setSettingsClickListener {
|
||||||
|
|
|
@ -30,7 +30,7 @@ class SharedMainViewModel : ViewModel() {
|
||||||
val toggleDrawerEvent = MutableLiveData<Event<Boolean>>()
|
val toggleDrawerEvent = MutableLiveData<Event<Boolean>>()
|
||||||
|
|
||||||
val layoutChangedEvent = MutableLiveData<Event<Boolean>>()
|
val layoutChangedEvent = MutableLiveData<Event<Boolean>>()
|
||||||
var canSlidingPaneBeClosed = MutableLiveData<Boolean>()
|
var isSlidingPaneSlideable = MutableLiveData<Boolean>()
|
||||||
val closeSlidingPaneEvent = MutableLiveData<Event<Boolean>>()
|
val closeSlidingPaneEvent = MutableLiveData<Event<Boolean>>()
|
||||||
|
|
||||||
/* Call history */
|
/* Call history */
|
||||||
|
@ -70,6 +70,11 @@ class SharedMainViewModel : ViewModel() {
|
||||||
|
|
||||||
val selectedContact = MutableLiveData<Contact>()
|
val selectedContact = MutableLiveData<Contact>()
|
||||||
|
|
||||||
|
// For correct animations directions
|
||||||
|
val updateContactsAnimationsBasedOnDestination: MutableLiveData<Event<Int>> by lazy {
|
||||||
|
MutableLiveData<Event<Int>>()
|
||||||
|
}
|
||||||
|
|
||||||
/* Accounts */
|
/* Accounts */
|
||||||
|
|
||||||
val accountRemoved = MutableLiveData<Boolean>()
|
val accountRemoved = MutableLiveData<Boolean>()
|
||||||
|
@ -81,4 +86,9 @@ class SharedMainViewModel : ViewModel() {
|
||||||
/* Dialer */
|
/* Dialer */
|
||||||
|
|
||||||
var dialerUri: String = ""
|
var dialerUri: String = ""
|
||||||
|
|
||||||
|
// For correct animations directions
|
||||||
|
val updateDialerAnimationsBasedOnDestination: MutableLiveData<Event<Int>> by lazy {
|
||||||
|
MutableLiveData<Event<Int>>()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,7 +36,6 @@ import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.async
|
import kotlinx.coroutines.async
|
||||||
import kotlinx.coroutines.coroutineScope
|
import kotlinx.coroutines.coroutineScope
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import org.linphone.LinphoneApplication
|
|
||||||
import org.linphone.LinphoneApplication.Companion.coreContext
|
import org.linphone.LinphoneApplication.Companion.coreContext
|
||||||
import org.linphone.R
|
import org.linphone.R
|
||||||
import org.linphone.core.tools.Log
|
import org.linphone.core.tools.Log
|
||||||
|
@ -465,9 +464,6 @@ class FileUtils {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
activity.startActivity(intent)
|
activity.startActivity(intent)
|
||||||
if (LinphoneApplication.corePreferences.enableAnimations) {
|
|
||||||
activity.overridePendingTransition(R.anim.enter_right, R.anim.exit_left)
|
|
||||||
}
|
|
||||||
return true
|
return true
|
||||||
} catch (anfe: ActivityNotFoundException) {
|
} catch (anfe: ActivityNotFoundException) {
|
||||||
Log.e("[File Viewer] Can't open file in third party app: $anfe")
|
Log.e("[File Viewer] Can't open file in third party app: $anfe")
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
<?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>
|
|
|
@ -1,8 +0,0 @@
|
||||||
<?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>
|
|
|
@ -1,8 +0,0 @@
|
||||||
<?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>
|
|
|
@ -1,8 +0,0 @@
|
||||||
<?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>
|
|
|
@ -1,8 +0,0 @@
|
||||||
<?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>
|
|
|
@ -1,8 +0,0 @@
|
||||||
<?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>
|
|
|
@ -1,8 +0,0 @@
|
||||||
<?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>
|
|
|
@ -1,8 +0,0 @@
|
||||||
<?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>
|
|
|
@ -1,8 +0,0 @@
|
||||||
<?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>
|
|
|
@ -1,8 +0,0 @@
|
||||||
<?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>
|
|
|
@ -1,8 +0,0 @@
|
||||||
<?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>
|
|
|
@ -1,8 +0,0 @@
|
||||||
<?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>
|
|
|
@ -53,7 +53,7 @@
|
||||||
android:id="@+id/back"
|
android:id="@+id/back"
|
||||||
android:contentDescription="@string/content_description_go_back"
|
android:contentDescription="@string/content_description_go_back"
|
||||||
android:onClick="@{backClickListener}"
|
android:onClick="@{backClickListener}"
|
||||||
android:visibility="@{sharedMainViewModel.canSlidingPaneBeClosed ? View.VISIBLE : View.GONE}"
|
android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_weight="0.2"
|
android:layout_weight="0.2"
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/back"
|
android:id="@+id/back"
|
||||||
android:onClick="@{backClickListener}"
|
android:onClick="@{backClickListener}"
|
||||||
android:visibility="@{sharedMainViewModel.canSlidingPaneBeClosed ? View.VISIBLE : View.GONE}"
|
android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}"
|
||||||
android:contentDescription="@string/content_description_go_back"
|
android:contentDescription="@string/content_description_go_back"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
@ -86,7 +86,7 @@
|
||||||
|
|
||||||
<org.linphone.contact.BigContactAvatarView
|
<org.linphone.contact.BigContactAvatarView
|
||||||
android:id="@+id/avatar"
|
android:id="@+id/avatar"
|
||||||
android:layout_width="100dp"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="100dp"
|
android:layout_height="100dp"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
tools:layout="@layout/contact_avatar_big"
|
tools:layout="@layout/contact_avatar_big"
|
||||||
|
|
|
@ -75,13 +75,13 @@
|
||||||
android:layout_marginRight="10dp">
|
android:layout_marginRight="10dp">
|
||||||
|
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
android:layout_width="100dp"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="100dp">
|
android:layout_height="100dp">
|
||||||
|
|
||||||
<org.linphone.contact.BigContactAvatarView
|
<org.linphone.contact.BigContactAvatarView
|
||||||
android:id="@+id/avatar"
|
android:id="@+id/avatar"
|
||||||
android:onClick="@{avatarClickListener}"
|
android:onClick="@{avatarClickListener}"
|
||||||
android:layout_width="100dp"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="100dp"
|
android:layout_height="100dp"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
tools:layout="@layout/contact_avatar_big"
|
tools:layout="@layout/contact_avatar_big"
|
||||||
|
@ -90,6 +90,7 @@
|
||||||
<ImageView
|
<ImageView
|
||||||
android:layout_width="100dp"
|
android:layout_width="100dp"
|
||||||
android:layout_height="100dp"
|
android:layout_height="100dp"
|
||||||
|
android:layout_gravity="center"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:contentDescription="@string/content_description_change_contact_picture"
|
android:contentDescription="@string/content_description_change_contact_picture"
|
||||||
glideAvatar="@{viewModel.tempPicturePath}"/>
|
glideAvatar="@{viewModel.tempPicturePath}"/>
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/back"
|
android:id="@+id/back"
|
||||||
android:onClick="@{backClickListener}"
|
android:onClick="@{backClickListener}"
|
||||||
android:visibility="@{sharedMainViewModel.canSlidingPaneBeClosed ? View.VISIBLE : View.GONE}"
|
android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}"
|
||||||
android:contentDescription="@string/content_description_go_back"
|
android:contentDescription="@string/content_description_go_back"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
@ -85,7 +85,7 @@
|
||||||
|
|
||||||
<org.linphone.contact.BigContactAvatarView
|
<org.linphone.contact.BigContactAvatarView
|
||||||
android:id="@+id/avatar"
|
android:id="@+id/avatar"
|
||||||
android:layout_width="100dp"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="100dp"
|
android:layout_height="100dp"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
bind:layout="@layout/contact_avatar_big"
|
bind:layout="@layout/contact_avatar_big"
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/back"
|
android:id="@+id/back"
|
||||||
android:onClick="@{backClickListener}"
|
android:onClick="@{backClickListener}"
|
||||||
android:visibility="@{sharedMainViewModel.canSlidingPaneBeClosed ? View.VISIBLE : View.GONE}"
|
android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}"
|
||||||
android:contentDescription="@string/content_description_go_back"
|
android:contentDescription="@string/content_description_go_back"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
@ -56,7 +56,7 @@
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_weight="0.2"
|
android:layout_weight="0.2"
|
||||||
android:visibility="@{sharedMainViewModel.canSlidingPaneBeClosed ? View.INVISIBLE : View.GONE}" />
|
android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.INVISIBLE : View.GONE}" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/back"
|
android:id="@+id/back"
|
||||||
android:onClick="@{backClickListener}"
|
android:onClick="@{backClickListener}"
|
||||||
android:visibility="@{sharedMainViewModel.canSlidingPaneBeClosed ? View.VISIBLE : View.GONE}"
|
android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}"
|
||||||
android:contentDescription="@string/content_description_go_back"
|
android:contentDescription="@string/content_description_go_back"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
@ -55,7 +55,7 @@
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_weight="0.2"
|
android:layout_weight="0.2"
|
||||||
android:visibility="@{sharedMainViewModel.canSlidingPaneBeClosed ? View.INVISIBLE : View.GONE}" />
|
android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.INVISIBLE : View.GONE}" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/back"
|
android:id="@+id/back"
|
||||||
android:onClick="@{backClickListener}"
|
android:onClick="@{backClickListener}"
|
||||||
android:visibility="@{sharedMainViewModel.canSlidingPaneBeClosed ? View.VISIBLE : View.GONE}"
|
android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}"
|
||||||
android:contentDescription="@string/content_description_go_back"
|
android:contentDescription="@string/content_description_go_back"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
@ -55,7 +55,7 @@
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_weight="0.2"
|
android:layout_weight="0.2"
|
||||||
android:visibility="@{sharedMainViewModel.canSlidingPaneBeClosed ? View.INVISIBLE : View.GONE}" />
|
android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.INVISIBLE : View.GONE}" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/back"
|
android:id="@+id/back"
|
||||||
android:onClick="@{backClickListener}"
|
android:onClick="@{backClickListener}"
|
||||||
android:visibility="@{sharedMainViewModel.canSlidingPaneBeClosed ? View.VISIBLE : View.GONE}"
|
android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}"
|
||||||
android:contentDescription="@string/content_description_go_back"
|
android:contentDescription="@string/content_description_go_back"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
@ -55,7 +55,7 @@
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_weight="0.2"
|
android:layout_weight="0.2"
|
||||||
android:visibility="@{sharedMainViewModel.canSlidingPaneBeClosed ? View.INVISIBLE : View.GONE}" />
|
android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.INVISIBLE : View.GONE}" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/back"
|
android:id="@+id/back"
|
||||||
android:onClick="@{backClickListener}"
|
android:onClick="@{backClickListener}"
|
||||||
android:visibility="@{sharedMainViewModel.canSlidingPaneBeClosed ? View.VISIBLE : View.GONE}"
|
android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}"
|
||||||
android:contentDescription="@string/content_description_go_back"
|
android:contentDescription="@string/content_description_go_back"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
@ -55,7 +55,7 @@
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_weight="0.2"
|
android:layout_weight="0.2"
|
||||||
android:visibility="@{sharedMainViewModel.canSlidingPaneBeClosed ? View.INVISIBLE : View.GONE}" />
|
android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.INVISIBLE : View.GONE}" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/back"
|
android:id="@+id/back"
|
||||||
android:onClick="@{backClickListener}"
|
android:onClick="@{backClickListener}"
|
||||||
android:visibility="@{sharedMainViewModel.canSlidingPaneBeClosed ? View.VISIBLE : View.GONE}"
|
android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}"
|
||||||
android:contentDescription="@string/content_description_go_back"
|
android:contentDescription="@string/content_description_go_back"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
@ -54,7 +54,7 @@
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_weight="0.2"
|
android:layout_weight="0.2"
|
||||||
android:visibility="@{sharedMainViewModel.canSlidingPaneBeClosed ? View.INVISIBLE : View.GONE}" />
|
android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.INVISIBLE : View.GONE}" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/back"
|
android:id="@+id/back"
|
||||||
android:onClick="@{backClickListener}"
|
android:onClick="@{backClickListener}"
|
||||||
android:visibility="@{sharedMainViewModel.canSlidingPaneBeClosed ? View.VISIBLE : View.GONE}"
|
android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}"
|
||||||
android:contentDescription="@string/content_description_go_back"
|
android:contentDescription="@string/content_description_go_back"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
@ -55,7 +55,7 @@
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_weight="0.2"
|
android:layout_weight="0.2"
|
||||||
android:visibility="@{sharedMainViewModel.canSlidingPaneBeClosed ? View.INVISIBLE : View.GONE}" />
|
android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.INVISIBLE : View.GONE}" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/back"
|
android:id="@+id/back"
|
||||||
android:onClick="@{backClickListener}"
|
android:onClick="@{backClickListener}"
|
||||||
android:visibility="@{sharedMainViewModel.canSlidingPaneBeClosed ? View.VISIBLE : View.GONE}"
|
android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}"
|
||||||
android:contentDescription="@string/content_description_go_back"
|
android:contentDescription="@string/content_description_go_back"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
@ -55,7 +55,7 @@
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_weight="0.2"
|
android:layout_weight="0.2"
|
||||||
android:visibility="@{sharedMainViewModel.canSlidingPaneBeClosed ? View.INVISIBLE : View.GONE}" />
|
android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.INVISIBLE : View.GONE}" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/back"
|
android:id="@+id/back"
|
||||||
android:onClick="@{backClickListener}"
|
android:onClick="@{backClickListener}"
|
||||||
android:visibility="@{sharedMainViewModel.canSlidingPaneBeClosed ? View.VISIBLE : View.GONE}"
|
android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}"
|
||||||
android:contentDescription="@string/content_description_go_back"
|
android:contentDescription="@string/content_description_go_back"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
@ -55,7 +55,7 @@
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_weight="0.2"
|
android:layout_weight="0.2"
|
||||||
android:visibility="@{sharedMainViewModel.canSlidingPaneBeClosed ? View.INVISIBLE : View.GONE}" />
|
android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.INVISIBLE : View.GONE}" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue