Reworked how back button is handled

This commit is contained in:
Sylvain Berfini 2022-06-28 17:00:46 +02:00
parent 009c6b3333
commit 4f26895cb4
90 changed files with 209 additions and 791 deletions

View file

@ -23,35 +23,65 @@ import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.ImageView
import androidx.activity.OnBackPressedCallback import androidx.activity.OnBackPressedCallback
import androidx.core.view.doOnPreDraw import androidx.core.view.doOnPreDraw
import androidx.databinding.DataBindingUtil import androidx.databinding.DataBindingUtil
import androidx.databinding.ViewDataBinding import androidx.databinding.ViewDataBinding
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import com.google.android.material.transition.MaterialSharedAxis import com.google.android.material.transition.MaterialSharedAxis
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.LinphoneApplication.Companion.corePreferences
import org.linphone.R
import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.core.tools.Log import org.linphone.core.tools.Log
abstract class GenericFragment<T : ViewDataBinding> : Fragment() { abstract class GenericFragment<T : ViewDataBinding> : Fragment() {
companion object {
val emptyFragmentsIds = arrayListOf(
R.id.emptyChatFragment,
R.id.emptyContactFragment,
R.id.emptySettingsFragment,
R.id.emptyCallHistoryFragment
)
}
private var _binding: T? = null private var _binding: T? = null
protected val binding get() = _binding!! protected val binding get() = _binding!!
protected var useMaterialSharedAxisXForwardAnimation = true protected var useMaterialSharedAxisXForwardAnimation = true
protected lateinit var sharedViewModel: SharedMainViewModel
protected fun isSharedViewModelInitialized(): Boolean {
return ::sharedViewModel.isInitialized
}
protected fun isBindingAvailable(): Boolean { protected fun isBindingAvailable(): Boolean {
return _binding != null return _binding != null
} }
protected val onBackPressedCallback = object : OnBackPressedCallback(true) { private fun getFragmentRealClassName(): String {
return this.javaClass.name
}
private val onBackPressedCallback = object : OnBackPressedCallback(false) {
override fun handleOnBackPressed() { override fun handleOnBackPressed() {
lifecycleScope.launch { try {
withContext(Dispatchers.Main) { val navController = findNavController()
goBack() Log.d("[Generic Fragment] ${getFragmentRealClassName()} handleOnBackPressed")
if (!navController.popBackStack()) {
Log.d("[Generic Fragment] ${getFragmentRealClassName()} couldn't pop")
if (!navController.navigateUp()) {
Log.d("[Generic Fragment] ${getFragmentRealClassName()} couldn't navigate up")
// Disable this callback & start a new back press event
isEnabled = false
goBack()
}
} }
} catch (ise: IllegalStateException) {
Log.e("[Generic Fragment] ${getFragmentRealClassName()} Can't go back: $ise")
} }
} }
} }
@ -63,20 +93,19 @@ abstract class GenericFragment<T : ViewDataBinding> : Fragment() {
container: ViewGroup?, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View? { ): View? {
sharedViewModel = requireActivity().run {
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
sharedViewModel.isSlidingPaneSlideable.observe(viewLifecycleOwner) {
Log.d("[Generic Fragment] ${getFragmentRealClassName()} shared main VM sliding pane has changed")
onBackPressedCallback.isEnabled = backPressedCallBackEnabled()
}
_binding = DataBindingUtil.inflate(inflater, getLayoutId(), container, false) _binding = DataBindingUtil.inflate(inflater, getLayoutId(), container, false)
return _binding!!.root return _binding!!.root
} }
override fun onResume() {
super.onResume()
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, onBackPressedCallback)
}
override fun onPause() {
onBackPressedCallback.remove()
super.onPause()
}
override fun onStart() { override fun onStart() {
super.onStart() super.onStart()
@ -89,25 +118,50 @@ abstract class GenericFragment<T : ViewDataBinding> : Fragment() {
postponeEnterTransition() postponeEnterTransition()
binding.root.doOnPreDraw { startPostponedEnterTransition() } binding.root.doOnPreDraw { startPostponedEnterTransition() }
} }
setupBackPressCallback()
} }
override fun onDestroyView() { override fun onDestroyView() {
super.onDestroyView() super.onDestroyView()
onBackPressedCallback.remove()
_binding = null _binding = null
} }
protected open fun goBack() { protected fun goBack() {
try { requireActivity().onBackPressedDispatcher.onBackPressed()
if (!findNavController().popBackStack()) { }
if (!findNavController().navigateUp()) {
onBackPressedCallback.isEnabled = false private fun setupBackPressCallback() {
requireActivity().onBackPressed() Log.d("[Generic Fragment] ${getFragmentRealClassName()} setupBackPressCallback")
}
} val backButton = binding.root.findViewById<ImageView>(R.id.back)
} catch (ise: IllegalStateException) { if (backButton != null) {
Log.e("[Generic Fragment] [$this] Can't go back: $ise") Log.d("[Generic Fragment] ${getFragmentRealClassName()} found back button")
// If popping navigation back stack entry would bring us to an "empty" fragment
// then don't do it if sliding pane layout isn't "flat"
onBackPressedCallback.isEnabled = backPressedCallBackEnabled()
backButton.setOnClickListener { goBack() }
} else {
onBackPressedCallback.isEnabled = false onBackPressedCallback.isEnabled = false
requireActivity().onBackPressed()
} }
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, onBackPressedCallback)
}
private fun backPressedCallBackEnabled(): Boolean {
// This allow to navigate a SlidingPane child nav graph.
// This only concerns fragments for which the nav graph is inside a SlidingPane layout.
// In our case it's all graphs except the main one.
if (findNavController().graph.id == R.id.main_nav_graph_xml) return false
val isSlidingPaneFlat = sharedViewModel.isSlidingPaneSlideable.value == false
Log.d("[Generic Fragment] ${getFragmentRealClassName()} isSlidingPaneFlat ? $isSlidingPaneFlat")
val isPreviousFragmentEmpty = findNavController().previousBackStackEntry?.destination?.id in emptyFragmentsIds
Log.d("[Generic Fragment] ${getFragmentRealClassName()} isPreviousFragmentEmpty ? $isPreviousFragmentEmpty")
val popBackStack = isSlidingPaneFlat || !isPreviousFragmentEmpty
Log.d("[Generic Fragment] ${getFragmentRealClassName()} popBackStack ? $popBackStack")
return popBackStack
} }
} }

View file

@ -43,7 +43,6 @@ import org.linphone.activities.main.contact.fragments.MasterContactsFragment
import org.linphone.activities.main.dialer.fragments.DialerFragment import org.linphone.activities.main.dialer.fragments.DialerFragment
import org.linphone.activities.main.fragments.TabsFragment import org.linphone.activities.main.fragments.TabsFragment
import org.linphone.activities.main.history.fragments.DetailCallLogFragment import org.linphone.activities.main.history.fragments.DetailCallLogFragment
import org.linphone.activities.main.history.fragments.DetailConferenceCallLogFragment
import org.linphone.activities.main.history.fragments.MasterCallLogsFragment import org.linphone.activities.main.history.fragments.MasterCallLogsFragment
import org.linphone.activities.main.settings.fragments.* import org.linphone.activities.main.settings.fragments.*
import org.linphone.activities.main.sidemenu.fragments.SideMenuFragment import org.linphone.activities.main.sidemenu.fragments.SideMenuFragment
@ -265,16 +264,10 @@ internal fun ScheduledConferencesFragment.navigateToConferenceScheduling() {
internal fun MasterChatRoomsFragment.navigateToChatRoom(args: Bundle) { internal fun MasterChatRoomsFragment.navigateToChatRoom(args: Bundle) {
val navHostFragment = val navHostFragment =
childFragmentManager.findFragmentById(R.id.chat_nav_container) as NavHostFragment childFragmentManager.findFragmentById(R.id.chat_nav_container) as NavHostFragment
val previousBackStackEntry = navHostFragment.navController.currentBackStackEntry
val popUpToFragmentId = when (previousBackStackEntry?.destination?.id) {
R.id.detailChatRoomFragment -> R.id.detailChatRoomFragment
R.id.chatRoomCreationFragment -> R.id.chatRoomCreationFragment
else -> R.id.emptyChatFragment
}
navHostFragment.navController.navigate( navHostFragment.navController.navigate(
R.id.action_global_detailChatRoomFragment, R.id.action_global_detailChatRoomFragment,
args, args,
popupTo(popUpToFragmentId, true) popupTo(R.id.emptyChatFragment, false)
) )
} }
@ -285,16 +278,10 @@ internal fun MasterChatRoomsFragment.navigateToChatRoomCreation(
val bundle = bundleOf("createGroup" to createGroupChatRoom) val bundle = bundleOf("createGroup" to createGroupChatRoom)
val navHostFragment = val navHostFragment =
childFragmentManager.findFragmentById(R.id.chat_nav_container) as NavHostFragment childFragmentManager.findFragmentById(R.id.chat_nav_container) as NavHostFragment
val previousBackStackEntry = navHostFragment.navController.currentBackStackEntry
val popUpToFragmentId = when (previousBackStackEntry?.destination?.id) {
R.id.detailChatRoomFragment -> R.id.detailChatRoomFragment
R.id.chatRoomCreationFragment -> R.id.chatRoomCreationFragment
else -> R.id.emptyChatFragment
}
navHostFragment.navController.navigate( navHostFragment.navController.navigate(
R.id.action_global_chatRoomCreationFragment, R.id.action_global_chatRoomCreationFragment,
bundle, bundle,
popupTo(popUpToFragmentId, true) popupTo(R.id.emptyChatFragment, false)
) )
if (!slidingPane.isOpen) slidingPane.openPane() if (!slidingPane.isOpen) slidingPane.openPane()
} }
@ -437,19 +424,11 @@ internal fun ChatRoomCreationFragment.navigateToChatRoom(args: Bundle) {
findNavController().navigate( findNavController().navigate(
R.id.action_chatRoomCreationFragment_to_detailChatRoomFragment, R.id.action_chatRoomCreationFragment_to_detailChatRoomFragment,
args, args,
popupTo(R.id.chatRoomCreationFragment, true) popupTo(R.id.emptyChatFragment, false)
) )
} }
} }
internal fun ChatRoomCreationFragment.navigateToEmptyChatRoom() {
findNavController().navigate(
R.id.action_global_emptyChatFragment,
null,
popupTo(R.id.chatRoomCreationFragment, true)
)
}
internal fun GroupInfoFragment.navigateToChatRoomCreation(args: Bundle?) { internal fun GroupInfoFragment.navigateToChatRoomCreation(args: Bundle?) {
if (findNavController().currentDestination?.id == R.id.groupInfoFragment) { if (findNavController().currentDestination?.id == R.id.groupInfoFragment) {
findNavController().navigate( findNavController().navigate(
@ -481,16 +460,10 @@ internal fun MasterContactsFragment.navigateToContact() {
if (findNavController().currentDestination?.id == R.id.masterContactsFragment) { if (findNavController().currentDestination?.id == R.id.masterContactsFragment) {
val navHostFragment = val navHostFragment =
childFragmentManager.findFragmentById(R.id.contacts_nav_container) as NavHostFragment childFragmentManager.findFragmentById(R.id.contacts_nav_container) as NavHostFragment
val previousBackStackEntry = navHostFragment.navController.currentBackStackEntry
val popUpToFragmentId = when (previousBackStackEntry?.destination?.id) {
R.id.detailContactFragment -> R.id.detailContactFragment
R.id.contactEditorFragment -> R.id.contactEditorFragment
else -> R.id.emptyContactFragment
}
navHostFragment.navController.navigate( navHostFragment.navController.navigate(
R.id.action_global_detailContactFragment, R.id.action_global_detailContactFragment,
null, null,
popupTo(popUpToFragmentId, true) popupTo(R.id.emptyContactFragment, false)
) )
} }
} }
@ -506,7 +479,7 @@ internal fun MasterContactsFragment.navigateToContactEditor(
navHostFragment.navController.navigate( navHostFragment.navController.navigate(
R.id.action_global_contactEditorFragment, R.id.action_global_contactEditorFragment,
bundle, bundle,
popupTo(R.id.emptyContactFragment, true) popupTo(R.id.emptyContactFragment, false)
) )
if (!slidingPane.isOpen) slidingPane.openPane() if (!slidingPane.isOpen) slidingPane.openPane()
} }
@ -534,14 +507,6 @@ internal fun ContactEditorFragment.navigateToContact(id: String) {
) )
} }
internal fun ContactEditorFragment.navigateToEmptyContact() {
findNavController().navigate(
R.id.action_global_emptyContactFragment,
null,
popupTo(R.id.emptyContactFragment, true)
)
}
internal fun DetailContactFragment.navigateToChatRoom(args: Bundle?) { internal fun DetailContactFragment.navigateToChatRoom(args: Bundle?) {
findMasterNavController().navigate( findMasterNavController().navigate(
R.id.action_global_masterChatRoomsFragment, R.id.action_global_masterChatRoomsFragment,
@ -568,14 +533,6 @@ internal fun DetailContactFragment.navigateToContactEditor() {
} }
} }
internal fun DetailContactFragment.navigateToEmptyContact() {
findNavController().navigate(
R.id.action_global_emptyContactFragment,
null,
popupTo(R.id.emptyContactFragment, true)
)
}
/* History related */ /* History related */
internal fun MasterCallLogsFragment.navigateToCallHistory(slidingPane: SlidingPaneLayout) { internal fun MasterCallLogsFragment.navigateToCallHistory(slidingPane: SlidingPaneLayout) {
@ -585,7 +542,7 @@ internal fun MasterCallLogsFragment.navigateToCallHistory(slidingPane: SlidingPa
navHostFragment.navController.navigate( navHostFragment.navController.navigate(
R.id.action_global_detailCallLogFragment, R.id.action_global_detailCallLogFragment,
null, null,
popupTo(R.id.detailCallLogFragment, true) popupTo(R.id.emptyCallHistoryFragment, false)
) )
if (!slidingPane.isOpen) slidingPane.openPane() if (!slidingPane.isOpen) slidingPane.openPane()
} }
@ -598,7 +555,7 @@ internal fun MasterCallLogsFragment.navigateToConferenceCallHistory(slidingPane:
navHostFragment.navController.navigate( navHostFragment.navController.navigate(
R.id.action_global_detailConferenceCallLogFragment, R.id.action_global_detailConferenceCallLogFragment,
null, null,
popupTo(R.id.detailConferenceCallLogFragment, true) popupTo(R.id.emptyCallHistoryFragment, false)
) )
if (!slidingPane.isOpen) slidingPane.openPane() if (!slidingPane.isOpen) slidingPane.openPane()
} }
@ -668,26 +625,6 @@ internal fun DetailCallLogFragment.navigateToDialer(args: Bundle?) {
} }
} }
internal fun DetailCallLogFragment.navigateToEmptyCallHistory() {
if (findNavController().currentDestination?.id == R.id.detailCallLogFragment) {
findNavController().navigate(
R.id.action_global_emptyFragment,
null,
popupTo(R.id.emptyCallHistoryFragment, true)
)
}
}
internal fun DetailConferenceCallLogFragment.navigateToEmptyCallHistory() {
if (findNavController().currentDestination?.id == R.id.detailConferenceCallLogFragment) {
findNavController().navigate(
R.id.action_global_emptyFragment,
null,
popupTo(R.id.emptyCallHistoryFragment, true)
)
}
}
/* Settings related */ /* Settings related */
internal fun SettingsFragment.navigateToAccountSettings(identity: String) { internal fun SettingsFragment.navigateToAccountSettings(identity: String) {
@ -698,7 +635,7 @@ internal fun SettingsFragment.navigateToAccountSettings(identity: String) {
navHostFragment.navController.navigate( navHostFragment.navController.navigate(
R.id.action_global_accountSettingsFragment, R.id.action_global_accountSettingsFragment,
bundle, bundle,
popupTo(R.id.accountSettingsFragment, true) popupTo(R.id.emptySettingsFragment, false)
) )
} }
} }
@ -710,7 +647,7 @@ internal fun SettingsFragment.navigateToTunnelSettings(slidingPane: SlidingPaneL
navHostFragment.navController.navigate( navHostFragment.navController.navigate(
R.id.action_global_tunnelSettingsFragment, R.id.action_global_tunnelSettingsFragment,
null, null,
popupTo(R.id.tunnelSettingsFragment, true) popupTo(R.id.emptySettingsFragment, false)
) )
if (!slidingPane.isOpen) slidingPane.openPane() if (!slidingPane.isOpen) slidingPane.openPane()
} }
@ -723,7 +660,7 @@ internal fun SettingsFragment.navigateToAudioSettings(slidingPane: SlidingPaneLa
navHostFragment.navController.navigate( navHostFragment.navController.navigate(
R.id.action_global_audioSettingsFragment, R.id.action_global_audioSettingsFragment,
null, null,
popupTo(R.id.audioSettingsFragment, true) popupTo(R.id.emptySettingsFragment, false)
) )
if (!slidingPane.isOpen) slidingPane.openPane() if (!slidingPane.isOpen) slidingPane.openPane()
} }
@ -736,7 +673,7 @@ internal fun SettingsFragment.navigateToVideoSettings(slidingPane: SlidingPaneLa
navHostFragment.navController.navigate( navHostFragment.navController.navigate(
R.id.action_global_videoSettingsFragment, R.id.action_global_videoSettingsFragment,
null, null,
popupTo(R.id.videoSettingsFragment, true) popupTo(R.id.emptySettingsFragment, false)
) )
if (!slidingPane.isOpen) slidingPane.openPane() if (!slidingPane.isOpen) slidingPane.openPane()
} }
@ -749,7 +686,7 @@ internal fun SettingsFragment.navigateToCallSettings(slidingPane: SlidingPaneLay
navHostFragment.navController.navigate( navHostFragment.navController.navigate(
R.id.action_global_callSettingsFragment, R.id.action_global_callSettingsFragment,
null, null,
popupTo(R.id.callSettingsFragment, true) popupTo(R.id.emptySettingsFragment, false)
) )
if (!slidingPane.isOpen) slidingPane.openPane() if (!slidingPane.isOpen) slidingPane.openPane()
} }
@ -762,7 +699,7 @@ internal fun SettingsFragment.navigateToChatSettings(slidingPane: SlidingPaneLay
navHostFragment.navController.navigate( navHostFragment.navController.navigate(
R.id.action_global_chatSettingsFragment, R.id.action_global_chatSettingsFragment,
null, null,
popupTo(R.id.chatSettingsFragment, true) popupTo(R.id.emptySettingsFragment, false)
) )
if (!slidingPane.isOpen) slidingPane.openPane() if (!slidingPane.isOpen) slidingPane.openPane()
} }
@ -775,7 +712,7 @@ internal fun SettingsFragment.navigateToNetworkSettings(slidingPane: SlidingPane
navHostFragment.navController.navigate( navHostFragment.navController.navigate(
R.id.action_global_networkSettingsFragment, R.id.action_global_networkSettingsFragment,
null, null,
popupTo(R.id.networkSettingsFragment, true) popupTo(R.id.emptySettingsFragment, false)
) )
if (!slidingPane.isOpen) slidingPane.openPane() if (!slidingPane.isOpen) slidingPane.openPane()
} }
@ -788,7 +725,7 @@ internal fun SettingsFragment.navigateToContactsSettings(slidingPane: SlidingPan
navHostFragment.navController.navigate( navHostFragment.navController.navigate(
R.id.action_global_contactsSettingsFragment, R.id.action_global_contactsSettingsFragment,
null, null,
popupTo(R.id.contactsSettingsFragment, true) popupTo(R.id.emptySettingsFragment, false)
) )
if (!slidingPane.isOpen) slidingPane.openPane() if (!slidingPane.isOpen) slidingPane.openPane()
} }
@ -801,7 +738,7 @@ internal fun SettingsFragment.navigateToAdvancedSettings(slidingPane: SlidingPan
navHostFragment.navController.navigate( navHostFragment.navController.navigate(
R.id.action_global_advancedSettingsFragment, R.id.action_global_advancedSettingsFragment,
null, null,
popupTo(R.id.advancedSettingsFragment, true) popupTo(R.id.emptySettingsFragment, false)
) )
if (!slidingPane.isOpen) slidingPane.openPane() if (!slidingPane.isOpen) slidingPane.openPane()
} }
@ -814,7 +751,7 @@ internal fun SettingsFragment.navigateToConferencesSettings(slidingPane: Sliding
navHostFragment.navController.navigate( navHostFragment.navController.navigate(
R.id.action_global_conferencesSettingsFragment, R.id.action_global_conferencesSettingsFragment,
null, null,
popupTo(R.id.conferencesSettingsFragment, true) popupTo(R.id.emptySettingsFragment, false)
) )
if (!slidingPane.isOpen) slidingPane.openPane() if (!slidingPane.isOpen) slidingPane.openPane()
} }
@ -859,46 +796,6 @@ internal fun ContactsSettingsFragment.navigateToLdapSettings(configIndex: Int) {
} }
} }
internal fun AccountSettingsFragment.navigateToEmptySetting() {
navigateToEmptySetting(findNavController())
}
internal fun AdvancedSettingsFragment.navigateToEmptySetting() {
navigateToEmptySetting(findNavController())
}
internal fun AudioSettingsFragment.navigateToEmptySetting() {
navigateToEmptySetting(findNavController())
}
internal fun CallSettingsFragment.navigateToEmptySetting() {
navigateToEmptySetting(findNavController())
}
internal fun ChatSettingsFragment.navigateToEmptySetting() {
navigateToEmptySetting(findNavController())
}
internal fun ConferencesSettingsFragment.navigateToEmptySetting() {
navigateToEmptySetting(findNavController())
}
internal fun ContactsSettingsFragment.navigateToEmptySetting() {
navigateToEmptySetting(findNavController())
}
internal fun NetworkSettingsFragment.navigateToEmptySetting() {
navigateToEmptySetting(findNavController())
}
internal fun TunnelSettingsFragment.navigateToEmptySetting() {
navigateToEmptySetting(findNavController())
}
internal fun VideoSettingsFragment.navigateToEmptySetting() {
navigateToEmptySetting(findNavController())
}
/* Side menu related */ /* Side menu related */
internal fun SideMenuFragment.navigateToAccountSettings(identity: String) { internal fun SideMenuFragment.navigateToAccountSettings(identity: String) {

View file

@ -39,7 +39,7 @@ import org.linphone.utils.DialogUtils
class AccountLoginFragment : AbstractPhoneFragment<AssistantAccountLoginFragmentBinding>() { class AccountLoginFragment : AbstractPhoneFragment<AssistantAccountLoginFragmentBinding>() {
override lateinit var viewModel: AccountLoginViewModel override lateinit var viewModel: AccountLoginViewModel
private lateinit var sharedViewModel: SharedAssistantViewModel private lateinit var sharedAssistantViewModel: SharedAssistantViewModel
override fun getLayoutId(): Int = R.layout.assistant_account_login_fragment override fun getLayoutId(): Int = R.layout.assistant_account_login_fragment
@ -48,13 +48,13 @@ class AccountLoginFragment : AbstractPhoneFragment<AssistantAccountLoginFragment
binding.lifecycleOwner = viewLifecycleOwner binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run { sharedAssistantViewModel = requireActivity().run {
ViewModelProvider(this)[SharedAssistantViewModel::class.java] ViewModelProvider(this)[SharedAssistantViewModel::class.java]
} }
viewModel = ViewModelProvider( viewModel = ViewModelProvider(
this, this,
AccountLoginViewModelFactory(sharedViewModel.getAccountCreator()) AccountLoginViewModelFactory(sharedAssistantViewModel.getAccountCreator())
)[AccountLoginViewModel::class.java] )[AccountLoginViewModel::class.java]
binding.viewModel = viewModel binding.viewModel = viewModel

View file

@ -32,7 +32,7 @@ import org.linphone.activities.navigateToEmailAccountValidation
import org.linphone.databinding.AssistantEmailAccountCreationFragmentBinding import org.linphone.databinding.AssistantEmailAccountCreationFragmentBinding
class EmailAccountCreationFragment : GenericFragment<AssistantEmailAccountCreationFragmentBinding>() { class EmailAccountCreationFragment : GenericFragment<AssistantEmailAccountCreationFragmentBinding>() {
private lateinit var sharedViewModel: SharedAssistantViewModel private lateinit var sharedAssistantViewModel: SharedAssistantViewModel
private lateinit var viewModel: EmailAccountCreationViewModel private lateinit var viewModel: EmailAccountCreationViewModel
override fun getLayoutId(): Int = R.layout.assistant_email_account_creation_fragment override fun getLayoutId(): Int = R.layout.assistant_email_account_creation_fragment
@ -42,11 +42,11 @@ class EmailAccountCreationFragment : GenericFragment<AssistantEmailAccountCreati
binding.lifecycleOwner = viewLifecycleOwner binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run { sharedAssistantViewModel = requireActivity().run {
ViewModelProvider(this)[SharedAssistantViewModel::class.java] ViewModelProvider(this)[SharedAssistantViewModel::class.java]
} }
viewModel = ViewModelProvider(this, EmailAccountCreationViewModelFactory(sharedViewModel.getAccountCreator()))[EmailAccountCreationViewModel::class.java] viewModel = ViewModelProvider(this, EmailAccountCreationViewModelFactory(sharedAssistantViewModel.getAccountCreator()))[EmailAccountCreationViewModel::class.java]
binding.viewModel = viewModel binding.viewModel = viewModel
viewModel.goToEmailValidationEvent.observe( viewModel.goToEmailValidationEvent.observe(

View file

@ -31,7 +31,7 @@ import org.linphone.activities.navigateToAccountLinking
import org.linphone.databinding.AssistantEmailAccountValidationFragmentBinding import org.linphone.databinding.AssistantEmailAccountValidationFragmentBinding
class EmailAccountValidationFragment : GenericFragment<AssistantEmailAccountValidationFragmentBinding>() { class EmailAccountValidationFragment : GenericFragment<AssistantEmailAccountValidationFragmentBinding>() {
private lateinit var sharedViewModel: SharedAssistantViewModel private lateinit var sharedAssistantViewModel: SharedAssistantViewModel
private lateinit var viewModel: EmailAccountValidationViewModel private lateinit var viewModel: EmailAccountValidationViewModel
override fun getLayoutId(): Int = R.layout.assistant_email_account_validation_fragment override fun getLayoutId(): Int = R.layout.assistant_email_account_validation_fragment
@ -41,11 +41,11 @@ class EmailAccountValidationFragment : GenericFragment<AssistantEmailAccountVali
binding.lifecycleOwner = viewLifecycleOwner binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run { sharedAssistantViewModel = requireActivity().run {
ViewModelProvider(this)[SharedAssistantViewModel::class.java] ViewModelProvider(this)[SharedAssistantViewModel::class.java]
} }
viewModel = ViewModelProvider(this, EmailAccountValidationViewModelFactory(sharedViewModel.getAccountCreator()))[EmailAccountValidationViewModel::class.java] viewModel = ViewModelProvider(this, EmailAccountValidationViewModelFactory(sharedAssistantViewModel.getAccountCreator()))[EmailAccountValidationViewModel::class.java]
binding.viewModel = viewModel binding.viewModel = viewModel
viewModel.leaveAssistantEvent.observe( viewModel.leaveAssistantEvent.observe(

View file

@ -37,7 +37,7 @@ import org.linphone.databinding.AssistantGenericAccountLoginFragmentBinding
import org.linphone.utils.DialogUtils import org.linphone.utils.DialogUtils
class GenericAccountLoginFragment : GenericFragment<AssistantGenericAccountLoginFragmentBinding>() { class GenericAccountLoginFragment : GenericFragment<AssistantGenericAccountLoginFragmentBinding>() {
private lateinit var sharedViewModel: SharedAssistantViewModel private lateinit var sharedAssistantViewModel: SharedAssistantViewModel
private lateinit var viewModel: GenericLoginViewModel private lateinit var viewModel: GenericLoginViewModel
override fun getLayoutId(): Int = R.layout.assistant_generic_account_login_fragment override fun getLayoutId(): Int = R.layout.assistant_generic_account_login_fragment
@ -47,11 +47,11 @@ class GenericAccountLoginFragment : GenericFragment<AssistantGenericAccountLogin
binding.lifecycleOwner = viewLifecycleOwner binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run { sharedAssistantViewModel = requireActivity().run {
ViewModelProvider(this)[SharedAssistantViewModel::class.java] ViewModelProvider(this)[SharedAssistantViewModel::class.java]
} }
viewModel = ViewModelProvider(this, GenericLoginViewModelFactory(sharedViewModel.getAccountCreator(true)))[GenericLoginViewModel::class.java] viewModel = ViewModelProvider(this, GenericLoginViewModelFactory(sharedAssistantViewModel.getAccountCreator(true)))[GenericLoginViewModel::class.java]
binding.viewModel = viewModel binding.viewModel = viewModel
viewModel.leaveAssistantEvent.observe( viewModel.leaveAssistantEvent.observe(

View file

@ -32,7 +32,7 @@ import org.linphone.databinding.AssistantPhoneAccountCreationFragmentBinding
class PhoneAccountCreationFragment : class PhoneAccountCreationFragment :
AbstractPhoneFragment<AssistantPhoneAccountCreationFragmentBinding>() { AbstractPhoneFragment<AssistantPhoneAccountCreationFragmentBinding>() {
private lateinit var sharedViewModel: SharedAssistantViewModel private lateinit var sharedAssistantViewModel: SharedAssistantViewModel
override lateinit var viewModel: PhoneAccountCreationViewModel override lateinit var viewModel: PhoneAccountCreationViewModel
override fun getLayoutId(): Int = R.layout.assistant_phone_account_creation_fragment override fun getLayoutId(): Int = R.layout.assistant_phone_account_creation_fragment
@ -42,13 +42,13 @@ class PhoneAccountCreationFragment :
binding.lifecycleOwner = viewLifecycleOwner binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run { sharedAssistantViewModel = requireActivity().run {
ViewModelProvider(this)[SharedAssistantViewModel::class.java] ViewModelProvider(this)[SharedAssistantViewModel::class.java]
} }
viewModel = ViewModelProvider( viewModel = ViewModelProvider(
this, this,
PhoneAccountCreationViewModelFactory(sharedViewModel.getAccountCreator()) PhoneAccountCreationViewModelFactory(sharedAssistantViewModel.getAccountCreator())
)[PhoneAccountCreationViewModel::class.java] )[PhoneAccountCreationViewModel::class.java]
binding.viewModel = viewModel binding.viewModel = viewModel

View file

@ -32,7 +32,7 @@ import org.linphone.core.tools.Log
import org.linphone.databinding.AssistantPhoneAccountLinkingFragmentBinding import org.linphone.databinding.AssistantPhoneAccountLinkingFragmentBinding
class PhoneAccountLinkingFragment : AbstractPhoneFragment<AssistantPhoneAccountLinkingFragmentBinding>() { class PhoneAccountLinkingFragment : AbstractPhoneFragment<AssistantPhoneAccountLinkingFragmentBinding>() {
private lateinit var sharedViewModel: SharedAssistantViewModel private lateinit var sharedAssistantViewModel: SharedAssistantViewModel
override lateinit var viewModel: PhoneAccountLinkingViewModel override lateinit var viewModel: PhoneAccountLinkingViewModel
override fun getLayoutId(): Int = R.layout.assistant_phone_account_linking_fragment override fun getLayoutId(): Int = R.layout.assistant_phone_account_linking_fragment
@ -42,11 +42,11 @@ class PhoneAccountLinkingFragment : AbstractPhoneFragment<AssistantPhoneAccountL
binding.lifecycleOwner = viewLifecycleOwner binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run { sharedAssistantViewModel = requireActivity().run {
ViewModelProvider(this)[SharedAssistantViewModel::class.java] ViewModelProvider(this)[SharedAssistantViewModel::class.java]
} }
val accountCreator = sharedViewModel.getAccountCreator() val accountCreator = sharedAssistantViewModel.getAccountCreator()
viewModel = ViewModelProvider(this, PhoneAccountLinkingViewModelFactory(accountCreator))[PhoneAccountLinkingViewModel::class.java] viewModel = ViewModelProvider(this, PhoneAccountLinkingViewModelFactory(accountCreator))[PhoneAccountLinkingViewModel::class.java]
binding.viewModel = viewModel binding.viewModel = viewModel

View file

@ -37,7 +37,7 @@ import org.linphone.activities.navigateToEchoCancellerCalibration
import org.linphone.databinding.AssistantPhoneAccountValidationFragmentBinding import org.linphone.databinding.AssistantPhoneAccountValidationFragmentBinding
class PhoneAccountValidationFragment : GenericFragment<AssistantPhoneAccountValidationFragmentBinding>() { class PhoneAccountValidationFragment : GenericFragment<AssistantPhoneAccountValidationFragmentBinding>() {
private lateinit var sharedViewModel: SharedAssistantViewModel private lateinit var sharedAssistantViewModel: SharedAssistantViewModel
private lateinit var viewModel: PhoneAccountValidationViewModel private lateinit var viewModel: PhoneAccountValidationViewModel
override fun getLayoutId(): Int = R.layout.assistant_phone_account_validation_fragment override fun getLayoutId(): Int = R.layout.assistant_phone_account_validation_fragment
@ -47,11 +47,11 @@ class PhoneAccountValidationFragment : GenericFragment<AssistantPhoneAccountVali
binding.lifecycleOwner = viewLifecycleOwner binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run { sharedAssistantViewModel = requireActivity().run {
ViewModelProvider(this)[SharedAssistantViewModel::class.java] ViewModelProvider(this)[SharedAssistantViewModel::class.java]
} }
viewModel = ViewModelProvider(this, PhoneAccountValidationViewModelFactory(sharedViewModel.getAccountCreator()))[PhoneAccountValidationViewModel::class.java] viewModel = ViewModelProvider(this, PhoneAccountValidationViewModelFactory(sharedAssistantViewModel.getAccountCreator()))[PhoneAccountValidationViewModel::class.java]
binding.viewModel = viewModel binding.viewModel = viewModel
viewModel.phoneNumber.value = arguments?.getString("PhoneNumber") viewModel.phoneNumber.value = arguments?.getString("PhoneNumber")

View file

@ -38,7 +38,7 @@ class QrCodeFragment : GenericFragment<AssistantQrCodeFragmentBinding>() {
const val CAMERA_PERMISSION_REQUEST_CODE = 0 const val CAMERA_PERMISSION_REQUEST_CODE = 0
} }
private lateinit var sharedViewModel: SharedAssistantViewModel private lateinit var sharedAssistantViewModel: SharedAssistantViewModel
private lateinit var viewModel: QrCodeViewModel private lateinit var viewModel: QrCodeViewModel
override fun getLayoutId(): Int = R.layout.assistant_qr_code_fragment override fun getLayoutId(): Int = R.layout.assistant_qr_code_fragment
@ -48,7 +48,7 @@ class QrCodeFragment : GenericFragment<AssistantQrCodeFragmentBinding>() {
binding.lifecycleOwner = viewLifecycleOwner binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run { sharedAssistantViewModel = requireActivity().run {
ViewModelProvider(this)[SharedAssistantViewModel::class.java] ViewModelProvider(this)[SharedAssistantViewModel::class.java]
} }
@ -59,7 +59,7 @@ class QrCodeFragment : GenericFragment<AssistantQrCodeFragmentBinding>() {
viewLifecycleOwner viewLifecycleOwner
) { ) {
it.consume { url -> it.consume { url ->
sharedViewModel.remoteProvisioningUrl.value = url sharedAssistantViewModel.remoteProvisioningUrl.value = url
findNavController().navigateUp() findNavController().navigateUp()
} }
} }

View file

@ -33,7 +33,7 @@ import org.linphone.activities.navigateToQrCode
import org.linphone.databinding.AssistantRemoteProvisioningFragmentBinding import org.linphone.databinding.AssistantRemoteProvisioningFragmentBinding
class RemoteProvisioningFragment : GenericFragment<AssistantRemoteProvisioningFragmentBinding>() { class RemoteProvisioningFragment : GenericFragment<AssistantRemoteProvisioningFragmentBinding>() {
private lateinit var sharedViewModel: SharedAssistantViewModel private lateinit var sharedAssistantViewModel: SharedAssistantViewModel
private lateinit var viewModel: RemoteProvisioningViewModel private lateinit var viewModel: RemoteProvisioningViewModel
override fun getLayoutId(): Int = R.layout.assistant_remote_provisioning_fragment override fun getLayoutId(): Int = R.layout.assistant_remote_provisioning_fragment
@ -43,7 +43,7 @@ class RemoteProvisioningFragment : GenericFragment<AssistantRemoteProvisioningFr
binding.lifecycleOwner = viewLifecycleOwner binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run { sharedAssistantViewModel = requireActivity().run {
ViewModelProvider(this)[SharedAssistantViewModel::class.java] ViewModelProvider(this)[SharedAssistantViewModel::class.java]
} }
@ -71,13 +71,14 @@ class RemoteProvisioningFragment : GenericFragment<AssistantRemoteProvisioningFr
} }
} }
viewModel.urlToFetch.value = sharedViewModel.remoteProvisioningUrl.value ?: coreContext.core.provisioningUri viewModel.urlToFetch.value = sharedAssistantViewModel.remoteProvisioningUrl.value ?: coreContext.core.provisioningUri
} }
override fun onDestroy() { override fun onDestroy() {
super.onDestroy() super.onDestroy()
if (this::sharedViewModel.isInitialized) {
sharedViewModel.remoteProvisioningUrl.value = null if (::sharedAssistantViewModel.isInitialized) {
sharedAssistantViewModel.remoteProvisioningUrl.value = null
} }
} }
} }

View file

@ -21,7 +21,6 @@ package org.linphone.activities.assistant.fragments
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.navigation.fragment.findNavController
import org.linphone.R import org.linphone.R
import org.linphone.activities.GenericFragment import org.linphone.activities.GenericFragment
import org.linphone.databinding.AssistantTopBarFragmentBinding import org.linphone.databinding.AssistantTopBarFragmentBinding
@ -34,15 +33,5 @@ class TopBarFragment : GenericFragment<AssistantTopBarFragmentBinding>() {
binding.lifecycleOwner = viewLifecycleOwner binding.lifecycleOwner = viewLifecycleOwner
useMaterialSharedAxisXForwardAnimation = false useMaterialSharedAxisXForwardAnimation = false
binding.setBackClickListener {
goBack()
}
}
override fun goBack() {
if (!findNavController().popBackStack()) {
requireActivity().finish()
}
} }
} }

View file

@ -42,8 +42,6 @@ class AboutFragment : SecureFragment<AboutFragmentBinding>() {
viewModel = ViewModelProvider(this)[AboutViewModel::class.java] viewModel = ViewModelProvider(this)[AboutViewModel::class.java]
binding.viewModel = viewModel binding.viewModel = viewModel
binding.setBackClickListener { goBack() }
binding.setPrivacyPolicyClickListener { binding.setPrivacyPolicyClickListener {
val browserIntent = Intent( val browserIntent = Intent(
Intent.ACTION_VIEW, Intent.ACTION_VIEW,

View file

@ -23,27 +23,22 @@ import android.content.pm.PackageManager
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.R import org.linphone.R
import org.linphone.activities.main.MainActivity import org.linphone.activities.main.MainActivity
import org.linphone.activities.main.chat.viewmodels.ChatRoomCreationViewModel import org.linphone.activities.main.chat.viewmodels.ChatRoomCreationViewModel
import org.linphone.activities.main.fragments.SecureFragment import org.linphone.activities.main.fragments.SecureFragment
import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.activities.navigateToChatRoom import org.linphone.activities.navigateToChatRoom
import org.linphone.activities.navigateToEmptyChatRoom
import org.linphone.activities.navigateToGroupInfo import org.linphone.activities.navigateToGroupInfo
import org.linphone.contact.ContactsSelectionAdapter import org.linphone.contact.ContactsSelectionAdapter
import org.linphone.core.tools.Log import org.linphone.core.tools.Log
import org.linphone.databinding.ChatRoomCreationFragmentBinding import org.linphone.databinding.ChatRoomCreationFragmentBinding
import org.linphone.utils.AppUtils import org.linphone.utils.AppUtils
import org.linphone.utils.Event
import org.linphone.utils.PermissionHelper import org.linphone.utils.PermissionHelper
class ChatRoomCreationFragment : SecureFragment<ChatRoomCreationFragmentBinding>() { class ChatRoomCreationFragment : SecureFragment<ChatRoomCreationFragmentBinding>() {
private lateinit var viewModel: ChatRoomCreationViewModel private lateinit var viewModel: ChatRoomCreationViewModel
private lateinit var sharedViewModel: SharedMainViewModel
private lateinit var adapter: ContactsSelectionAdapter private lateinit var adapter: ContactsSelectionAdapter
override fun getLayoutId(): Int = R.layout.chat_room_creation_fragment override fun getLayoutId(): Int = R.layout.chat_room_creation_fragment
@ -53,10 +48,6 @@ class ChatRoomCreationFragment : SecureFragment<ChatRoomCreationFragmentBinding>
binding.lifecycleOwner = viewLifecycleOwner binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run {
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
useMaterialSharedAxisXForwardAnimation = sharedViewModel.isSlidingPaneSlideable.value == false useMaterialSharedAxisXForwardAnimation = sharedViewModel.isSlidingPaneSlideable.value == false
val createGroup = arguments?.getBoolean("createGroup") ?: false val createGroup = arguments?.getBoolean("createGroup") ?: false
@ -79,9 +70,6 @@ class ChatRoomCreationFragment : SecureFragment<ChatRoomCreationFragmentBinding>
// Divider between items // Divider between items
binding.contactsList.addItemDecoration(AppUtils.getDividerDecoration(requireContext(), layoutManager)) binding.contactsList.addItemDecoration(AppUtils.getDividerDecoration(requireContext(), layoutManager))
binding.setBackClickListener {
goBack()
}
binding.back.visibility = if (resources.getBoolean(R.bool.isTablet)) View.INVISIBLE else View.VISIBLE binding.back.visibility = if (resources.getBoolean(R.bool.isTablet)) View.INVISIBLE else View.VISIBLE
binding.setAllContactsToggleClickListener { binding.setAllContactsToggleClickListener {
@ -182,16 +170,6 @@ class ChatRoomCreationFragment : SecureFragment<ChatRoomCreationFragmentBinding>
} }
} }
override fun goBack() {
if (!findNavController().popBackStack()) {
if (sharedViewModel.isSlidingPaneSlideable.value == true) {
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
} else {
navigateToEmptyChatRoom()
}
}
}
private fun addParticipantsFromSharedViewModel() { private fun addParticipantsFromSharedViewModel() {
val participants = sharedViewModel.chatRoomParticipants.value val participants = sharedViewModel.chatRoomParticipants.value
if (participants != null && participants.size > 0) { if (participants != null && participants.size > 0) {

View file

@ -36,7 +36,6 @@ import androidx.databinding.DataBindingUtil
import androidx.databinding.ViewDataBinding import androidx.databinding.ViewDataBinding
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
@ -57,7 +56,6 @@ import org.linphone.activities.main.chat.viewmodels.*
import org.linphone.activities.main.chat.views.RichEditTextSendListener import org.linphone.activities.main.chat.views.RichEditTextSendListener
import org.linphone.activities.main.fragments.MasterFragment import org.linphone.activities.main.fragments.MasterFragment
import org.linphone.activities.main.viewmodels.DialogViewModel import org.linphone.activities.main.viewmodels.DialogViewModel
import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.activities.navigateToContacts import org.linphone.activities.navigateToContacts
import org.linphone.activities.navigateToImageFileViewer import org.linphone.activities.navigateToImageFileViewer
import org.linphone.activities.navigateToImdn import org.linphone.activities.navigateToImdn
@ -73,7 +71,6 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
private lateinit var viewModel: ChatRoomViewModel private lateinit var viewModel: ChatRoomViewModel
private lateinit var chatSendingViewModel: ChatMessageSendingViewModel private lateinit var chatSendingViewModel: ChatMessageSendingViewModel
private lateinit var listViewModel: ChatMessagesListViewModel private lateinit var listViewModel: ChatMessagesListViewModel
private lateinit var sharedViewModel: SharedMainViewModel
private val observer = object : RecyclerView.AdapterDataObserver() { private val observer = object : RecyclerView.AdapterDataObserver() {
override fun onItemRangeInserted(positionStart: Int, itemCount: Int) { override fun onItemRangeInserted(positionStart: Int, itemCount: Int) {
@ -111,7 +108,7 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
} }
override fun onSaveInstanceState(outState: Bundle) { override fun onSaveInstanceState(outState: Bundle) {
if (::sharedViewModel.isInitialized) { if (isSharedViewModelInitialized()) {
val chatRoom = sharedViewModel.selectedChatRoom.value val chatRoom = sharedViewModel.selectedChatRoom.value
if (chatRoom != null) { if (chatRoom != null) {
outState.putString("LocalSipUri", chatRoom.localAddress.asStringUriOnly()) outState.putString("LocalSipUri", chatRoom.localAddress.asStringUriOnly())
@ -129,9 +126,6 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
binding.lifecycleOwner = viewLifecycleOwner binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run {
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
binding.sharedMainViewModel = sharedViewModel binding.sharedMainViewModel = sharedViewModel
useMaterialSharedAxisXForwardAnimation = sharedViewModel.isSlidingPaneSlideable.value == false useMaterialSharedAxisXForwardAnimation = sharedViewModel.isSlidingPaneSlideable.value == false
@ -383,7 +377,7 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
if (sharedViewModel.isSlidingPaneSlideable.value == true) { if (sharedViewModel.isSlidingPaneSlideable.value == true) {
Log.i("[Chat Room] Forwarding message, going to chat rooms list") Log.i("[Chat Room] Forwarding message, going to chat rooms list")
sharedViewModel.closeSlidingPaneEvent.value = Event(true) goBack()
} else { } else {
navigateToEmptyChatRoom() navigateToEmptyChatRoom()
} }
@ -548,10 +542,6 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
} }
} }
binding.setBackClickListener {
goBack()
}
binding.setTitleClickListener { binding.setTitleClickListener {
binding.sipUri.visibility = if (!viewModel.oneToOneChatRoom || binding.sipUri.visibility = if (!viewModel.oneToOneChatRoom ||
binding.sipUri.visibility == View.VISIBLE binding.sipUri.visibility == View.VISIBLE
@ -747,6 +737,7 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
} }
override fun onPause() { override fun onPause() {
// Conversation isn't visible anymore, any new message received in it will trigger a notification
coreContext.notificationsManager.currentlyDisplayedChatRoomAddress = null coreContext.notificationsManager.currentlyDisplayedChatRoomAddress = null
super.onPause() super.onPause()
@ -767,22 +758,6 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
} }
} }
override fun goBack() {
coreContext.notificationsManager.currentlyDisplayedChatRoomAddress = null
if (!findNavController().popBackStack()) {
if (sharedViewModel.isSlidingPaneSlideable.value == true) {
if (_adapter != null) {
try {
adapter.unregisterAdapterDataObserver(observer)
} catch (ise: IllegalStateException) {}
}
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
} else {
navigateToEmptyChatRoom()
}
}
}
private fun enterEditionMode() { private fun enterEditionMode() {
listSelectionViewModel.isEditionEnabled.value = true listSelectionViewModel.isEditionEnabled.value = true
} }

View file

@ -27,13 +27,11 @@ import org.linphone.R
import org.linphone.activities.main.chat.viewmodels.DevicesListViewModel import org.linphone.activities.main.chat.viewmodels.DevicesListViewModel
import org.linphone.activities.main.chat.viewmodels.DevicesListViewModelFactory import org.linphone.activities.main.chat.viewmodels.DevicesListViewModelFactory
import org.linphone.activities.main.fragments.SecureFragment import org.linphone.activities.main.fragments.SecureFragment
import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.core.tools.Log import org.linphone.core.tools.Log
import org.linphone.databinding.ChatRoomDevicesFragmentBinding import org.linphone.databinding.ChatRoomDevicesFragmentBinding
class DevicesFragment : SecureFragment<ChatRoomDevicesFragmentBinding>() { class DevicesFragment : SecureFragment<ChatRoomDevicesFragmentBinding>() {
private lateinit var listViewModel: DevicesListViewModel private lateinit var listViewModel: DevicesListViewModel
private lateinit var sharedViewModel: SharedMainViewModel
override fun getLayoutId(): Int = R.layout.chat_room_devices_fragment override fun getLayoutId(): Int = R.layout.chat_room_devices_fragment
@ -42,10 +40,6 @@ class DevicesFragment : SecureFragment<ChatRoomDevicesFragmentBinding>() {
binding.lifecycleOwner = viewLifecycleOwner binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run {
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
val chatRoom = sharedViewModel.selectedChatRoom.value val chatRoom = sharedViewModel.selectedChatRoom.value
if (chatRoom == null) { if (chatRoom == null) {
Log.e("[Devices] Chat room is null, aborting!") Log.e("[Devices] Chat room is null, aborting!")
@ -60,10 +54,6 @@ class DevicesFragment : SecureFragment<ChatRoomDevicesFragmentBinding>() {
DevicesListViewModelFactory(chatRoom) DevicesListViewModelFactory(chatRoom)
)[DevicesListViewModel::class.java] )[DevicesListViewModel::class.java]
binding.viewModel = listViewModel binding.viewModel = listViewModel
binding.setBackClickListener {
goBack()
}
} }
override fun onResume() { override fun onResume() {

View file

@ -27,14 +27,12 @@ import org.linphone.R
import org.linphone.activities.main.chat.viewmodels.EphemeralViewModel import org.linphone.activities.main.chat.viewmodels.EphemeralViewModel
import org.linphone.activities.main.chat.viewmodels.EphemeralViewModelFactory import org.linphone.activities.main.chat.viewmodels.EphemeralViewModelFactory
import org.linphone.activities.main.fragments.SecureFragment import org.linphone.activities.main.fragments.SecureFragment
import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.core.tools.Log import org.linphone.core.tools.Log
import org.linphone.databinding.ChatRoomEphemeralFragmentBinding import org.linphone.databinding.ChatRoomEphemeralFragmentBinding
import org.linphone.utils.Event import org.linphone.utils.Event
class EphemeralFragment : SecureFragment<ChatRoomEphemeralFragmentBinding>() { class EphemeralFragment : SecureFragment<ChatRoomEphemeralFragmentBinding>() {
private lateinit var viewModel: EphemeralViewModel private lateinit var viewModel: EphemeralViewModel
private lateinit var sharedViewModel: SharedMainViewModel
override fun getLayoutId(): Int { override fun getLayoutId(): Int {
return R.layout.chat_room_ephemeral_fragment return R.layout.chat_room_ephemeral_fragment
@ -46,10 +44,6 @@ class EphemeralFragment : SecureFragment<ChatRoomEphemeralFragmentBinding>() {
isSecure = true isSecure = true
binding.lifecycleOwner = viewLifecycleOwner binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run {
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
val chatRoom = sharedViewModel.selectedChatRoom.value val chatRoom = sharedViewModel.selectedChatRoom.value
if (chatRoom == null) { if (chatRoom == null) {
Log.e("[Ephemeral] Chat room is null, aborting!") Log.e("[Ephemeral] Chat room is null, aborting!")
@ -63,10 +57,6 @@ class EphemeralFragment : SecureFragment<ChatRoomEphemeralFragmentBinding>() {
)[EphemeralViewModel::class.java] )[EphemeralViewModel::class.java]
binding.viewModel = viewModel binding.viewModel = viewModel
binding.setBackClickListener {
goBack()
}
binding.setValidClickListener { binding.setValidClickListener {
viewModel.updateChatRoomEphemeralDuration() viewModel.updateChatRoomEphemeralDuration()
sharedViewModel.refreshChatRoomInListEvent.value = Event(true) sharedViewModel.refreshChatRoomInListEvent.value = Event(true)

View file

@ -33,7 +33,6 @@ import org.linphone.activities.main.chat.viewmodels.GroupInfoViewModel
import org.linphone.activities.main.chat.viewmodels.GroupInfoViewModelFactory import org.linphone.activities.main.chat.viewmodels.GroupInfoViewModelFactory
import org.linphone.activities.main.fragments.SecureFragment import org.linphone.activities.main.fragments.SecureFragment
import org.linphone.activities.main.viewmodels.DialogViewModel import org.linphone.activities.main.viewmodels.DialogViewModel
import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.activities.navigateToChatRoom import org.linphone.activities.navigateToChatRoom
import org.linphone.activities.navigateToChatRoomCreation import org.linphone.activities.navigateToChatRoomCreation
import org.linphone.core.Address import org.linphone.core.Address
@ -45,7 +44,6 @@ import org.linphone.utils.DialogUtils
class GroupInfoFragment : SecureFragment<ChatRoomGroupInfoFragmentBinding>() { class GroupInfoFragment : SecureFragment<ChatRoomGroupInfoFragmentBinding>() {
private lateinit var viewModel: GroupInfoViewModel private lateinit var viewModel: GroupInfoViewModel
private lateinit var sharedViewModel: SharedMainViewModel
private lateinit var adapter: GroupInfoParticipantsAdapter private lateinit var adapter: GroupInfoParticipantsAdapter
private var meAdminStatusChangedDialog: Dialog? = null private var meAdminStatusChangedDialog: Dialog? = null
@ -56,10 +54,6 @@ class GroupInfoFragment : SecureFragment<ChatRoomGroupInfoFragmentBinding>() {
binding.lifecycleOwner = viewLifecycleOwner binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run {
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
val chatRoom: ChatRoom? = sharedViewModel.selectedGroupChatRoom.value val chatRoom: ChatRoom? = sharedViewModel.selectedGroupChatRoom.value
isSecure = chatRoom?.currentParams?.isEncryptionEnabled ?: false isSecure = chatRoom?.currentParams?.isEncryptionEnabled ?: false
@ -113,10 +107,6 @@ class GroupInfoFragment : SecureFragment<ChatRoomGroupInfoFragmentBinding>() {
addParticipantsFromSharedViewModel() addParticipantsFromSharedViewModel()
binding.setBackClickListener {
goBack()
}
viewModel.createdChatRoomEvent.observe( viewModel.createdChatRoomEvent.observe(
viewLifecycleOwner viewLifecycleOwner
) { ) {

View file

@ -29,7 +29,6 @@ import org.linphone.activities.main.chat.adapters.ImdnAdapter
import org.linphone.activities.main.chat.viewmodels.ImdnViewModel import org.linphone.activities.main.chat.viewmodels.ImdnViewModel
import org.linphone.activities.main.chat.viewmodels.ImdnViewModelFactory import org.linphone.activities.main.chat.viewmodels.ImdnViewModelFactory
import org.linphone.activities.main.fragments.SecureFragment import org.linphone.activities.main.fragments.SecureFragment
import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.core.tools.Log import org.linphone.core.tools.Log
import org.linphone.databinding.ChatRoomImdnFragmentBinding import org.linphone.databinding.ChatRoomImdnFragmentBinding
import org.linphone.utils.AppUtils import org.linphone.utils.AppUtils
@ -38,7 +37,6 @@ import org.linphone.utils.RecyclerViewHeaderDecoration
class ImdnFragment : SecureFragment<ChatRoomImdnFragmentBinding>() { class ImdnFragment : SecureFragment<ChatRoomImdnFragmentBinding>() {
private lateinit var viewModel: ImdnViewModel private lateinit var viewModel: ImdnViewModel
private lateinit var adapter: ImdnAdapter private lateinit var adapter: ImdnAdapter
private lateinit var sharedViewModel: SharedMainViewModel
override fun getLayoutId(): Int { override fun getLayoutId(): Int {
return R.layout.chat_room_imdn_fragment return R.layout.chat_room_imdn_fragment
@ -49,10 +47,6 @@ class ImdnFragment : SecureFragment<ChatRoomImdnFragmentBinding>() {
binding.lifecycleOwner = viewLifecycleOwner binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run {
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
val chatRoom = sharedViewModel.selectedChatRoom.value val chatRoom = sharedViewModel.selectedChatRoom.value
if (chatRoom == null) { if (chatRoom == null) {
Log.e("[IMDN] Chat room is null, aborting!") Log.e("[IMDN] Chat room is null, aborting!")
@ -101,9 +95,5 @@ class ImdnFragment : SecureFragment<ChatRoomImdnFragmentBinding>() {
) { ) {
adapter.submitList(it) adapter.submitList(it)
} }
binding.setBackClickListener {
goBack()
}
} }
} }

View file

@ -24,7 +24,6 @@ import android.content.res.Configuration
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.view.doOnPreDraw
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.NavHostFragment import androidx.navigation.fragment.NavHostFragment
import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.ItemTouchHelper
@ -42,7 +41,6 @@ import org.linphone.activities.main.chat.adapters.ChatRoomsListAdapter
import org.linphone.activities.main.chat.viewmodels.ChatRoomsListViewModel import org.linphone.activities.main.chat.viewmodels.ChatRoomsListViewModel
import org.linphone.activities.main.fragments.MasterFragment import org.linphone.activities.main.fragments.MasterFragment
import org.linphone.activities.main.viewmodels.DialogViewModel import org.linphone.activities.main.viewmodels.DialogViewModel
import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.activities.navigateToChatRoom import org.linphone.activities.navigateToChatRoom
import org.linphone.activities.navigateToChatRoomCreation import org.linphone.activities.navigateToChatRoomCreation
import org.linphone.core.ChatRoom import org.linphone.core.ChatRoom
@ -54,7 +52,6 @@ import org.linphone.utils.*
class MasterChatRoomsFragment : MasterFragment<ChatRoomMasterFragmentBinding, ChatRoomsListAdapter>() { class MasterChatRoomsFragment : MasterFragment<ChatRoomMasterFragmentBinding, ChatRoomsListAdapter>() {
override val dialogConfirmationMessageBeforeRemoval = R.plurals.chat_room_delete_dialog override val dialogConfirmationMessageBeforeRemoval = R.plurals.chat_room_delete_dialog
private lateinit var listViewModel: ChatRoomsListViewModel private lateinit var listViewModel: ChatRoomsListViewModel
private lateinit var sharedViewModel: SharedMainViewModel
private val observer = object : RecyclerView.AdapterDataObserver() { private val observer = object : RecyclerView.AdapterDataObserver() {
override fun onChanged() { override fun onChanged() {
@ -105,11 +102,18 @@ class MasterChatRoomsFragment : MasterFragment<ChatRoomMasterFragmentBinding, Ch
/* Shared view model & sliding pane related */ /* Shared view model & sliding pane related */
sharedViewModel = requireActivity().run { setUpSlidingPane(binding.slidingPane)
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
view.doOnPreDraw { sharedViewModel.isSlidingPaneSlideable.value = binding.slidingPane.isSlideable } binding.slidingPane.addPanelSlideListener(object : SlidingPaneLayout.PanelSlideListener {
override fun onPanelSlide(panel: View, slideOffset: Float) { }
override fun onPanelOpened(panel: View) { }
override fun onPanelClosed(panel: View) {
// Conversation isn't visible anymore, any new message received in it will trigger a notification
coreContext.notificationsManager.currentlyDisplayedChatRoomAddress = null
}
})
// Chat room loading can take some time, so wait until it is ready before opening the pane // Chat room loading can take some time, so wait until it is ready before opening the pane
sharedViewModel.chatRoomFragmentOpenedEvent.observe( sharedViewModel.chatRoomFragmentOpenedEvent.observe(
@ -120,17 +124,6 @@ class MasterChatRoomsFragment : MasterFragment<ChatRoomMasterFragmentBinding, Ch
} }
} }
sharedViewModel.closeSlidingPaneEvent.observe(
viewLifecycleOwner
) {
it.consume {
(requireActivity() as MainActivity).hideKeyboard()
if (!binding.slidingPane.closePane()) {
goBack()
}
}
}
sharedViewModel.layoutChangedEvent.observe( sharedViewModel.layoutChangedEvent.observe(
viewLifecycleOwner viewLifecycleOwner
) { ) {
@ -158,8 +151,6 @@ class MasterChatRoomsFragment : MasterFragment<ChatRoomMasterFragmentBinding, Ch
} }
} }
binding.slidingPane.lockMode = SlidingPaneLayout.LOCK_MODE_LOCKED
/* End of shared view model & sliding pane related */ /* End of shared view model & sliding pane related */
_adapter = ChatRoomsListAdapter(listSelectionViewModel, viewLifecycleOwner) _adapter = ChatRoomsListAdapter(listSelectionViewModel, viewLifecycleOwner)

View file

@ -22,7 +22,6 @@ package org.linphone.activities.main.conference.fragments
import android.os.Bundle import android.os.Bundle
import android.text.format.DateFormat.is24HourFormat import android.text.format.DateFormat.is24HourFormat
import android.view.View import android.view.View
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.navGraphViewModels import androidx.navigation.navGraphViewModels
import com.google.android.material.datepicker.CalendarConstraints import com.google.android.material.datepicker.CalendarConstraints
import com.google.android.material.datepicker.DateValidatorPointForward import com.google.android.material.datepicker.DateValidatorPointForward
@ -33,7 +32,6 @@ import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.R import org.linphone.R
import org.linphone.activities.GenericFragment import org.linphone.activities.GenericFragment
import org.linphone.activities.main.conference.viewmodels.ConferenceSchedulingViewModel import org.linphone.activities.main.conference.viewmodels.ConferenceSchedulingViewModel
import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.activities.navigateToParticipantsList import org.linphone.activities.navigateToParticipantsList
import org.linphone.core.Factory import org.linphone.core.Factory
import org.linphone.core.tools.Log import org.linphone.core.tools.Log
@ -41,7 +39,6 @@ import org.linphone.databinding.ConferenceSchedulingFragmentBinding
class ConferenceSchedulingFragment : GenericFragment<ConferenceSchedulingFragmentBinding>() { class ConferenceSchedulingFragment : GenericFragment<ConferenceSchedulingFragmentBinding>() {
private val viewModel: ConferenceSchedulingViewModel by navGraphViewModels(R.id.conference_scheduling_nav_graph) private val viewModel: ConferenceSchedulingViewModel by navGraphViewModels(R.id.conference_scheduling_nav_graph)
private lateinit var sharedViewModel: SharedMainViewModel
override fun getLayoutId(): Int = R.layout.conference_scheduling_fragment override fun getLayoutId(): Int = R.layout.conference_scheduling_fragment
@ -52,10 +49,6 @@ class ConferenceSchedulingFragment : GenericFragment<ConferenceSchedulingFragmen
binding.viewModel = viewModel binding.viewModel = viewModel
sharedViewModel = requireActivity().run {
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
sharedViewModel.conferenceInfoToEdit.observe( sharedViewModel.conferenceInfoToEdit.observe(
viewLifecycleOwner viewLifecycleOwner
) { ) {
@ -75,10 +68,6 @@ class ConferenceSchedulingFragment : GenericFragment<ConferenceSchedulingFragmen
} }
} }
binding.setBackClickListener {
goBack()
}
binding.setNextClickListener { binding.setNextClickListener {
navigateToParticipantsList() navigateToParticipantsList()
} }

View file

@ -58,10 +58,6 @@ class ConferenceSchedulingParticipantsListFragment : GenericFragment<ConferenceS
// Divider between items // Divider between items
binding.contactsList.addItemDecoration(AppUtils.getDividerDecoration(requireContext(), layoutManager)) binding.contactsList.addItemDecoration(AppUtils.getDividerDecoration(requireContext(), layoutManager))
binding.setBackClickListener {
goBack()
}
binding.setNextClickListener { binding.setNextClickListener {
navigateToSummary() navigateToSummary()
} }

View file

@ -42,10 +42,6 @@ class ConferenceSchedulingSummaryFragment : GenericFragment<ConferenceScheduling
binding.viewModel = viewModel binding.viewModel = viewModel
binding.setBackClickListener {
goBack()
}
binding.setCreateConferenceClickListener { binding.setCreateConferenceClickListener {
viewModel.createConference() viewModel.createConference()
} }

View file

@ -33,7 +33,6 @@ import org.linphone.activities.main.MainActivity
import org.linphone.activities.main.conference.adapters.ScheduledConferencesAdapter import org.linphone.activities.main.conference.adapters.ScheduledConferencesAdapter
import org.linphone.activities.main.conference.viewmodels.ScheduledConferencesViewModel import org.linphone.activities.main.conference.viewmodels.ScheduledConferencesViewModel
import org.linphone.activities.main.viewmodels.DialogViewModel import org.linphone.activities.main.viewmodels.DialogViewModel
import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.activities.navigateToConferenceScheduling import org.linphone.activities.navigateToConferenceScheduling
import org.linphone.activities.navigateToConferenceWaitingRoom import org.linphone.activities.navigateToConferenceWaitingRoom
import org.linphone.databinding.ConferencesScheduledFragmentBinding import org.linphone.databinding.ConferencesScheduledFragmentBinding
@ -45,7 +44,6 @@ import org.linphone.utils.RecyclerViewHeaderDecoration
class ScheduledConferencesFragment : GenericFragment<ConferencesScheduledFragmentBinding>() { class ScheduledConferencesFragment : GenericFragment<ConferencesScheduledFragmentBinding>() {
private lateinit var viewModel: ScheduledConferencesViewModel private lateinit var viewModel: ScheduledConferencesViewModel
private lateinit var adapter: ScheduledConferencesAdapter private lateinit var adapter: ScheduledConferencesAdapter
private lateinit var sharedViewModel: SharedMainViewModel
override fun getLayoutId(): Int = R.layout.conferences_scheduled_fragment override fun getLayoutId(): Int = R.layout.conferences_scheduled_fragment
@ -66,10 +64,6 @@ class ScheduledConferencesFragment : GenericFragment<ConferencesScheduledFragmen
) )
binding.conferenceInfoList.adapter = adapter binding.conferenceInfoList.adapter = adapter
sharedViewModel = requireActivity().run {
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
val layoutManager = LinearLayoutManager(activity) val layoutManager = LinearLayoutManager(activity)
binding.conferenceInfoList.layoutManager = layoutManager binding.conferenceInfoList.layoutManager = layoutManager
@ -142,10 +136,6 @@ class ScheduledConferencesFragment : GenericFragment<ConferencesScheduledFragmen
} }
} }
binding.setBackClickListener {
goBack()
}
binding.setNewConferenceClickListener { binding.setNewConferenceClickListener {
navigateToConferenceScheduling() navigateToConferenceScheduling()
} }

View file

@ -29,7 +29,6 @@ import android.view.View
import androidx.core.content.FileProvider import androidx.core.content.FileProvider
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
import java.io.File import java.io.File
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.LinphoneApplication.Companion.corePreferences
@ -38,18 +37,14 @@ import org.linphone.activities.GenericFragment
import org.linphone.activities.main.MainActivity import org.linphone.activities.main.MainActivity
import org.linphone.activities.main.contact.data.NumberOrAddressEditorData import org.linphone.activities.main.contact.data.NumberOrAddressEditorData
import org.linphone.activities.main.contact.viewmodels.* import org.linphone.activities.main.contact.viewmodels.*
import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.activities.navigateToContact import org.linphone.activities.navigateToContact
import org.linphone.activities.navigateToEmptyContact
import org.linphone.core.tools.Log import org.linphone.core.tools.Log
import org.linphone.databinding.ContactEditorFragmentBinding import org.linphone.databinding.ContactEditorFragmentBinding
import org.linphone.utils.Event
import org.linphone.utils.FileUtils import org.linphone.utils.FileUtils
import org.linphone.utils.PermissionHelper import org.linphone.utils.PermissionHelper
class ContactEditorFragment : GenericFragment<ContactEditorFragmentBinding>(), SyncAccountPickerFragment.SyncAccountPickedListener { class ContactEditorFragment : GenericFragment<ContactEditorFragmentBinding>(), SyncAccountPickerFragment.SyncAccountPickedListener {
private lateinit var viewModel: ContactEditorViewModel private lateinit var viewModel: ContactEditorViewModel
private lateinit var sharedViewModel: SharedMainViewModel
private var temporaryPicturePath: File? = null private var temporaryPicturePath: File? = null
override fun getLayoutId(): Int = R.layout.contact_editor_fragment override fun getLayoutId(): Int = R.layout.contact_editor_fragment
@ -59,10 +54,6 @@ class ContactEditorFragment : GenericFragment<ContactEditorFragmentBinding>(), S
binding.lifecycleOwner = viewLifecycleOwner binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run {
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
viewModel = ViewModelProvider( viewModel = ViewModelProvider(
this, this,
ContactEditorViewModelFactory(sharedViewModel.selectedContact.value) ContactEditorViewModelFactory(sharedViewModel.selectedContact.value)
@ -71,10 +62,6 @@ class ContactEditorFragment : GenericFragment<ContactEditorFragmentBinding>(), S
useMaterialSharedAxisXForwardAnimation = sharedViewModel.isSlidingPaneSlideable.value == false useMaterialSharedAxisXForwardAnimation = sharedViewModel.isSlidingPaneSlideable.value == false
binding.setBackClickListener {
goBack()
}
binding.setAvatarClickListener { binding.setAvatarClickListener {
pickFile() pickFile()
} }
@ -109,16 +96,6 @@ class ContactEditorFragment : GenericFragment<ContactEditorFragmentBinding>(), S
} }
} }
override fun goBack() {
if (!findNavController().popBackStack()) {
if (sharedViewModel.isSlidingPaneSlideable.value == true) {
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
} else {
navigateToEmptyContact()
}
}
}
override fun onSyncAccountClicked(name: String?, type: String?) { override fun onSyncAccountClicked(name: String?, type: String?) {
Log.i("[Contact Editor] Using account $name / $type") Log.i("[Contact Editor] Using account $name / $type")
viewModel.syncAccountName = name viewModel.syncAccountName = name

View file

@ -26,7 +26,6 @@ import android.os.Bundle
import android.view.View import android.view.View
import androidx.core.view.doOnPreDraw import androidx.core.view.doOnPreDraw
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.R import org.linphone.R
import org.linphone.activities.* import org.linphone.activities.*
@ -34,7 +33,6 @@ import org.linphone.activities.main.*
import org.linphone.activities.main.contact.viewmodels.ContactViewModel import org.linphone.activities.main.contact.viewmodels.ContactViewModel
import org.linphone.activities.main.contact.viewmodels.ContactViewModelFactory import org.linphone.activities.main.contact.viewmodels.ContactViewModelFactory
import org.linphone.activities.main.viewmodels.DialogViewModel import org.linphone.activities.main.viewmodels.DialogViewModel
import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.activities.navigateToChatRoom import org.linphone.activities.navigateToChatRoom
import org.linphone.activities.navigateToContactEditor import org.linphone.activities.navigateToContactEditor
import org.linphone.activities.navigateToDialer import org.linphone.activities.navigateToDialer
@ -45,7 +43,6 @@ import org.linphone.utils.Event
class DetailContactFragment : GenericFragment<ContactDetailFragmentBinding>() { class DetailContactFragment : GenericFragment<ContactDetailFragmentBinding>() {
private lateinit var viewModel: ContactViewModel private lateinit var viewModel: ContactViewModel
private lateinit var sharedViewModel: SharedMainViewModel
override fun getLayoutId(): Int = R.layout.contact_detail_fragment override fun getLayoutId(): Int = R.layout.contact_detail_fragment
@ -54,9 +51,6 @@ class DetailContactFragment : GenericFragment<ContactDetailFragmentBinding>() {
binding.lifecycleOwner = viewLifecycleOwner binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run {
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
binding.sharedMainViewModel = sharedViewModel binding.sharedMainViewModel = sharedViewModel
useMaterialSharedAxisXForwardAnimation = sharedViewModel.isSlidingPaneSlideable.value == false useMaterialSharedAxisXForwardAnimation = sharedViewModel.isSlidingPaneSlideable.value == false
@ -127,10 +121,6 @@ class DetailContactFragment : GenericFragment<ContactDetailFragmentBinding>() {
} }
} }
binding.setBackClickListener {
goBack()
}
binding.setEditClickListener { binding.setEditClickListener {
navigateToContactEditor() navigateToContactEditor()
} }
@ -170,16 +160,6 @@ class DetailContactFragment : GenericFragment<ContactDetailFragmentBinding>() {
} }
} }
override fun goBack() {
if (!findNavController().popBackStack()) {
if (sharedViewModel.isSlidingPaneSlideable.value == true) {
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
} else {
navigateToEmptyContact()
}
}
}
private fun confirmContactRemoval() { private fun confirmContactRemoval() {
val dialogViewModel = DialogViewModel(getString(R.string.contact_delete_one_dialog)) val dialogViewModel = DialogViewModel(getString(R.string.contact_delete_one_dialog))
val dialog: Dialog = DialogUtils.getDialog(requireContext(), dialogViewModel) val dialog: Dialog = DialogUtils.getDialog(requireContext(), dialogViewModel)

View file

@ -25,13 +25,11 @@ import android.content.res.Configuration
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.view.doOnPreDraw
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.NavHostFragment import androidx.navigation.fragment.NavHostFragment
import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import androidx.slidingpanelayout.widget.SlidingPaneLayout
import com.google.android.material.transition.MaterialSharedAxis import com.google.android.material.transition.MaterialSharedAxis
import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.LinphoneApplication.Companion.corePreferences
@ -43,7 +41,6 @@ import org.linphone.activities.main.contact.adapters.ContactsListAdapter
import org.linphone.activities.main.contact.viewmodels.ContactsListViewModel import org.linphone.activities.main.contact.viewmodels.ContactsListViewModel
import org.linphone.activities.main.fragments.MasterFragment import org.linphone.activities.main.fragments.MasterFragment
import org.linphone.activities.main.viewmodels.DialogViewModel import org.linphone.activities.main.viewmodels.DialogViewModel
import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.activities.navigateToContact import org.linphone.activities.navigateToContact
import org.linphone.activities.navigateToContactEditor import org.linphone.activities.navigateToContactEditor
import org.linphone.core.Factory import org.linphone.core.Factory
@ -55,7 +52,6 @@ import org.linphone.utils.*
class MasterContactsFragment : MasterFragment<ContactMasterFragmentBinding, ContactsListAdapter>() { class MasterContactsFragment : MasterFragment<ContactMasterFragmentBinding, ContactsListAdapter>() {
override val dialogConfirmationMessageBeforeRemoval = R.plurals.contact_delete_dialog override val dialogConfirmationMessageBeforeRemoval = R.plurals.contact_delete_dialog
private lateinit var listViewModel: ContactsListViewModel private lateinit var listViewModel: ContactsListViewModel
private lateinit var sharedViewModel: SharedMainViewModel
private var sipUriToAdd: String? = null private var sipUriToAdd: String? = null
private var editOnClick: Boolean = false private var editOnClick: Boolean = false
@ -78,11 +74,7 @@ class MasterContactsFragment : MasterFragment<ContactMasterFragmentBinding, Cont
/* Shared view model & sliding pane related */ /* Shared view model & sliding pane related */
sharedViewModel = requireActivity().run { setUpSlidingPane(binding.slidingPane)
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
view.doOnPreDraw { sharedViewModel.isSlidingPaneSlideable.value = binding.slidingPane.isSlideable }
useMaterialSharedAxisXForwardAnimation = false useMaterialSharedAxisXForwardAnimation = false
sharedViewModel.updateContactsAnimationsBasedOnDestination.observe( sharedViewModel.updateContactsAnimationsBasedOnDestination.observe(
@ -114,15 +106,6 @@ class MasterContactsFragment : MasterFragment<ContactMasterFragmentBinding, Cont
} }
} }
sharedViewModel.closeSlidingPaneEvent.observe(
viewLifecycleOwner
) {
it.consume {
if (!binding.slidingPane.closePane()) {
goBack()
}
}
}
sharedViewModel.layoutChangedEvent.observe( sharedViewModel.layoutChangedEvent.observe(
viewLifecycleOwner viewLifecycleOwner
) { ) {
@ -138,7 +121,7 @@ class MasterContactsFragment : MasterFragment<ContactMasterFragmentBinding, Cont
} }
} }
} }
binding.slidingPane.lockMode = SlidingPaneLayout.LOCK_MODE_LOCKED
/* End of shared view model & sliding pane related */ /* End of shared view model & sliding pane related */
_adapter = ContactsListAdapter(listSelectionViewModel, viewLifecycleOwner) _adapter = ContactsListAdapter(listSelectionViewModel, viewLifecycleOwner)

View file

@ -45,10 +45,6 @@ class ConfigViewerFragment : SecureFragment<FileConfigViewerFragmentBinding>() {
isSecure = arguments?.getBoolean("Secure") ?: false isSecure = arguments?.getBoolean("Secure") ?: false
binding.setBackClickListener {
goBack()
}
binding.setExportClickListener { binding.setExportClickListener {
shareConfig() shareConfig()
} }

View file

@ -43,7 +43,6 @@ import org.linphone.activities.main.MainActivity
import org.linphone.activities.main.dialer.viewmodels.DialerViewModel import org.linphone.activities.main.dialer.viewmodels.DialerViewModel
import org.linphone.activities.main.fragments.SecureFragment import org.linphone.activities.main.fragments.SecureFragment
import org.linphone.activities.main.viewmodels.DialogViewModel import org.linphone.activities.main.viewmodels.DialogViewModel
import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.activities.navigateToConferenceScheduling import org.linphone.activities.navigateToConferenceScheduling
import org.linphone.activities.navigateToConfigFileViewer import org.linphone.activities.navigateToConfigFileViewer
import org.linphone.activities.navigateToContacts import org.linphone.activities.navigateToContacts
@ -59,7 +58,6 @@ import org.linphone.utils.PermissionHelper
class DialerFragment : SecureFragment<DialerFragmentBinding>() { class DialerFragment : SecureFragment<DialerFragmentBinding>() {
private lateinit var viewModel: DialerViewModel private lateinit var viewModel: DialerViewModel
private lateinit var sharedViewModel: SharedMainViewModel
private var uploadLogsInitiatedByUs = false private var uploadLogsInitiatedByUs = false
@ -73,10 +71,6 @@ class DialerFragment : SecureFragment<DialerFragmentBinding>() {
viewModel = ViewModelProvider(this)[DialerViewModel::class.java] viewModel = ViewModelProvider(this)[DialerViewModel::class.java]
binding.viewModel = viewModel binding.viewModel = viewModel
sharedViewModel = requireActivity().run {
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
useMaterialSharedAxisXForwardAnimation = false useMaterialSharedAxisXForwardAnimation = false
sharedViewModel.updateDialerAnimationsBasedOnDestination.observe( sharedViewModel.updateDialerAnimationsBasedOnDestination.observe(
viewLifecycleOwner viewLifecycleOwner

View file

@ -22,23 +22,16 @@ package org.linphone.activities.main.files.fragments
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.databinding.ViewDataBinding import androidx.databinding.ViewDataBinding
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import org.linphone.R import org.linphone.R
import org.linphone.activities.main.fragments.SecureFragment import org.linphone.activities.main.fragments.SecureFragment
import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.core.tools.Log import org.linphone.core.tools.Log
abstract class GenericViewerFragment<T : ViewDataBinding> : SecureFragment<T>() { abstract class GenericViewerFragment<T : ViewDataBinding> : SecureFragment<T>() {
protected lateinit var sharedViewModel: SharedMainViewModel
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
sharedViewModel = requireActivity().run {
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
isSecure = arguments?.getBoolean("Secure") ?: false isSecure = arguments?.getBoolean("Secure") ?: false
} }
@ -55,8 +48,4 @@ abstract class GenericViewerFragment<T : ViewDataBinding> : SecureFragment<T>()
(childFragmentManager.findFragmentById(R.id.top_bar_fragment) as? TopBarFragment) (childFragmentManager.findFragmentById(R.id.top_bar_fragment) as? TopBarFragment)
?.setContent(content) ?.setContent(content)
} }
override fun goBack() {
findNavController().popBackStack()
}
} }

View file

@ -48,10 +48,6 @@ class TopBarFragment : GenericFragment<FileViewerTopBarFragmentBinding>() {
binding.lifecycleOwner = viewLifecycleOwner binding.lifecycleOwner = viewLifecycleOwner
useMaterialSharedAxisXForwardAnimation = false useMaterialSharedAxisXForwardAnimation = false
binding.setBackClickListener {
goBack()
}
binding.setExportClickListener { binding.setExportClickListener {
val contentToExport = content val contentToExport = content
if (contentToExport != null) { if (contentToExport != null) {

View file

@ -57,7 +57,5 @@ class ListTopBarFragment : GenericFragment<ListEditTopBarFragmentBinding>() {
binding.setDeleteClickListener { binding.setDeleteClickListener {
viewModel.deleteSelectionEvent.value = Event(true) viewModel.deleteSelectionEvent.value = Event(true)
} }
onBackPressedCallback.isEnabled = false
} }
} }

View file

@ -22,8 +22,11 @@ package org.linphone.activities.main.fragments
import android.app.Dialog import android.app.Dialog
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.activity.OnBackPressedCallback
import androidx.core.view.doOnPreDraw
import androidx.databinding.ViewDataBinding import androidx.databinding.ViewDataBinding
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.slidingpanelayout.widget.SlidingPaneLayout
import org.linphone.R import org.linphone.R
import org.linphone.activities.main.adapters.SelectionListAdapter import org.linphone.activities.main.adapters.SelectionListAdapter
import org.linphone.activities.main.viewmodels.DialogViewModel import org.linphone.activities.main.viewmodels.DialogViewModel
@ -107,6 +110,19 @@ abstract class MasterFragment<T : ViewDataBinding, U : SelectionListAdapter<*, *
} }
} }
fun setUpSlidingPane(slidingPane: SlidingPaneLayout) {
binding.root.doOnPreDraw {
sharedViewModel.isSlidingPaneSlideable.value = slidingPane.isSlideable
requireActivity().onBackPressedDispatcher.addCallback(
viewLifecycleOwner,
SlidingPaneBackPressedCallback(slidingPane)
)
}
slidingPane.lockMode = SlidingPaneLayout.LOCK_MODE_LOCKED
}
private fun delete() { private fun delete() {
val list = listSelectionViewModel.selectedItems.value ?: arrayListOf() val list = listSelectionViewModel.selectedItems.value ?: arrayListOf()
deleteItems(list) deleteItems(list)
@ -117,4 +133,34 @@ abstract class MasterFragment<T : ViewDataBinding, U : SelectionListAdapter<*, *
} }
abstract fun deleteItems(indexesOfItemToDelete: ArrayList<Int>) abstract fun deleteItems(indexesOfItemToDelete: ArrayList<Int>)
class SlidingPaneBackPressedCallback(private val slidingPaneLayout: SlidingPaneLayout) :
OnBackPressedCallback
(
slidingPaneLayout.isSlideable && slidingPaneLayout.isOpen
),
SlidingPaneLayout.PanelSlideListener {
init {
Log.d("[Master Fragment] SlidingPane isSlideable = ${slidingPaneLayout.isSlideable}, isOpen = ${slidingPaneLayout.isOpen}")
slidingPaneLayout.addPanelSlideListener(this)
}
override fun handleOnBackPressed() {
Log.d("[Master Fragment] handleOnBackPressed, closing sliding pane")
slidingPaneLayout.closePane()
}
override fun onPanelOpened(panel: View) {
Log.d("[Master Fragment] onPanelOpened")
isEnabled = true
}
override fun onPanelClosed(panel: View) {
Log.d("[Master Fragment] onPanelClosed")
isEnabled = false
}
override fun onPanelSlide(panel: View, slideOffset: Float) { }
}
} }

View file

@ -25,7 +25,6 @@ import androidx.lifecycle.ViewModelProvider
import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.R import org.linphone.R
import org.linphone.activities.GenericFragment import org.linphone.activities.GenericFragment
import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.activities.main.viewmodels.StatusViewModel import org.linphone.activities.main.viewmodels.StatusViewModel
import org.linphone.core.tools.Log import org.linphone.core.tools.Log
import org.linphone.databinding.StatusFragmentBinding import org.linphone.databinding.StatusFragmentBinding
@ -33,7 +32,6 @@ import org.linphone.utils.Event
class StatusFragment : GenericFragment<StatusFragmentBinding>() { class StatusFragment : GenericFragment<StatusFragmentBinding>() {
private lateinit var viewModel: StatusViewModel private lateinit var viewModel: StatusViewModel
private lateinit var sharedViewModel: SharedMainViewModel
override fun getLayoutId(): Int = R.layout.status_fragment override fun getLayoutId(): Int = R.layout.status_fragment
@ -46,10 +44,6 @@ class StatusFragment : GenericFragment<StatusFragmentBinding>() {
viewModel = ViewModelProvider(this)[StatusViewModel::class.java] viewModel = ViewModelProvider(this)[StatusViewModel::class.java]
binding.viewModel = viewModel binding.viewModel = viewModel
sharedViewModel = requireActivity().run {
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
sharedViewModel.accountRemoved.observe( sharedViewModel.accountRemoved.observe(
viewLifecycleOwner viewLifecycleOwner
) { ) {
@ -67,7 +61,5 @@ class StatusFragment : GenericFragment<StatusFragmentBinding>() {
binding.setRefreshClickListener { binding.setRefreshClickListener {
viewModel.refreshRegister() viewModel.refreshRegister()
} }
onBackPressedCallback.isEnabled = false
} }
} }

View file

@ -28,7 +28,6 @@ import androidx.navigation.fragment.findNavController
import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.LinphoneApplication.Companion.corePreferences
import org.linphone.R import org.linphone.R
import org.linphone.activities.GenericFragment import org.linphone.activities.GenericFragment
import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.activities.main.viewmodels.TabsViewModel import org.linphone.activities.main.viewmodels.TabsViewModel
import org.linphone.activities.navigateToCallHistory import org.linphone.activities.navigateToCallHistory
import org.linphone.activities.navigateToChatRooms import org.linphone.activities.navigateToChatRooms
@ -39,7 +38,6 @@ import org.linphone.utils.Event
class TabsFragment : GenericFragment<TabsFragmentBinding>(), NavController.OnDestinationChangedListener { class TabsFragment : GenericFragment<TabsFragmentBinding>(), NavController.OnDestinationChangedListener {
private lateinit var viewModel: TabsViewModel private lateinit var viewModel: TabsViewModel
private lateinit var sharedViewModel: SharedMainViewModel
override fun getLayoutId(): Int = R.layout.tabs_fragment override fun getLayoutId(): Int = R.layout.tabs_fragment
@ -49,10 +47,6 @@ class TabsFragment : GenericFragment<TabsFragmentBinding>(), NavController.OnDes
binding.lifecycleOwner = viewLifecycleOwner binding.lifecycleOwner = viewLifecycleOwner
useMaterialSharedAxisXForwardAnimation = false useMaterialSharedAxisXForwardAnimation = false
sharedViewModel = requireActivity().run {
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
viewModel = requireActivity().run { viewModel = requireActivity().run {
ViewModelProvider(this)[TabsViewModel::class.java] ViewModelProvider(this)[TabsViewModel::class.java]
} }
@ -89,8 +83,6 @@ class TabsFragment : GenericFragment<TabsFragmentBinding>(), NavController.OnDes
} }
navigateToChatRooms() navigateToChatRooms()
} }
onBackPressedCallback.isEnabled = false
} }
override fun onStart() { override fun onStart() {

View file

@ -21,14 +21,12 @@ package org.linphone.activities.main.history.fragments
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.R import org.linphone.R
import org.linphone.activities.* import org.linphone.activities.*
import org.linphone.activities.main.* import org.linphone.activities.main.*
import org.linphone.activities.main.history.viewmodels.CallLogViewModel import org.linphone.activities.main.history.viewmodels.CallLogViewModel
import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.activities.navigateToContact import org.linphone.activities.navigateToContact
import org.linphone.activities.navigateToContacts import org.linphone.activities.navigateToContacts
import org.linphone.core.tools.Log import org.linphone.core.tools.Log
@ -37,7 +35,6 @@ import org.linphone.utils.Event
class DetailCallLogFragment : GenericFragment<HistoryDetailFragmentBinding>() { class DetailCallLogFragment : GenericFragment<HistoryDetailFragmentBinding>() {
private lateinit var viewModel: CallLogViewModel private lateinit var viewModel: CallLogViewModel
private lateinit var sharedViewModel: SharedMainViewModel
override fun getLayoutId(): Int = R.layout.history_detail_fragment override fun getLayoutId(): Int = R.layout.history_detail_fragment
@ -46,9 +43,6 @@ class DetailCallLogFragment : GenericFragment<HistoryDetailFragmentBinding>() {
binding.lifecycleOwner = viewLifecycleOwner binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run {
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
binding.sharedMainViewModel = sharedViewModel binding.sharedMainViewModel = sharedViewModel
val callLogGroup = sharedViewModel.selectedCallLogGroup.value val callLogGroup = sharedViewModel.selectedCallLogGroup.value
@ -64,10 +58,6 @@ class DetailCallLogFragment : GenericFragment<HistoryDetailFragmentBinding>() {
useMaterialSharedAxisXForwardAnimation = sharedViewModel.isSlidingPaneSlideable.value == false useMaterialSharedAxisXForwardAnimation = sharedViewModel.isSlidingPaneSlideable.value == false
binding.setBackClickListener {
goBack()
}
binding.setNewContactClickListener { binding.setNewContactClickListener {
val copy = viewModel.callLog.remoteAddress.clone() val copy = viewModel.callLog.remoteAddress.clone()
copy.clean() copy.clean()
@ -141,14 +131,6 @@ class DetailCallLogFragment : GenericFragment<HistoryDetailFragmentBinding>() {
} }
} }
override fun goBack() {
if (sharedViewModel.isSlidingPaneSlideable.value == true) {
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
} else {
navigateToEmptyCallHistory()
}
}
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
viewModel.enableListener(true) viewModel.enableListener(true)

View file

@ -21,20 +21,16 @@ package org.linphone.activities.main.history.fragments
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import org.linphone.R import org.linphone.R
import org.linphone.activities.* import org.linphone.activities.*
import org.linphone.activities.main.* import org.linphone.activities.main.*
import org.linphone.activities.main.history.viewmodels.CallLogViewModel import org.linphone.activities.main.history.viewmodels.CallLogViewModel
import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.core.tools.Log import org.linphone.core.tools.Log
import org.linphone.databinding.HistoryConfDetailFragmentBinding import org.linphone.databinding.HistoryConfDetailFragmentBinding
import org.linphone.utils.Event
class DetailConferenceCallLogFragment : GenericFragment<HistoryConfDetailFragmentBinding>() { class DetailConferenceCallLogFragment : GenericFragment<HistoryConfDetailFragmentBinding>() {
private lateinit var viewModel: CallLogViewModel private lateinit var viewModel: CallLogViewModel
private lateinit var sharedViewModel: SharedMainViewModel
override fun getLayoutId(): Int = R.layout.history_conf_detail_fragment override fun getLayoutId(): Int = R.layout.history_conf_detail_fragment
@ -43,9 +39,6 @@ class DetailConferenceCallLogFragment : GenericFragment<HistoryConfDetailFragmen
binding.lifecycleOwner = viewLifecycleOwner binding.lifecycleOwner = viewLifecycleOwner
sharedViewModel = requireActivity().run {
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
binding.sharedMainViewModel = sharedViewModel binding.sharedMainViewModel = sharedViewModel
val callLogGroup = sharedViewModel.selectedCallLogGroup.value val callLogGroup = sharedViewModel.selectedCallLogGroup.value
@ -61,10 +54,6 @@ class DetailConferenceCallLogFragment : GenericFragment<HistoryConfDetailFragmen
useMaterialSharedAxisXForwardAnimation = sharedViewModel.isSlidingPaneSlideable.value == false useMaterialSharedAxisXForwardAnimation = sharedViewModel.isSlidingPaneSlideable.value == false
binding.setBackClickListener {
goBack()
}
viewModel.onMessageToNotifyEvent.observe( viewModel.onMessageToNotifyEvent.observe(
viewLifecycleOwner viewLifecycleOwner
) { ) {
@ -73,12 +62,4 @@ class DetailConferenceCallLogFragment : GenericFragment<HistoryConfDetailFragmen
} }
} }
} }
override fun goBack() {
if (sharedViewModel.isSlidingPaneSlideable.value == true) {
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
} else {
navigateToEmptyCallHistory()
}
}
} }

View file

@ -24,13 +24,11 @@ import android.content.res.Configuration
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.view.doOnPreDraw
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.NavHostFragment import androidx.navigation.fragment.NavHostFragment
import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import androidx.slidingpanelayout.widget.SlidingPaneLayout
import com.google.android.material.transition.MaterialSharedAxis import com.google.android.material.transition.MaterialSharedAxis
import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.LinphoneApplication.Companion.corePreferences
@ -42,7 +40,6 @@ import org.linphone.activities.main.history.adapters.CallLogsListAdapter
import org.linphone.activities.main.history.data.GroupedCallLogData import org.linphone.activities.main.history.data.GroupedCallLogData
import org.linphone.activities.main.history.viewmodels.CallLogsListViewModel import org.linphone.activities.main.history.viewmodels.CallLogsListViewModel
import org.linphone.activities.main.viewmodels.DialogViewModel import org.linphone.activities.main.viewmodels.DialogViewModel
import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.activities.main.viewmodels.TabsViewModel import org.linphone.activities.main.viewmodels.TabsViewModel
import org.linphone.activities.navigateToCallHistory import org.linphone.activities.navigateToCallHistory
import org.linphone.activities.navigateToConferenceCallHistory import org.linphone.activities.navigateToConferenceCallHistory
@ -54,7 +51,6 @@ import org.linphone.utils.*
class MasterCallLogsFragment : MasterFragment<HistoryMasterFragmentBinding, CallLogsListAdapter>() { class MasterCallLogsFragment : MasterFragment<HistoryMasterFragmentBinding, CallLogsListAdapter>() {
override val dialogConfirmationMessageBeforeRemoval = R.plurals.history_delete_dialog override val dialogConfirmationMessageBeforeRemoval = R.plurals.history_delete_dialog
private lateinit var listViewModel: CallLogsListViewModel private lateinit var listViewModel: CallLogsListViewModel
private lateinit var sharedViewModel: SharedMainViewModel
private val observer = object : RecyclerView.AdapterDataObserver() { private val observer = object : RecyclerView.AdapterDataObserver() {
override fun onItemRangeInserted(positionStart: Int, itemCount: Int) { override fun onItemRangeInserted(positionStart: Int, itemCount: Int) {
@ -96,21 +92,8 @@ class MasterCallLogsFragment : MasterFragment<HistoryMasterFragmentBinding, Call
/* Shared view model & sliding pane related */ /* Shared view model & sliding pane related */
sharedViewModel = requireActivity().run { setUpSlidingPane(binding.slidingPane)
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
view.doOnPreDraw { sharedViewModel.isSlidingPaneSlideable.value = binding.slidingPane.isSlideable }
sharedViewModel.closeSlidingPaneEvent.observe(
viewLifecycleOwner
) {
it.consume {
if (!binding.slidingPane.closePane()) {
goBack()
}
}
}
sharedViewModel.layoutChangedEvent.observe( sharedViewModel.layoutChangedEvent.observe(
viewLifecycleOwner viewLifecycleOwner
) { ) {
@ -126,7 +109,7 @@ class MasterCallLogsFragment : MasterFragment<HistoryMasterFragmentBinding, Call
} }
} }
} }
binding.slidingPane.lockMode = SlidingPaneLayout.LOCK_MODE_LOCKED
/* End of shared view model & sliding pane related */ /* End of shared view model & sliding pane related */
_adapter = CallLogsListAdapter(listSelectionViewModel, viewLifecycleOwner) _adapter = CallLogsListAdapter(listSelectionViewModel, viewLifecycleOwner)

View file

@ -97,8 +97,6 @@ class RecordingsFragment : MasterFragment<RecordingsFragmentBinding, RecordingsL
} }
} }
binding.setBackClickListener { goBack() }
binding.setEditClickListener { listSelectionViewModel.isEditionEnabled.value = true } binding.setEditClickListener { listSelectionViewModel.isEditionEnabled.value = true }
binding.setVideoTouchListener { v, event -> binding.setVideoTouchListener { v, event ->

View file

@ -26,7 +26,6 @@ import androidx.lifecycle.ViewModelProvider
import org.linphone.R import org.linphone.R
import org.linphone.activities.main.settings.viewmodels.AccountSettingsViewModel import org.linphone.activities.main.settings.viewmodels.AccountSettingsViewModel
import org.linphone.activities.main.settings.viewmodels.AccountSettingsViewModelFactory import org.linphone.activities.main.settings.viewmodels.AccountSettingsViewModelFactory
import org.linphone.activities.navigateToEmptySetting
import org.linphone.activities.navigateToPhoneLinking import org.linphone.activities.navigateToPhoneLinking
import org.linphone.core.tools.Log import org.linphone.core.tools.Log
import org.linphone.databinding.SettingsAccountFragmentBinding import org.linphone.databinding.SettingsAccountFragmentBinding
@ -59,8 +58,6 @@ class AccountSettingsFragment : GenericSettingFragment<SettingsAccountFragmentBi
} }
binding.viewModel = viewModel binding.viewModel = viewModel
binding.setBackClickListener { goBack() }
viewModel.linkPhoneNumberEvent.observe( viewModel.linkPhoneNumberEvent.observe(
viewLifecycleOwner viewLifecycleOwner
) { ) {
@ -100,12 +97,4 @@ class AccountSettingsFragment : GenericSettingFragment<SettingsAccountFragmentBi
sharedViewModel.accountSettingsFragmentOpenedEvent.value = Event(true) sharedViewModel.accountSettingsFragmentOpenedEvent.value = Event(true)
} }
} }
override fun goBack() {
if (sharedViewModel.isSlidingPaneSlideable.value == true) {
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
} else {
navigateToEmptySetting()
}
}
} }

View file

@ -30,12 +30,10 @@ import androidx.lifecycle.ViewModelProvider
import org.linphone.R import org.linphone.R
import org.linphone.activities.main.MainActivity import org.linphone.activities.main.MainActivity
import org.linphone.activities.main.settings.viewmodels.AdvancedSettingsViewModel import org.linphone.activities.main.settings.viewmodels.AdvancedSettingsViewModel
import org.linphone.activities.navigateToEmptySetting
import org.linphone.core.tools.Log import org.linphone.core.tools.Log
import org.linphone.core.tools.compatibility.DeviceUtils import org.linphone.core.tools.compatibility.DeviceUtils
import org.linphone.databinding.SettingsAdvancedFragmentBinding import org.linphone.databinding.SettingsAdvancedFragmentBinding
import org.linphone.utils.AppUtils import org.linphone.utils.AppUtils
import org.linphone.utils.Event
import org.linphone.utils.PowerManagerUtils import org.linphone.utils.PowerManagerUtils
class AdvancedSettingsFragment : GenericSettingFragment<SettingsAdvancedFragmentBinding>() { class AdvancedSettingsFragment : GenericSettingFragment<SettingsAdvancedFragmentBinding>() {
@ -52,8 +50,6 @@ class AdvancedSettingsFragment : GenericSettingFragment<SettingsAdvancedFragment
viewModel = ViewModelProvider(this)[AdvancedSettingsViewModel::class.java] viewModel = ViewModelProvider(this)[AdvancedSettingsViewModel::class.java]
binding.viewModel = viewModel binding.viewModel = viewModel
binding.setBackClickListener { goBack() }
viewModel.uploadFinishedEvent.observe( viewModel.uploadFinishedEvent.observe(
viewLifecycleOwner viewLifecycleOwner
) { ) {
@ -146,12 +142,4 @@ class AdvancedSettingsFragment : GenericSettingFragment<SettingsAdvancedFragment
} }
} }
} }
override fun goBack() {
if (sharedViewModel.isSlidingPaneSlideable.value == true) {
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
} else {
navigateToEmptySetting()
}
}
} }

View file

@ -31,10 +31,8 @@ import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.R import org.linphone.R
import org.linphone.activities.main.settings.SettingListenerStub import org.linphone.activities.main.settings.SettingListenerStub
import org.linphone.activities.main.settings.viewmodels.AudioSettingsViewModel import org.linphone.activities.main.settings.viewmodels.AudioSettingsViewModel
import org.linphone.activities.navigateToEmptySetting
import org.linphone.core.tools.Log import org.linphone.core.tools.Log
import org.linphone.databinding.SettingsAudioFragmentBinding import org.linphone.databinding.SettingsAudioFragmentBinding
import org.linphone.utils.Event
import org.linphone.utils.PermissionHelper import org.linphone.utils.PermissionHelper
class AudioSettingsFragment : GenericSettingFragment<SettingsAudioFragmentBinding>() { class AudioSettingsFragment : GenericSettingFragment<SettingsAudioFragmentBinding>() {
@ -51,8 +49,6 @@ class AudioSettingsFragment : GenericSettingFragment<SettingsAudioFragmentBindin
viewModel = ViewModelProvider(this)[AudioSettingsViewModel::class.java] viewModel = ViewModelProvider(this)[AudioSettingsViewModel::class.java]
binding.viewModel = viewModel binding.viewModel = viewModel
binding.setBackClickListener { goBack() }
viewModel.askAudioRecordPermissionForEchoCancellerCalibrationEvent.observe( viewModel.askAudioRecordPermissionForEchoCancellerCalibrationEvent.observe(
viewLifecycleOwner viewLifecycleOwner
) { ) {
@ -117,12 +113,4 @@ class AudioSettingsFragment : GenericSettingFragment<SettingsAudioFragmentBindin
} }
viewModel.audioCodecs.value = list viewModel.audioCodecs.value = list
} }
override fun goBack() {
if (sharedViewModel.isSlidingPaneSlideable.value == true) {
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
} else {
navigateToEmptySetting()
}
}
} }

View file

@ -30,13 +30,11 @@ import androidx.lifecycle.ViewModelProvider
import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.LinphoneApplication.Companion.corePreferences
import org.linphone.R import org.linphone.R
import org.linphone.activities.main.settings.viewmodels.CallSettingsViewModel import org.linphone.activities.main.settings.viewmodels.CallSettingsViewModel
import org.linphone.activities.navigateToEmptySetting
import org.linphone.compatibility.Compatibility import org.linphone.compatibility.Compatibility
import org.linphone.core.tools.Log import org.linphone.core.tools.Log
import org.linphone.databinding.SettingsCallFragmentBinding import org.linphone.databinding.SettingsCallFragmentBinding
import org.linphone.mediastream.Version import org.linphone.mediastream.Version
import org.linphone.telecom.TelecomHelper import org.linphone.telecom.TelecomHelper
import org.linphone.utils.Event
class CallSettingsFragment : GenericSettingFragment<SettingsCallFragmentBinding>() { class CallSettingsFragment : GenericSettingFragment<SettingsCallFragmentBinding>() {
private lateinit var viewModel: CallSettingsViewModel private lateinit var viewModel: CallSettingsViewModel
@ -52,8 +50,6 @@ class CallSettingsFragment : GenericSettingFragment<SettingsCallFragmentBinding>
viewModel = ViewModelProvider(this)[CallSettingsViewModel::class.java] viewModel = ViewModelProvider(this)[CallSettingsViewModel::class.java]
binding.viewModel = viewModel binding.viewModel = viewModel
binding.setBackClickListener { goBack() }
viewModel.systemWideOverlayEnabledEvent.observe( viewModel.systemWideOverlayEnabledEvent.observe(
viewLifecycleOwner viewLifecycleOwner
) { ) {
@ -162,14 +158,6 @@ class CallSettingsFragment : GenericSettingFragment<SettingsCallFragmentBinding>
corePreferences.useTelecomManager = enabled corePreferences.useTelecomManager = enabled
} }
override fun goBack() {
if (sharedViewModel.isSlidingPaneSlideable.value == true) {
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
} else {
navigateToEmptySetting()
}
}
override fun onRequestPermissionsResult( override fun onRequestPermissionsResult(
requestCode: Int, requestCode: Int,
permissions: Array<out String>, permissions: Array<out String>,

View file

@ -28,10 +28,8 @@ import androidx.lifecycle.ViewModelProvider
import org.linphone.R import org.linphone.R
import org.linphone.activities.main.chat.viewmodels.ChatRoomsListViewModel import org.linphone.activities.main.chat.viewmodels.ChatRoomsListViewModel
import org.linphone.activities.main.settings.viewmodels.ChatSettingsViewModel import org.linphone.activities.main.settings.viewmodels.ChatSettingsViewModel
import org.linphone.activities.navigateToEmptySetting
import org.linphone.databinding.SettingsChatFragmentBinding import org.linphone.databinding.SettingsChatFragmentBinding
import org.linphone.mediastream.Version import org.linphone.mediastream.Version
import org.linphone.utils.Event
import org.linphone.utils.ShortcutsHelper import org.linphone.utils.ShortcutsHelper
class ChatSettingsFragment : GenericSettingFragment<SettingsChatFragmentBinding>() { class ChatSettingsFragment : GenericSettingFragment<SettingsChatFragmentBinding>() {
@ -48,8 +46,6 @@ class ChatSettingsFragment : GenericSettingFragment<SettingsChatFragmentBinding>
viewModel = ViewModelProvider(this)[ChatSettingsViewModel::class.java] viewModel = ViewModelProvider(this)[ChatSettingsViewModel::class.java]
binding.viewModel = viewModel binding.viewModel = viewModel
binding.setBackClickListener { goBack() }
viewModel.launcherShortcutsEvent.observe( viewModel.launcherShortcutsEvent.observe(
viewLifecycleOwner viewLifecycleOwner
) { ) {
@ -90,14 +86,6 @@ class ChatSettingsFragment : GenericSettingFragment<SettingsChatFragmentBinding>
} }
} }
override fun goBack() {
if (sharedViewModel.isSlidingPaneSlideable.value == true) {
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
} else {
navigateToEmptySetting()
}
}
private fun reloadChatRooms() { private fun reloadChatRooms() {
val listViewModel = requireActivity().run { val listViewModel = requireActivity().run {
ViewModelProvider(this)[ChatRoomsListViewModel::class.java] ViewModelProvider(this)[ChatRoomsListViewModel::class.java]

View file

@ -24,9 +24,7 @@ import android.view.View
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import org.linphone.R import org.linphone.R
import org.linphone.activities.main.settings.viewmodels.ConferencesSettingsViewModel import org.linphone.activities.main.settings.viewmodels.ConferencesSettingsViewModel
import org.linphone.activities.navigateToEmptySetting
import org.linphone.databinding.SettingsConferencesFragmentBinding import org.linphone.databinding.SettingsConferencesFragmentBinding
import org.linphone.utils.Event
class ConferencesSettingsFragment : GenericSettingFragment<SettingsConferencesFragmentBinding>() { class ConferencesSettingsFragment : GenericSettingFragment<SettingsConferencesFragmentBinding>() {
private lateinit var viewModel: ConferencesSettingsViewModel private lateinit var viewModel: ConferencesSettingsViewModel
@ -41,15 +39,5 @@ class ConferencesSettingsFragment : GenericSettingFragment<SettingsConferencesFr
viewModel = ViewModelProvider(this)[ConferencesSettingsViewModel::class.java] viewModel = ViewModelProvider(this)[ConferencesSettingsViewModel::class.java]
binding.viewModel = viewModel binding.viewModel = viewModel
binding.setBackClickListener { goBack() }
}
override fun goBack() {
if (sharedViewModel.isSlidingPaneSlideable.value == true) {
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
} else {
navigateToEmptySetting()
}
} }
} }

View file

@ -28,11 +28,9 @@ import org.linphone.LinphoneApplication.Companion.corePreferences
import org.linphone.R import org.linphone.R
import org.linphone.activities.main.settings.SettingListenerStub import org.linphone.activities.main.settings.SettingListenerStub
import org.linphone.activities.main.settings.viewmodels.ContactsSettingsViewModel import org.linphone.activities.main.settings.viewmodels.ContactsSettingsViewModel
import org.linphone.activities.navigateToEmptySetting
import org.linphone.activities.navigateToLdapSettings import org.linphone.activities.navigateToLdapSettings
import org.linphone.core.tools.Log import org.linphone.core.tools.Log
import org.linphone.databinding.SettingsContactsFragmentBinding import org.linphone.databinding.SettingsContactsFragmentBinding
import org.linphone.utils.Event
import org.linphone.utils.PermissionHelper import org.linphone.utils.PermissionHelper
import org.linphone.utils.ShortcutsHelper import org.linphone.utils.ShortcutsHelper
@ -50,8 +48,6 @@ class ContactsSettingsFragment : GenericSettingFragment<SettingsContactsFragment
viewModel = ViewModelProvider(this)[ContactsSettingsViewModel::class.java] viewModel = ViewModelProvider(this)[ContactsSettingsViewModel::class.java]
binding.viewModel = viewModel binding.viewModel = viewModel
binding.setBackClickListener { goBack() }
viewModel.launcherShortcutsEvent.observe( viewModel.launcherShortcutsEvent.observe(
viewLifecycleOwner viewLifecycleOwner
) { ) {
@ -126,14 +122,6 @@ class ContactsSettingsFragment : GenericSettingFragment<SettingsContactsFragment
} }
} }
override fun goBack() {
if (sharedViewModel.isSlidingPaneSlideable.value == true) {
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
} else {
navigateToEmptySetting()
}
}
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
viewModel.updateLdapConfigurationsList() viewModel.updateLdapConfigurationsList()

View file

@ -22,18 +22,10 @@ package org.linphone.activities.main.settings.fragments
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.databinding.ViewDataBinding import androidx.databinding.ViewDataBinding
import androidx.lifecycle.ViewModelProvider
import org.linphone.activities.GenericFragment import org.linphone.activities.GenericFragment
import org.linphone.activities.main.viewmodels.SharedMainViewModel
abstract class GenericSettingFragment<T : ViewDataBinding> : GenericFragment<T>() { abstract class GenericSettingFragment<T : ViewDataBinding> : GenericFragment<T>() {
protected lateinit var sharedViewModel: SharedMainViewModel
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
sharedViewModel = requireActivity().run {
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
useMaterialSharedAxisXForwardAnimation = sharedViewModel.isSlidingPaneSlideable.value == false useMaterialSharedAxisXForwardAnimation = sharedViewModel.isSlidingPaneSlideable.value == false
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)

View file

@ -62,7 +62,5 @@ class LdapSettingsFragment : GenericSettingFragment<SettingsLdapFragmentBinding>
goBack() goBack()
} }
} }
binding.setBackClickListener { goBack() }
} }
} }

View file

@ -24,9 +24,7 @@ import android.view.View
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import org.linphone.R import org.linphone.R
import org.linphone.activities.main.settings.viewmodels.NetworkSettingsViewModel import org.linphone.activities.main.settings.viewmodels.NetworkSettingsViewModel
import org.linphone.activities.navigateToEmptySetting
import org.linphone.databinding.SettingsNetworkFragmentBinding import org.linphone.databinding.SettingsNetworkFragmentBinding
import org.linphone.utils.Event
class NetworkSettingsFragment : GenericSettingFragment<SettingsNetworkFragmentBinding>() { class NetworkSettingsFragment : GenericSettingFragment<SettingsNetworkFragmentBinding>() {
private lateinit var viewModel: NetworkSettingsViewModel private lateinit var viewModel: NetworkSettingsViewModel
@ -41,15 +39,5 @@ class NetworkSettingsFragment : GenericSettingFragment<SettingsNetworkFragmentBi
viewModel = ViewModelProvider(this)[NetworkSettingsViewModel::class.java] viewModel = ViewModelProvider(this)[NetworkSettingsViewModel::class.java]
binding.viewModel = viewModel binding.viewModel = viewModel
binding.setBackClickListener { goBack() }
}
override fun goBack() {
if (sharedViewModel.isSlidingPaneSlideable.value == true) {
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
} else {
navigateToEmptySetting()
}
} }
} }

View file

@ -29,10 +29,10 @@ import com.google.android.material.transition.MaterialSharedAxis
import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.LinphoneApplication.Companion.corePreferences
import org.linphone.R import org.linphone.R
import org.linphone.activities.* import org.linphone.activities.*
import org.linphone.activities.main.fragments.MasterFragment
import org.linphone.activities.main.fragments.SecureFragment import org.linphone.activities.main.fragments.SecureFragment
import org.linphone.activities.main.settings.SettingListenerStub import org.linphone.activities.main.settings.SettingListenerStub
import org.linphone.activities.main.settings.viewmodels.SettingsViewModel import org.linphone.activities.main.settings.viewmodels.SettingsViewModel
import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.activities.navigateToAccountSettings import org.linphone.activities.navigateToAccountSettings
import org.linphone.activities.navigateToAudioSettings import org.linphone.activities.navigateToAudioSettings
import org.linphone.activities.navigateToTunnelSettings import org.linphone.activities.navigateToTunnelSettings
@ -41,7 +41,6 @@ import org.linphone.core.tools.Log
import org.linphone.databinding.SettingsFragmentBinding import org.linphone.databinding.SettingsFragmentBinding
class SettingsFragment : SecureFragment<SettingsFragmentBinding>() { class SettingsFragment : SecureFragment<SettingsFragmentBinding>() {
private lateinit var sharedViewModel: SharedMainViewModel
private lateinit var viewModel: SettingsViewModel private lateinit var viewModel: SettingsViewModel
override fun getLayoutId(): Int = R.layout.settings_fragment override fun getLayoutId(): Int = R.layout.settings_fragment
@ -61,10 +60,6 @@ class SettingsFragment : SecureFragment<SettingsFragmentBinding>() {
/* Shared view model & sliding pane related */ /* Shared view model & sliding pane related */
sharedViewModel = requireActivity().run {
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
view.doOnPreDraw { sharedViewModel.isSlidingPaneSlideable.value = binding.slidingPane.isSlideable } view.doOnPreDraw { sharedViewModel.isSlidingPaneSlideable.value = binding.slidingPane.isSlideable }
// Account settings loading can take some time, so wait until it is ready before opening the pane // Account settings loading can take some time, so wait until it is ready before opening the pane
@ -76,15 +71,6 @@ class SettingsFragment : SecureFragment<SettingsFragmentBinding>() {
} }
} }
sharedViewModel.closeSlidingPaneEvent.observe(
viewLifecycleOwner
) {
it.consume {
if (!binding.slidingPane.closePane()) {
goBack()
}
}
}
sharedViewModel.layoutChangedEvent.observe( sharedViewModel.layoutChangedEvent.observe(
viewLifecycleOwner viewLifecycleOwner
) { ) {
@ -100,6 +86,12 @@ class SettingsFragment : SecureFragment<SettingsFragmentBinding>() {
} }
} }
} }
requireActivity().onBackPressedDispatcher.addCallback(
viewLifecycleOwner,
MasterFragment.SlidingPaneBackPressedCallback(binding.slidingPane)
)
binding.slidingPane.lockMode = SlidingPaneLayout.LOCK_MODE_LOCKED binding.slidingPane.lockMode = SlidingPaneLayout.LOCK_MODE_LOCKED
/* End of shared view model & sliding pane related */ /* End of shared view model & sliding pane related */
@ -107,8 +99,6 @@ class SettingsFragment : SecureFragment<SettingsFragmentBinding>() {
viewModel = ViewModelProvider(this)[SettingsViewModel::class.java] viewModel = ViewModelProvider(this)[SettingsViewModel::class.java]
binding.viewModel = viewModel binding.viewModel = viewModel
binding.setBackClickListener { goBack() }
sharedViewModel.accountRemoved.observe( sharedViewModel.accountRemoved.observe(
viewLifecycleOwner viewLifecycleOwner
) { ) {

View file

@ -24,9 +24,7 @@ import android.view.View
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import org.linphone.R import org.linphone.R
import org.linphone.activities.main.settings.viewmodels.TunnelSettingsViewModel import org.linphone.activities.main.settings.viewmodels.TunnelSettingsViewModel
import org.linphone.activities.navigateToEmptySetting
import org.linphone.databinding.SettingsTunnelFragmentBinding import org.linphone.databinding.SettingsTunnelFragmentBinding
import org.linphone.utils.Event
class TunnelSettingsFragment : GenericSettingFragment<SettingsTunnelFragmentBinding>() { class TunnelSettingsFragment : GenericSettingFragment<SettingsTunnelFragmentBinding>() {
private lateinit var viewModel: TunnelSettingsViewModel private lateinit var viewModel: TunnelSettingsViewModel
@ -41,15 +39,5 @@ class TunnelSettingsFragment : GenericSettingFragment<SettingsTunnelFragmentBind
viewModel = ViewModelProvider(this)[TunnelSettingsViewModel::class.java] viewModel = ViewModelProvider(this)[TunnelSettingsViewModel::class.java]
binding.viewModel = viewModel binding.viewModel = viewModel
binding.setBackClickListener { goBack() }
}
override fun goBack() {
if (sharedViewModel.isSlidingPaneSlideable.value == true) {
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
} else {
navigateToEmptySetting()
}
} }
} }

View file

@ -31,10 +31,8 @@ import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.R import org.linphone.R
import org.linphone.activities.main.settings.SettingListenerStub import org.linphone.activities.main.settings.SettingListenerStub
import org.linphone.activities.main.settings.viewmodels.VideoSettingsViewModel import org.linphone.activities.main.settings.viewmodels.VideoSettingsViewModel
import org.linphone.activities.navigateToEmptySetting
import org.linphone.core.tools.Log import org.linphone.core.tools.Log
import org.linphone.databinding.SettingsVideoFragmentBinding import org.linphone.databinding.SettingsVideoFragmentBinding
import org.linphone.utils.Event
import org.linphone.utils.PermissionHelper import org.linphone.utils.PermissionHelper
class VideoSettingsFragment : GenericSettingFragment<SettingsVideoFragmentBinding>() { class VideoSettingsFragment : GenericSettingFragment<SettingsVideoFragmentBinding>() {
@ -51,8 +49,6 @@ class VideoSettingsFragment : GenericSettingFragment<SettingsVideoFragmentBindin
viewModel = ViewModelProvider(this)[VideoSettingsViewModel::class.java] viewModel = ViewModelProvider(this)[VideoSettingsViewModel::class.java]
binding.viewModel = viewModel binding.viewModel = viewModel
binding.setBackClickListener { goBack() }
initVideoCodecsList() initVideoCodecsList()
if (!PermissionHelper.required(requireContext()).hasCameraPermission()) { if (!PermissionHelper.required(requireContext()).hasCameraPermission()) {
@ -103,12 +99,4 @@ class VideoSettingsFragment : GenericSettingFragment<SettingsVideoFragmentBindin
} }
viewModel.videoCodecs.value = list viewModel.videoCodecs.value = list
} }
override fun goBack() {
if (sharedViewModel.isSlidingPaneSlideable.value == true) {
sharedViewModel.closeSlidingPaneEvent.value = Event(true)
} else {
navigateToEmptySetting()
}
}
} }

View file

@ -36,7 +36,6 @@ import org.linphone.activities.*
import org.linphone.activities.assistant.AssistantActivity import org.linphone.activities.assistant.AssistantActivity
import org.linphone.activities.main.settings.SettingListenerStub import org.linphone.activities.main.settings.SettingListenerStub
import org.linphone.activities.main.sidemenu.viewmodels.SideMenuViewModel import org.linphone.activities.main.sidemenu.viewmodels.SideMenuViewModel
import org.linphone.activities.main.viewmodels.SharedMainViewModel
import org.linphone.activities.navigateToAbout import org.linphone.activities.navigateToAbout
import org.linphone.activities.navigateToAccountSettings import org.linphone.activities.navigateToAccountSettings
import org.linphone.activities.navigateToRecordings import org.linphone.activities.navigateToRecordings
@ -49,7 +48,6 @@ import org.linphone.utils.PermissionHelper
class SideMenuFragment : GenericFragment<SideMenuFragmentBinding>() { class SideMenuFragment : GenericFragment<SideMenuFragmentBinding>() {
private lateinit var viewModel: SideMenuViewModel private lateinit var viewModel: SideMenuViewModel
private lateinit var sharedViewModel: SharedMainViewModel
private var temporaryPicturePath: File? = null private var temporaryPicturePath: File? = null
override fun getLayoutId(): Int = R.layout.side_menu_fragment override fun getLayoutId(): Int = R.layout.side_menu_fragment
@ -62,10 +60,6 @@ class SideMenuFragment : GenericFragment<SideMenuFragmentBinding>() {
viewModel = ViewModelProvider(this)[SideMenuViewModel::class.java] viewModel = ViewModelProvider(this)[SideMenuViewModel::class.java]
binding.viewModel = viewModel binding.viewModel = viewModel
sharedViewModel = requireActivity().run {
ViewModelProvider(this)[SharedMainViewModel::class.java]
}
sharedViewModel.accountRemoved.observe( sharedViewModel.accountRemoved.observe(
viewLifecycleOwner viewLifecycleOwner
) { ) {
@ -128,8 +122,6 @@ class SideMenuFragment : GenericFragment<SideMenuFragmentBinding>() {
coreContext.notificationsManager.stopForegroundNotification() coreContext.notificationsManager.stopForegroundNotification()
coreContext.stop() coreContext.stop()
} }
onBackPressedCallback.isEnabled = false
} }
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {

View file

@ -31,7 +31,6 @@ class SharedMainViewModel : ViewModel() {
val layoutChangedEvent = MutableLiveData<Event<Boolean>>() val layoutChangedEvent = MutableLiveData<Event<Boolean>>()
var isSlidingPaneSlideable = MutableLiveData<Boolean>() var isSlidingPaneSlideable = MutableLiveData<Boolean>()
val closeSlidingPaneEvent = MutableLiveData<Event<Boolean>>()
/* Call history */ /* Call history */

View file

@ -69,10 +69,6 @@ class ConferenceAddParticipantsFragment : GenericFragment<VoipConferenceParticip
// Divider between items // Divider between items
binding.contactsList.addItemDecoration(AppUtils.getDividerDecoration(requireContext(), layoutManager)) binding.contactsList.addItemDecoration(AppUtils.getDividerDecoration(requireContext(), layoutManager))
binding.setBackClickListener {
goBack()
}
binding.setApplyClickListener { binding.setApplyClickListener {
viewModel.applyChanges() viewModel.applyChanges()
goBack() goBack()

View file

@ -75,11 +75,6 @@ class StatusFragment : GenericFragment<VoipStatusFragmentBinding>() {
} }
} }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
onBackPressedCallback.isEnabled = false
}
override fun onDestroy() { override fun onDestroy() {
if (zrtpDialog != null) { if (zrtpDialog != null) {
zrtpDialog?.dismiss() zrtpDialog?.dismiss()

View file

@ -3,9 +3,6 @@
<data> <data>
<import type="android.view.View"/> <import type="android.view.View"/>
<variable
name="backClickListener"
type="android.view.View.OnClickListener"/>
<variable <variable
name="privacyPolicyClickListener" name="privacyPolicyClickListener"
type="android.view.View.OnClickListener"/> type="android.view.View.OnClickListener"/>
@ -35,7 +32,6 @@
<ImageView <ImageView
android:id="@+id/back" android:id="@+id/back"
android:onClick="@{backClickListener}"
android:contentDescription="@string/content_description_go_back" android:contentDescription="@string/content_description_go_back"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"

View file

@ -3,9 +3,6 @@
<data> <data>
<import type="android.view.View"/> <import type="android.view.View"/>
<variable
name="backClickListener"
type="android.view.View.OnClickListener"/>
<variable <variable
name="privacyPolicyClickListener" name="privacyPolicyClickListener"
type="android.view.View.OnClickListener"/> type="android.view.View.OnClickListener"/>
@ -35,7 +32,6 @@
<ImageView <ImageView
android:id="@+id/back" android:id="@+id/back"
android:onClick="@{backClickListener}"
android:contentDescription="@string/content_description_go_back" android:contentDescription="@string/content_description_go_back"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"

View file

@ -3,9 +3,6 @@
<data> <data>
<import type="android.view.View"/> <import type="android.view.View"/>
<variable
name="backClickListener"
type="android.view.View.OnClickListener"/>
</data> </data>
<LinearLayout <LinearLayout
@ -18,7 +15,6 @@
<ImageView <ImageView
android:id="@+id/back" android:id="@+id/back"
android:onClick="@{backClickListener}"
android:contentDescription="@string/content_description_go_back" android:contentDescription="@string/content_description_go_back"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"

View file

@ -5,9 +5,6 @@
<data> <data>
<import type="android.view.View"/> <import type="android.view.View"/>
<variable
name="backClickListener"
type="android.view.View.OnClickListener"/>
<variable <variable
name="allContactsToggleClickListener" name="allContactsToggleClickListener"
type="android.view.View.OnClickListener"/> type="android.view.View.OnClickListener"/>
@ -36,7 +33,6 @@
<ImageView <ImageView
android:id="@+id/back" android:id="@+id/back"
android:contentDescription="@string/content_description_go_back" android:contentDescription="@string/content_description_go_back"
android:onClick="@{backClickListener}"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_gravity="left" android:layout_gravity="left"

View file

@ -5,9 +5,6 @@
<data> <data>
<import type="android.view.View"/> <import type="android.view.View"/>
<variable
name="backClickListener"
type="android.view.View.OnClickListener"/>
<variable <variable
name="titleClickListener" name="titleClickListener"
type="android.view.View.OnClickListener"/> type="android.view.View.OnClickListener"/>
@ -61,7 +58,6 @@
<ImageView <ImageView
android:id="@+id/back" android:id="@+id/back"
android:contentDescription="@string/content_description_go_back" android:contentDescription="@string/content_description_go_back"
android:onClick="@{backClickListener}"
android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}" android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"

View file

@ -4,9 +4,6 @@
<data> <data>
<import type="android.view.View"/> <import type="android.view.View"/>
<variable
name="backClickListener"
type="android.view.View.OnClickListener"/>
<variable <variable
name="viewModel" name="viewModel"
type="org.linphone.activities.main.chat.viewmodels.DevicesListViewModel" /> type="org.linphone.activities.main.chat.viewmodels.DevicesListViewModel" />
@ -25,7 +22,6 @@
<ImageView <ImageView
android:id="@+id/back" android:id="@+id/back"
android:onClick="@{backClickListener}"
android:contentDescription="@string/content_description_go_back" android:contentDescription="@string/content_description_go_back"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"

View file

@ -4,9 +4,6 @@
<data> <data>
<import type="android.view.View"/> <import type="android.view.View"/>
<variable
name="backClickListener"
type="android.view.View.OnClickListener"/>
<variable <variable
name="validClickListener" name="validClickListener"
type="android.view.View.OnClickListener"/> type="android.view.View.OnClickListener"/>
@ -28,7 +25,6 @@
<ImageView <ImageView
android:id="@+id/back" android:id="@+id/back"
android:onClick="@{backClickListener}"
android:contentDescription="@string/content_description_go_back" android:contentDescription="@string/content_description_go_back"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"

View file

@ -4,9 +4,6 @@
<data> <data>
<import type="android.view.View"/> <import type="android.view.View"/>
<variable
name="backClickListener"
type="android.view.View.OnClickListener"/>
<variable <variable
name="nextClickListener" name="nextClickListener"
type="android.view.View.OnClickListener"/> type="android.view.View.OnClickListener"/>
@ -40,7 +37,6 @@
<ImageView <ImageView
android:id="@+id/back" android:id="@+id/back"
android:onClick="@{backClickListener}"
android:contentDescription="@string/content_description_go_back" android:contentDescription="@string/content_description_go_back"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"

View file

@ -4,9 +4,6 @@
<data> <data>
<import type="android.view.View"/> <import type="android.view.View"/>
<variable
name="backClickListener"
type="android.view.View.OnClickListener"/>
<variable <variable
name="viewModel" name="viewModel"
type="org.linphone.activities.main.chat.viewmodels.ImdnViewModel" /> type="org.linphone.activities.main.chat.viewmodels.ImdnViewModel" />
@ -26,7 +23,6 @@
<ImageView <ImageView
android:id="@+id/back" android:id="@+id/back"
android:onClick="@{backClickListener}"
android:contentDescription="@string/content_description_go_back" android:contentDescription="@string/content_description_go_back"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"

View file

@ -4,9 +4,6 @@
<data> <data>
<import type="android.view.View" /> <import type="android.view.View" />
<variable
name="backClickListener"
type="android.view.View.OnClickListener" />
<variable <variable
name="nextClickListener" name="nextClickListener"
type="android.view.View.OnClickListener" /> type="android.view.View.OnClickListener" />
@ -35,7 +32,7 @@
android:orientation="horizontal"> android:orientation="horizontal">
<ImageView <ImageView
android:onClick="@{backClickListener}" android:id="@+id/back"
android:contentDescription="@string/content_description_go_back" android:contentDescription="@string/content_description_go_back"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"

View file

@ -4,9 +4,6 @@
<data> <data>
<import type="android.view.View"/> <import type="android.view.View"/>
<variable
name="backClickListener"
type="android.view.View.OnClickListener"/>
<variable <variable
name="nextClickListener" name="nextClickListener"
type="android.view.View.OnClickListener"/> type="android.view.View.OnClickListener"/>
@ -29,7 +26,7 @@
android:orientation="horizontal"> android:orientation="horizontal">
<ImageView <ImageView
android:onClick="@{backClickListener}" android:id="@+id/back"
android:contentDescription="@string/content_description_go_back" android:contentDescription="@string/content_description_go_back"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"

View file

@ -5,9 +5,6 @@
<data> <data>
<import type="android.view.View" /> <import type="android.view.View" />
<variable
name="backClickListener"
type="android.view.View.OnClickListener" />
<variable <variable
name="createConferenceClickListener" name="createConferenceClickListener"
type="android.view.View.OnClickListener" /> type="android.view.View.OnClickListener" />
@ -34,7 +31,7 @@
android:orientation="horizontal"> android:orientation="horizontal">
<ImageView <ImageView
android:onClick="@{backClickListener}" android:id="@+id/back"
android:contentDescription="@string/content_description_go_back" android:contentDescription="@string/content_description_go_back"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"

View file

@ -3,9 +3,6 @@
<data> <data>
<import type="android.view.View" /> <import type="android.view.View" />
<variable
name="backClickListener"
type="android.view.View.OnClickListener"/>
<variable <variable
name="newConferenceClickListener" name="newConferenceClickListener"
type="android.view.View.OnClickListener"/> type="android.view.View.OnClickListener"/>
@ -30,7 +27,6 @@
<ImageView <ImageView
android:id="@+id/back" android:id="@+id/back"
android:onClick="@{backClickListener}"
android:contentDescription="@string/content_description_go_back" android:contentDescription="@string/content_description_go_back"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"

View file

@ -5,9 +5,6 @@
<data> <data>
<import type="android.view.View" /> <import type="android.view.View" />
<variable
name="backClickListener"
type="android.view.View.OnClickListener"/>
<variable <variable
name="deleteClickListener" name="deleteClickListener"
type="android.view.View.OnClickListener"/> type="android.view.View.OnClickListener"/>
@ -35,7 +32,6 @@
<ImageView <ImageView
android:id="@+id/back" android:id="@+id/back"
android:onClick="@{backClickListener}"
android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}" android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}"
android:contentDescription="@string/content_description_go_back" android:contentDescription="@string/content_description_go_back"
android:layout_width="0dp" android:layout_width="0dp"

View file

@ -4,9 +4,6 @@
<data> <data>
<import type="android.view.View"/> <import type="android.view.View"/>
<variable
name="backClickListener"
type="android.view.View.OnClickListener"/>
<variable <variable
name="avatarClickListener" name="avatarClickListener"
type="android.view.View.OnClickListener"/> type="android.view.View.OnClickListener"/>
@ -30,9 +27,8 @@
android:orientation="horizontal"> android:orientation="horizontal">
<ImageView <ImageView
android:id="@+id/cancel" android:id="@+id/back"
android:contentDescription="@string/content_description_discard_changes" android:contentDescription="@string/content_description_discard_changes"
android:onClick="@{backClickListener}"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="0.2" android:layout_weight="0.2"

View file

@ -3,9 +3,6 @@
<data> <data>
<import type="android.view.View"/> <import type="android.view.View"/>
<variable
name="backClickListener"
type="android.view.View.OnClickListener"/>
<variable <variable
name="exportClickListener" name="exportClickListener"
type="android.view.View.OnClickListener"/> type="android.view.View.OnClickListener"/>
@ -28,7 +25,7 @@
android:orientation="horizontal"> android:orientation="horizontal">
<ImageView <ImageView
android:onClick="@{backClickListener}" android:id="@+id/back"
android:contentDescription="@string/content_description_go_back" android:contentDescription="@string/content_description_go_back"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"

View file

@ -3,9 +3,6 @@
<data> <data>
<import type="android.view.View"/> <import type="android.view.View"/>
<variable
name="backClickListener"
type="android.view.View.OnClickListener"/>
<variable <variable
name="exportClickListener" name="exportClickListener"
type="android.view.View.OnClickListener"/> type="android.view.View.OnClickListener"/>
@ -20,7 +17,7 @@
android:orientation="horizontal"> android:orientation="horizontal">
<ImageView <ImageView
android:onClick="@{backClickListener}" android:id="@+id/back"
android:contentDescription="@string/content_description_go_back" android:contentDescription="@string/content_description_go_back"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"

View file

@ -6,10 +6,6 @@
<import type="android.view.View" /> <import type="android.view.View" />
<variable
name="backClickListener"
type="android.view.View.OnClickListener" />
<variable <variable
name="newContactClickListener" name="newContactClickListener"
type="android.view.View.OnClickListener" /> type="android.view.View.OnClickListener" />
@ -45,7 +41,6 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="0.2" android:layout_weight="0.2"
android:contentDescription="@string/content_description_go_back" android:contentDescription="@string/content_description_go_back"
android:onClick="@{backClickListener}"
android:padding="18dp" android:padding="18dp"
android:src="@drawable/back" android:src="@drawable/back"
android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}" /> android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}" />

View file

@ -5,9 +5,6 @@
<data> <data>
<import type="android.view.View"/> <import type="android.view.View"/>
<variable
name="backClickListener"
type="android.view.View.OnClickListener"/>
<variable <variable
name="newContactClickListener" name="newContactClickListener"
type="android.view.View.OnClickListener"/> type="android.view.View.OnClickListener"/>
@ -35,7 +32,6 @@
<ImageView <ImageView
android:id="@+id/back" android:id="@+id/back"
android:onClick="@{backClickListener}"
android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}" android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}"
android:contentDescription="@string/content_description_go_back" android:contentDescription="@string/content_description_go_back"
android:layout_width="0dp" android:layout_width="0dp"

View file

@ -4,9 +4,6 @@
<data> <data>
<import type="android.view.View"/> <import type="android.view.View"/>
<variable
name="backClickListener"
type="android.view.View.OnClickListener"/>
<variable <variable
name="editClickListener" name="editClickListener"
type="android.view.View.OnClickListener"/> type="android.view.View.OnClickListener"/>
@ -33,7 +30,6 @@
<ImageView <ImageView
android:id="@+id/back" android:id="@+id/back"
android:onClick="@{backClickListener}"
android:contentDescription="@string/content_description_go_back" android:contentDescription="@string/content_description_go_back"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"

View file

@ -6,9 +6,6 @@
<data> <data>
<import type="android.view.View"/> <import type="android.view.View"/>
<import type="android.text.InputType"/> <import type="android.text.InputType"/>
<variable
name="backClickListener"
type="android.view.View.OnClickListener"/>
<variable <variable
name="viewModel" name="viewModel"
type="org.linphone.activities.main.settings.viewmodels.AccountSettingsViewModel"/> type="org.linphone.activities.main.settings.viewmodels.AccountSettingsViewModel"/>
@ -31,7 +28,6 @@
<ImageView <ImageView
android:id="@+id/back" android:id="@+id/back"
android:onClick="@{backClickListener}"
android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}" android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}"
android:contentDescription="@string/content_description_go_back" android:contentDescription="@string/content_description_go_back"
android:layout_width="0dp" android:layout_width="0dp"

View file

@ -6,9 +6,6 @@
<data> <data>
<import type="android.view.View"/> <import type="android.view.View"/>
<import type="android.text.InputType"/> <import type="android.text.InputType"/>
<variable
name="backClickListener"
type="android.view.View.OnClickListener"/>
<variable <variable
name="viewModel" name="viewModel"
type="org.linphone.activities.main.settings.viewmodels.AdvancedSettingsViewModel"/> type="org.linphone.activities.main.settings.viewmodels.AdvancedSettingsViewModel"/>
@ -31,7 +28,6 @@
<ImageView <ImageView
android:id="@+id/back" android:id="@+id/back"
android:onClick="@{backClickListener}"
android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}" android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}"
android:contentDescription="@string/content_description_go_back" android:contentDescription="@string/content_description_go_back"
android:layout_width="0dp" android:layout_width="0dp"

View file

@ -5,9 +5,6 @@
<data> <data>
<import type="android.view.View"/> <import type="android.view.View"/>
<import type="android.text.InputType"/> <import type="android.text.InputType"/>
<variable
name="backClickListener"
type="android.view.View.OnClickListener"/>
<variable <variable
name="viewModel" name="viewModel"
type="org.linphone.activities.main.settings.viewmodels.AudioSettingsViewModel"/> type="org.linphone.activities.main.settings.viewmodels.AudioSettingsViewModel"/>
@ -30,7 +27,6 @@
<ImageView <ImageView
android:id="@+id/back" android:id="@+id/back"
android:onClick="@{backClickListener}"
android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}" android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}"
android:contentDescription="@string/content_description_go_back" android:contentDescription="@string/content_description_go_back"
android:layout_width="0dp" android:layout_width="0dp"

View file

@ -5,9 +5,6 @@
<data> <data>
<import type="android.view.View"/> <import type="android.view.View"/>
<import type="android.text.InputType"/> <import type="android.text.InputType"/>
<variable
name="backClickListener"
type="android.view.View.OnClickListener"/>
<variable <variable
name="viewModel" name="viewModel"
type="org.linphone.activities.main.settings.viewmodels.CallSettingsViewModel"/> type="org.linphone.activities.main.settings.viewmodels.CallSettingsViewModel"/>
@ -30,7 +27,6 @@
<ImageView <ImageView
android:id="@+id/back" android:id="@+id/back"
android:onClick="@{backClickListener}"
android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}" android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}"
android:contentDescription="@string/content_description_go_back" android:contentDescription="@string/content_description_go_back"
android:layout_width="0dp" android:layout_width="0dp"

View file

@ -5,9 +5,6 @@
<data> <data>
<import type="android.view.View"/> <import type="android.view.View"/>
<import type="android.text.InputType"/> <import type="android.text.InputType"/>
<variable
name="backClickListener"
type="android.view.View.OnClickListener"/>
<variable <variable
name="viewModel" name="viewModel"
type="org.linphone.activities.main.settings.viewmodels.ChatSettingsViewModel"/> type="org.linphone.activities.main.settings.viewmodels.ChatSettingsViewModel"/>
@ -30,7 +27,6 @@
<ImageView <ImageView
android:id="@+id/back" android:id="@+id/back"
android:onClick="@{backClickListener}"
android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}" android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}"
android:contentDescription="@string/content_description_go_back" android:contentDescription="@string/content_description_go_back"
android:layout_width="0dp" android:layout_width="0dp"

View file

@ -5,9 +5,6 @@
<data> <data>
<import type="android.view.View"/> <import type="android.view.View"/>
<import type="android.text.InputType"/> <import type="android.text.InputType"/>
<variable
name="backClickListener"
type="android.view.View.OnClickListener"/>
<variable <variable
name="viewModel" name="viewModel"
type="org.linphone.activities.main.settings.viewmodels.ConferencesSettingsViewModel"/> type="org.linphone.activities.main.settings.viewmodels.ConferencesSettingsViewModel"/>
@ -30,7 +27,6 @@
<ImageView <ImageView
android:id="@+id/back" android:id="@+id/back"
android:onClick="@{backClickListener}"
android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}" android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}"
android:contentDescription="@string/content_description_go_back" android:contentDescription="@string/content_description_go_back"
android:layout_width="0dp" android:layout_width="0dp"

View file

@ -4,9 +4,6 @@
<data> <data>
<import type="android.view.View"/> <import type="android.view.View"/>
<variable
name="backClickListener"
type="android.view.View.OnClickListener"/>
<variable <variable
name="viewModel" name="viewModel"
type="org.linphone.activities.main.settings.viewmodels.ContactsSettingsViewModel"/> type="org.linphone.activities.main.settings.viewmodels.ContactsSettingsViewModel"/>
@ -29,7 +26,6 @@
<ImageView <ImageView
android:id="@+id/back" android:id="@+id/back"
android:onClick="@{backClickListener}"
android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}" android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}"
android:contentDescription="@string/content_description_go_back" android:contentDescription="@string/content_description_go_back"
android:layout_width="0dp" android:layout_width="0dp"

View file

@ -6,9 +6,6 @@
<data> <data>
<import type="android.view.View"/> <import type="android.view.View"/>
<import type="android.text.InputType"/> <import type="android.text.InputType"/>
<variable
name="backClickListener"
type="android.view.View.OnClickListener"/>
<variable <variable
name="viewModel" name="viewModel"
type="org.linphone.activities.main.settings.viewmodels.SettingsViewModel" /> type="org.linphone.activities.main.settings.viewmodels.SettingsViewModel" />
@ -35,7 +32,6 @@
<ImageView <ImageView
android:id="@+id/back" android:id="@+id/back"
android:onClick="@{backClickListener}"
android:contentDescription="@string/content_description_go_back" android:contentDescription="@string/content_description_go_back"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"

View file

@ -5,9 +5,6 @@
<data> <data>
<import type="android.view.View"/> <import type="android.view.View"/>
<import type="android.text.InputType"/> <import type="android.text.InputType"/>
<variable
name="backClickListener"
type="android.view.View.OnClickListener"/>
<variable <variable
name="viewModel" name="viewModel"
type="org.linphone.activities.main.settings.viewmodels.LdapSettingsViewModel"/> type="org.linphone.activities.main.settings.viewmodels.LdapSettingsViewModel"/>
@ -30,7 +27,6 @@
<ImageView <ImageView
android:id="@+id/back" android:id="@+id/back"
android:onClick="@{backClickListener}"
android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}" android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}"
android:contentDescription="@string/content_description_go_back" android:contentDescription="@string/content_description_go_back"
android:layout_width="0dp" android:layout_width="0dp"

View file

@ -5,9 +5,6 @@
<data> <data>
<import type="android.view.View"/> <import type="android.view.View"/>
<import type="android.text.InputType"/> <import type="android.text.InputType"/>
<variable
name="backClickListener"
type="android.view.View.OnClickListener"/>
<variable <variable
name="viewModel" name="viewModel"
type="org.linphone.activities.main.settings.viewmodels.NetworkSettingsViewModel"/> type="org.linphone.activities.main.settings.viewmodels.NetworkSettingsViewModel"/>
@ -30,7 +27,6 @@
<ImageView <ImageView
android:id="@+id/back" android:id="@+id/back"
android:onClick="@{backClickListener}"
android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}" android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}"
android:contentDescription="@string/content_description_go_back" android:contentDescription="@string/content_description_go_back"
android:layout_width="0dp" android:layout_width="0dp"

View file

@ -5,9 +5,6 @@
<data> <data>
<import type="android.view.View"/> <import type="android.view.View"/>
<import type="android.text.InputType"/> <import type="android.text.InputType"/>
<variable
name="backClickListener"
type="android.view.View.OnClickListener"/>
<variable <variable
name="viewModel" name="viewModel"
type="org.linphone.activities.main.settings.viewmodels.TunnelSettingsViewModel"/> type="org.linphone.activities.main.settings.viewmodels.TunnelSettingsViewModel"/>
@ -30,7 +27,6 @@
<ImageView <ImageView
android:id="@+id/back" android:id="@+id/back"
android:onClick="@{backClickListener}"
android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}" android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}"
android:contentDescription="@string/content_description_go_back" android:contentDescription="@string/content_description_go_back"
android:layout_width="0dp" android:layout_width="0dp"

View file

@ -5,9 +5,6 @@
<data> <data>
<import type="android.view.View"/> <import type="android.view.View"/>
<import type="android.text.InputType"/> <import type="android.text.InputType"/>
<variable
name="backClickListener"
type="android.view.View.OnClickListener"/>
<variable <variable
name="viewModel" name="viewModel"
type="org.linphone.activities.main.settings.viewmodels.VideoSettingsViewModel"/> type="org.linphone.activities.main.settings.viewmodels.VideoSettingsViewModel"/>
@ -30,7 +27,6 @@
<ImageView <ImageView
android:id="@+id/back" android:id="@+id/back"
android:onClick="@{backClickListener}"
android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}" android:visibility="@{sharedMainViewModel.isSlidingPaneSlideable ? View.VISIBLE : View.GONE}"
android:contentDescription="@string/content_description_go_back" android:contentDescription="@string/content_description_go_back"
android:layout_width="0dp" android:layout_width="0dp"

View file

@ -4,9 +4,6 @@
<data> <data>
<import type="android.view.View"/> <import type="android.view.View"/>
<variable
name="backClickListener"
type="android.view.View.OnClickListener"/>
<variable <variable
name="applyClickListener" name="applyClickListener"
type="android.view.View.OnClickListener"/> type="android.view.View.OnClickListener"/>
@ -29,7 +26,7 @@
android:orientation="horizontal"> android:orientation="horizontal">
<ImageView <ImageView
android:onClick="@{backClickListener}" android:id="@+id/back"
android:contentDescription="@string/content_description_go_back" android:contentDescription="@string/content_description_go_back"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"

View file

@ -2,6 +2,7 @@
<navigation xmlns:android="http://schemas.android.com/apk/res/android" <navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/main_nav_graph_xml"
app:startDestination="@id/dialerFragment"> app:startDestination="@id/dialerFragment">
<fragment <fragment