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