mirror of
https://gitlab.linphone.org/BC/public/linphone-android.git
synced 2026-01-17 11:28:06 +00:00
Refactored code a bit to make it simplier
This commit is contained in:
parent
fbb59cbc2a
commit
1578e76700
13 changed files with 121 additions and 121 deletions
|
|
@ -38,13 +38,13 @@ import org.linphone.databinding.ChatListFragmentBinding
|
|||
import org.linphone.ui.GenericActivity
|
||||
import org.linphone.ui.main.chat.adapter.ConversationsListAdapter
|
||||
import org.linphone.ui.main.chat.viewmodel.ConversationsListViewModel
|
||||
import org.linphone.ui.main.fragment.AbstractTopBarFragment
|
||||
import org.linphone.ui.main.fragment.AbstractMainFragment
|
||||
import org.linphone.ui.main.history.fragment.HistoryMenuDialogFragment
|
||||
import org.linphone.utils.AppUtils
|
||||
import org.linphone.utils.Event
|
||||
|
||||
@UiThread
|
||||
class ConversationsListFragment : AbstractTopBarFragment() {
|
||||
class ConversationsListFragment : AbstractMainFragment() {
|
||||
companion object {
|
||||
private const val TAG = "[Conversations List Fragment]"
|
||||
}
|
||||
|
|
@ -279,20 +279,17 @@ class ConversationsListFragment : AbstractTopBarFragment() {
|
|||
}
|
||||
}
|
||||
|
||||
// TopBarFragment related
|
||||
// AbstractMainFragment related
|
||||
|
||||
setViewModelAndTitle(
|
||||
listViewModel.title.value = getString(R.string.bottom_navigation_conversations_label)
|
||||
setViewModel(listViewModel)
|
||||
initViews(
|
||||
binding.slidingPaneLayout,
|
||||
binding.topBar.search,
|
||||
listViewModel,
|
||||
getString(R.string.bottom_navigation_conversations_label)
|
||||
binding.bottomNavBar.root,
|
||||
R.id.conversationsListFragment
|
||||
)
|
||||
|
||||
initBottomNavBar(binding.bottomNavBar.root)
|
||||
|
||||
initSlidingPane(binding.slidingPaneLayout)
|
||||
|
||||
initNavigation(R.id.conversationsListFragment)
|
||||
|
||||
// Handle intent params if any
|
||||
|
||||
val args = arguments
|
||||
|
|
|
|||
|
|
@ -33,12 +33,12 @@ import org.linphone.core.CoreListenerStub
|
|||
import org.linphone.core.tools.Log
|
||||
import org.linphone.ui.main.chat.model.ConversationModel
|
||||
import org.linphone.ui.main.model.isInSecureMode
|
||||
import org.linphone.ui.main.viewmodel.AbstractTopBarViewModel
|
||||
import org.linphone.ui.main.viewmodel.AbstractMainViewModel
|
||||
import org.linphone.utils.AppUtils
|
||||
import org.linphone.utils.Event
|
||||
import org.linphone.utils.LinphoneUtils
|
||||
|
||||
class ConversationsListViewModel @UiThread constructor() : AbstractTopBarViewModel() {
|
||||
class ConversationsListViewModel @UiThread constructor() : AbstractMainViewModel() {
|
||||
companion object {
|
||||
private const val TAG = "[Conversations List ViewModel]"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -45,11 +45,11 @@ import org.linphone.databinding.ContactsListFilterPopupMenuBinding
|
|||
import org.linphone.databinding.ContactsListFragmentBinding
|
||||
import org.linphone.ui.main.contacts.adapter.ContactsListAdapter
|
||||
import org.linphone.ui.main.contacts.viewmodel.ContactsListViewModel
|
||||
import org.linphone.ui.main.fragment.AbstractTopBarFragment
|
||||
import org.linphone.ui.main.fragment.AbstractMainFragment
|
||||
import org.linphone.utils.Event
|
||||
|
||||
@UiThread
|
||||
class ContactsListFragment : AbstractTopBarFragment() {
|
||||
class ContactsListFragment : AbstractMainFragment() {
|
||||
companion object {
|
||||
private const val TAG = "[Contacts List Fragment]"
|
||||
}
|
||||
|
|
@ -181,19 +181,16 @@ class ContactsListFragment : AbstractTopBarFragment() {
|
|||
}
|
||||
}
|
||||
|
||||
// TopBarFragment related
|
||||
// AbstractMainFragment related
|
||||
|
||||
setViewModelAndTitle(
|
||||
listViewModel.title.value = getString(R.string.bottom_navigation_contacts_label)
|
||||
setViewModel(listViewModel)
|
||||
initViews(
|
||||
binding.slidingPaneLayout,
|
||||
binding.topBar.search,
|
||||
listViewModel,
|
||||
getString(R.string.bottom_navigation_contacts_label)
|
||||
binding.bottomNavBar.root,
|
||||
R.id.contactsListFragment
|
||||
)
|
||||
|
||||
initBottomNavBar(binding.bottomNavBar.root)
|
||||
|
||||
initSlidingPane(binding.slidingPaneLayout)
|
||||
|
||||
initNavigation(R.id.contactsListFragment)
|
||||
}
|
||||
|
||||
private fun configureAdapter(adapter: ContactsListAdapter) {
|
||||
|
|
|
|||
|
|
@ -38,11 +38,11 @@ import org.linphone.core.SearchResult
|
|||
import org.linphone.core.tools.Log
|
||||
import org.linphone.ui.main.contacts.model.ContactAvatarModel
|
||||
import org.linphone.ui.main.model.isInSecureMode
|
||||
import org.linphone.ui.main.viewmodel.AbstractTopBarViewModel
|
||||
import org.linphone.ui.main.viewmodel.AbstractMainViewModel
|
||||
import org.linphone.utils.Event
|
||||
import org.linphone.utils.FileUtils
|
||||
|
||||
class ContactsListViewModel @UiThread constructor() : AbstractTopBarViewModel() {
|
||||
class ContactsListViewModel @UiThread constructor() : AbstractMainViewModel() {
|
||||
companion object {
|
||||
private const val TAG = "[Contacts List ViewModel]"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,77 +35,26 @@ import org.linphone.ui.main.chat.fragment.ConversationsListFragmentDirections
|
|||
import org.linphone.ui.main.contacts.fragment.ContactsListFragmentDirections
|
||||
import org.linphone.ui.main.history.fragment.HistoryListFragmentDirections
|
||||
import org.linphone.ui.main.meetings.fragment.MeetingsListFragmentDirections
|
||||
import org.linphone.ui.main.viewmodel.AbstractTopBarViewModel
|
||||
import org.linphone.ui.main.viewmodel.AbstractMainViewModel
|
||||
import org.linphone.utils.SlidingPaneBackPressedCallback
|
||||
import org.linphone.utils.hideKeyboard
|
||||
import org.linphone.utils.setKeyboardInsetListener
|
||||
import org.linphone.utils.showKeyboard
|
||||
|
||||
@UiThread
|
||||
abstract class AbstractTopBarFragment : GenericFragment() {
|
||||
abstract class AbstractMainFragment : GenericFragment() {
|
||||
companion object {
|
||||
private const val TAG = "[Abstract TobBar Fragment]"
|
||||
private const val TAG = "[Abstract Main Fragment]"
|
||||
}
|
||||
|
||||
private var currentFragmentId: Int = 0
|
||||
|
||||
private lateinit var viewModel: AbstractMainViewModel
|
||||
|
||||
abstract fun onDefaultAccountChanged()
|
||||
|
||||
fun initSlidingPane(slidingPane: SlidingPaneLayout) {
|
||||
val slidingPaneBackPressedCallback = SlidingPaneBackPressedCallback(slidingPane)
|
||||
requireActivity().onBackPressedDispatcher.addCallback(
|
||||
viewLifecycleOwner,
|
||||
slidingPaneBackPressedCallback
|
||||
)
|
||||
|
||||
view?.doOnPreDraw {
|
||||
slidingPane.lockMode = SlidingPaneLayout.LOCK_MODE_LOCKED
|
||||
val slideable = slidingPane.isSlideable
|
||||
sharedViewModel.isSlidingPaneSlideable.value = slideable
|
||||
slidingPaneBackPressedCallback.isEnabled = slideable && slidingPane.isOpen
|
||||
Log.d("$TAG Sliding Pane is ${if (slideable) "slideable" else "flat"}")
|
||||
}
|
||||
|
||||
sharedViewModel.closeSlidingPaneEvent.observe(
|
||||
viewLifecycleOwner
|
||||
) {
|
||||
it.consume {
|
||||
if (slidingPane.isSlideable) {
|
||||
Log.d("$TAG Closing sliding pane")
|
||||
slidingPane.closePane()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sharedViewModel.openSlidingPaneEvent.observe(
|
||||
viewLifecycleOwner
|
||||
) {
|
||||
it.consume {
|
||||
if (!slidingPane.isOpen) {
|
||||
Log.d("$TAG Opening sliding pane")
|
||||
slidingPane.openPane()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun setViewModelAndTitle(
|
||||
searchBar: TextInputLayout,
|
||||
viewModel: AbstractTopBarViewModel,
|
||||
title: String
|
||||
) {
|
||||
viewModel.title.value = title
|
||||
|
||||
viewModel.focusSearchBarEvent.observe(viewLifecycleOwner) {
|
||||
it.consume { show ->
|
||||
if (show) {
|
||||
// To automatically open keyboard
|
||||
searchBar.showKeyboard()
|
||||
} else {
|
||||
searchBar.hideKeyboard()
|
||||
}
|
||||
}
|
||||
}
|
||||
fun setViewModel(abstractMainViewModel: AbstractMainViewModel) {
|
||||
viewModel = abstractMainViewModel
|
||||
|
||||
viewModel.openDrawerMenuEvent.observe(viewLifecycleOwner) {
|
||||
it.consume {
|
||||
|
|
@ -175,14 +124,77 @@ abstract class AbstractTopBarFragment : GenericFragment() {
|
|||
}
|
||||
}
|
||||
|
||||
fun initBottomNavBar(navBar: View) {
|
||||
fun initViews(
|
||||
slidingPane: SlidingPaneLayout,
|
||||
searchBar: TextInputLayout,
|
||||
navBar: View,
|
||||
@IdRes fragmentId: Int
|
||||
) {
|
||||
initSlidingPane(slidingPane)
|
||||
initSearchBar(searchBar)
|
||||
initBottomNavBar(navBar)
|
||||
initNavigation(fragmentId)
|
||||
}
|
||||
|
||||
private fun initSlidingPane(slidingPane: SlidingPaneLayout) {
|
||||
val slidingPaneBackPressedCallback = SlidingPaneBackPressedCallback(slidingPane)
|
||||
requireActivity().onBackPressedDispatcher.addCallback(
|
||||
viewLifecycleOwner,
|
||||
slidingPaneBackPressedCallback
|
||||
)
|
||||
|
||||
view?.doOnPreDraw {
|
||||
slidingPane.lockMode = SlidingPaneLayout.LOCK_MODE_LOCKED
|
||||
val slideable = slidingPane.isSlideable
|
||||
sharedViewModel.isSlidingPaneSlideable.value = slideable
|
||||
slidingPaneBackPressedCallback.isEnabled = slideable && slidingPane.isOpen
|
||||
Log.d("$TAG Sliding Pane is ${if (slideable) "slideable" else "flat"}")
|
||||
}
|
||||
|
||||
sharedViewModel.closeSlidingPaneEvent.observe(
|
||||
viewLifecycleOwner
|
||||
) {
|
||||
it.consume {
|
||||
if (slidingPane.isSlideable) {
|
||||
Log.d("$TAG Closing sliding pane")
|
||||
slidingPane.closePane()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sharedViewModel.openSlidingPaneEvent.observe(
|
||||
viewLifecycleOwner
|
||||
) {
|
||||
it.consume {
|
||||
if (!slidingPane.isOpen) {
|
||||
Log.d("$TAG Opening sliding pane")
|
||||
slidingPane.openPane()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun initSearchBar(searchBar: TextInputLayout) {
|
||||
viewModel.focusSearchBarEvent.observe(viewLifecycleOwner) {
|
||||
it.consume { show ->
|
||||
if (show) {
|
||||
// To automatically open keyboard
|
||||
searchBar.showKeyboard()
|
||||
} else {
|
||||
searchBar.hideKeyboard()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun initBottomNavBar(navBar: View) {
|
||||
view?.setKeyboardInsetListener { keyboardVisible ->
|
||||
val portraitOrientation = resources.configuration.orientation != Configuration.ORIENTATION_LANDSCAPE
|
||||
navBar.visibility = if (!portraitOrientation || !keyboardVisible) View.VISIBLE else View.GONE
|
||||
}
|
||||
}
|
||||
|
||||
fun initNavigation(@IdRes fragmentId: Int) {
|
||||
private fun initNavigation(@IdRes fragmentId: Int) {
|
||||
currentFragmentId = fragmentId
|
||||
|
||||
sharedViewModel.navigateToContactsEvent.observe(viewLifecycleOwner) {
|
||||
|
|
@ -43,7 +43,7 @@ import org.linphone.core.tools.Log
|
|||
import org.linphone.databinding.HistoryListFragmentBinding
|
||||
import org.linphone.databinding.HistoryListPopupMenuBinding
|
||||
import org.linphone.ui.GenericActivity
|
||||
import org.linphone.ui.main.fragment.AbstractTopBarFragment
|
||||
import org.linphone.ui.main.fragment.AbstractMainFragment
|
||||
import org.linphone.ui.main.history.adapter.HistoryListAdapter
|
||||
import org.linphone.ui.main.history.model.ConfirmationDialogModel
|
||||
import org.linphone.ui.main.history.viewmodel.HistoryListViewModel
|
||||
|
|
@ -51,7 +51,7 @@ import org.linphone.utils.DialogUtils
|
|||
import org.linphone.utils.Event
|
||||
|
||||
@UiThread
|
||||
class HistoryListFragment : AbstractTopBarFragment() {
|
||||
class HistoryListFragment : AbstractMainFragment() {
|
||||
companion object {
|
||||
private const val TAG = "[History List Fragment]"
|
||||
}
|
||||
|
|
@ -237,19 +237,16 @@ class HistoryListFragment : AbstractTopBarFragment() {
|
|||
}
|
||||
}
|
||||
|
||||
// TopBarFragment related
|
||||
// AbstractMainFragment related
|
||||
|
||||
setViewModelAndTitle(
|
||||
listViewModel.title.value = getString(R.string.bottom_navigation_calls_label)
|
||||
setViewModel(listViewModel)
|
||||
initViews(
|
||||
binding.slidingPaneLayout,
|
||||
binding.topBar.search,
|
||||
listViewModel,
|
||||
getString(R.string.bottom_navigation_calls_label)
|
||||
binding.bottomNavBar.root,
|
||||
R.id.historyListFragment
|
||||
)
|
||||
|
||||
initBottomNavBar(binding.bottomNavBar.root)
|
||||
|
||||
initSlidingPane(binding.slidingPaneLayout)
|
||||
|
||||
initNavigation(R.id.historyListFragment)
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
|
|
|
|||
|
|
@ -29,11 +29,11 @@ import org.linphone.core.Core
|
|||
import org.linphone.core.CoreListenerStub
|
||||
import org.linphone.core.tools.Log
|
||||
import org.linphone.ui.main.history.model.CallLogModel
|
||||
import org.linphone.ui.main.viewmodel.AbstractTopBarViewModel
|
||||
import org.linphone.ui.main.viewmodel.AbstractMainViewModel
|
||||
import org.linphone.utils.Event
|
||||
import org.linphone.utils.LinphoneUtils
|
||||
|
||||
class HistoryListViewModel @UiThread constructor() : AbstractTopBarViewModel() {
|
||||
class HistoryListViewModel @UiThread constructor() : AbstractMainViewModel() {
|
||||
companion object {
|
||||
private const val TAG = "[History List ViewModel]"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ import com.google.android.material.bottomsheet.BottomSheetDialogFragment
|
|||
import org.linphone.R
|
||||
import org.linphone.core.tools.Log
|
||||
import org.linphone.databinding.MeetingsListFragmentBinding
|
||||
import org.linphone.ui.main.fragment.AbstractTopBarFragment
|
||||
import org.linphone.ui.main.fragment.AbstractMainFragment
|
||||
import org.linphone.ui.main.meetings.adapter.MeetingsListAdapter
|
||||
import org.linphone.ui.main.meetings.viewmodel.MeetingsListViewModel
|
||||
import org.linphone.utils.AppUtils
|
||||
|
|
@ -43,7 +43,7 @@ import org.linphone.utils.Event
|
|||
import org.linphone.utils.RecyclerViewHeaderDecoration
|
||||
|
||||
@UiThread
|
||||
class MeetingsListFragment : AbstractTopBarFragment() {
|
||||
class MeetingsListFragment : AbstractMainFragment() {
|
||||
companion object {
|
||||
private const val TAG = "[Meetings List Fragment]"
|
||||
}
|
||||
|
|
@ -198,19 +198,16 @@ class MeetingsListFragment : AbstractTopBarFragment() {
|
|||
}
|
||||
}
|
||||
|
||||
// TopBarFragment related
|
||||
// AbstractMainFragment related
|
||||
|
||||
setViewModelAndTitle(
|
||||
listViewModel.title.value = getString(R.string.bottom_navigation_meetings_label)
|
||||
setViewModel(listViewModel)
|
||||
initViews(
|
||||
binding.slidingPaneLayout,
|
||||
binding.topBar.search,
|
||||
listViewModel,
|
||||
getString(R.string.bottom_navigation_meetings_label)
|
||||
binding.bottomNavBar.root,
|
||||
R.id.meetingsListFragment
|
||||
)
|
||||
|
||||
initBottomNavBar(binding.bottomNavBar.root)
|
||||
|
||||
initSlidingPane(binding.slidingPaneLayout)
|
||||
|
||||
initNavigation(R.id.meetingsListFragment)
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
|
|
|
|||
|
|
@ -29,9 +29,9 @@ import org.linphone.core.CoreListenerStub
|
|||
import org.linphone.core.tools.Log
|
||||
import org.linphone.ui.main.meetings.model.MeetingListItemModel
|
||||
import org.linphone.ui.main.meetings.model.MeetingModel
|
||||
import org.linphone.ui.main.viewmodel.AbstractTopBarViewModel
|
||||
import org.linphone.ui.main.viewmodel.AbstractMainViewModel
|
||||
|
||||
class MeetingsListViewModel @UiThread constructor() : AbstractTopBarViewModel() {
|
||||
class MeetingsListViewModel @UiThread constructor() : AbstractMainViewModel() {
|
||||
companion object {
|
||||
private const val TAG = "[Meetings List ViewModel]"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,9 +36,9 @@ import org.linphone.ui.main.model.AccountModel
|
|||
import org.linphone.utils.Event
|
||||
import org.linphone.utils.LinphoneUtils
|
||||
|
||||
open class AbstractTopBarViewModel @UiThread constructor() : ViewModel() {
|
||||
open class AbstractMainViewModel @UiThread constructor() : ViewModel() {
|
||||
companion object {
|
||||
private const val TAG = "[Top Bar ViewModel]"
|
||||
private const val TAG = "[Abstract Main ViewModel]"
|
||||
}
|
||||
|
||||
val title = MutableLiveData<String>()
|
||||
|
|
@ -8,7 +8,7 @@
|
|||
<import type="android.graphics.Typeface" />
|
||||
<variable
|
||||
name="viewModel"
|
||||
type="org.linphone.ui.main.viewmodel.AbstractTopBarViewModel" />
|
||||
type="org.linphone.ui.main.viewmodel.AbstractMainViewModel" />
|
||||
</data>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
<import type="android.graphics.Typeface" />
|
||||
<variable
|
||||
name="viewModel"
|
||||
type="org.linphone.ui.main.viewmodel.AbstractTopBarViewModel" />
|
||||
type="org.linphone.ui.main.viewmodel.AbstractMainViewModel" />
|
||||
</data>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
<import type="android.view.View" />
|
||||
<variable
|
||||
name="viewModel"
|
||||
type="org.linphone.ui.main.viewmodel.AbstractTopBarViewModel" />
|
||||
type="org.linphone.ui.main.viewmodel.AbstractMainViewModel" />
|
||||
</data>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue