mirror of
https://github.com/element-hq/element-android
synced 2024-10-26 20:57:20 +03:00
Create facility extension to observe ViewEvents
This commit is contained in:
parent
e81c804ed6
commit
da3e547d82
9 changed files with 64 additions and 92 deletions
|
@ -46,6 +46,7 @@ import im.vector.riotx.core.di.HasScreenInjector
|
||||||
import im.vector.riotx.core.di.ScreenComponent
|
import im.vector.riotx.core.di.ScreenComponent
|
||||||
import im.vector.riotx.core.error.ErrorFormatter
|
import im.vector.riotx.core.error.ErrorFormatter
|
||||||
import im.vector.riotx.features.navigation.Navigator
|
import im.vector.riotx.features.navigation.Navigator
|
||||||
|
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||||
import io.reactivex.disposables.CompositeDisposable
|
import io.reactivex.disposables.CompositeDisposable
|
||||||
import io.reactivex.disposables.Disposable
|
import io.reactivex.disposables.Disposable
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
|
@ -234,6 +235,21 @@ abstract class VectorBaseFragment : BaseMvRxFragment(), HasScreenInjector {
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ==========================================================================================
|
||||||
|
* ViewEvents
|
||||||
|
* ========================================================================================== */
|
||||||
|
|
||||||
|
protected fun <T : VectorViewEvents> VectorViewModel<*, *, T>.observeViewEvents(observer: (T) -> Unit) {
|
||||||
|
viewEvents
|
||||||
|
.observe()
|
||||||
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.subscribe {
|
||||||
|
dismissLoadingDialog()
|
||||||
|
observer(it)
|
||||||
|
}
|
||||||
|
.disposeOnDestroyView()
|
||||||
|
}
|
||||||
|
|
||||||
/* ==========================================================================================
|
/* ==========================================================================================
|
||||||
* MENU MANAGEMENT
|
* MENU MANAGEMENT
|
||||||
* ========================================================================================== */
|
* ========================================================================================== */
|
||||||
|
|
|
@ -307,15 +307,11 @@ class RoomDetailFragment @Inject constructor(
|
||||||
displayRoomDetailActionResult(it)
|
displayRoomDetailActionResult(it)
|
||||||
}
|
}
|
||||||
|
|
||||||
roomDetailViewModel.viewEvents
|
roomDetailViewModel.observeViewEvents {
|
||||||
.observe()
|
when (it) {
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
is RoomDetailViewEvents.Failure -> showErrorInSnackbar(it.throwable)
|
||||||
.subscribe {
|
}.exhaustive
|
||||||
when (it) {
|
}
|
||||||
is RoomDetailViewEvents.Failure -> showErrorInSnackbar(it.throwable)
|
|
||||||
}.exhaustive
|
|
||||||
}
|
|
||||||
.disposeOnDestroyView()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||||
|
|
|
@ -51,7 +51,6 @@ import im.vector.riotx.features.home.room.list.actions.RoomListQuickActionsShare
|
||||||
import im.vector.riotx.features.home.room.list.widget.FabMenuView
|
import im.vector.riotx.features.home.room.list.widget.FabMenuView
|
||||||
import im.vector.riotx.features.notifications.NotificationDrawerManager
|
import im.vector.riotx.features.notifications.NotificationDrawerManager
|
||||||
import im.vector.riotx.features.share.SharedData
|
import im.vector.riotx.features.share.SharedData
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
|
||||||
import kotlinx.android.parcel.Parcelize
|
import kotlinx.android.parcel.Parcelize
|
||||||
import kotlinx.android.synthetic.main.fragment_room_list.*
|
import kotlinx.android.synthetic.main.fragment_room_list.*
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
@ -103,18 +102,13 @@ class RoomListFragment @Inject constructor(
|
||||||
setupRecyclerView()
|
setupRecyclerView()
|
||||||
sharedActionViewModel = activityViewModelProvider.get(RoomListQuickActionsSharedActionViewModel::class.java)
|
sharedActionViewModel = activityViewModelProvider.get(RoomListQuickActionsSharedActionViewModel::class.java)
|
||||||
roomListViewModel.subscribe { renderState(it) }
|
roomListViewModel.subscribe { renderState(it) }
|
||||||
roomListViewModel.viewEvents
|
roomListViewModel.observeViewEvents {
|
||||||
.observe()
|
when (it) {
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
is RoomListViewEvents.Loading -> showLoading(it.message)
|
||||||
.subscribe {
|
is RoomListViewEvents.Failure -> showFailure(it.throwable)
|
||||||
dismissLoadingDialog()
|
is RoomListViewEvents.SelectRoom -> openSelectedRoom(it)
|
||||||
when (it) {
|
}.exhaustive
|
||||||
is RoomListViewEvents.Loading -> showLoading(it.message)
|
}
|
||||||
is RoomListViewEvents.Failure -> showFailure(it.throwable)
|
|
||||||
is RoomListViewEvents.SelectRoom -> openSelectedRoom(it)
|
|
||||||
}.exhaustive
|
|
||||||
}
|
|
||||||
.disposeOnDestroyView()
|
|
||||||
|
|
||||||
createChatFabMenu.listener = this
|
createChatFabMenu.listener = this
|
||||||
|
|
||||||
|
|
|
@ -27,9 +27,9 @@ import com.airbnb.mvrx.withState
|
||||||
import im.vector.matrix.android.api.failure.Failure
|
import im.vector.matrix.android.api.failure.Failure
|
||||||
import im.vector.matrix.android.api.failure.MatrixError
|
import im.vector.matrix.android.api.failure.MatrixError
|
||||||
import im.vector.riotx.R
|
import im.vector.riotx.R
|
||||||
|
import im.vector.riotx.core.extensions.exhaustive
|
||||||
import im.vector.riotx.core.platform.OnBackPressed
|
import im.vector.riotx.core.platform.OnBackPressed
|
||||||
import im.vector.riotx.core.platform.VectorBaseFragment
|
import im.vector.riotx.core.platform.VectorBaseFragment
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
|
||||||
import javax.net.ssl.HttpsURLConnection
|
import javax.net.ssl.HttpsURLConnection
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -59,13 +59,9 @@ abstract class AbstractLoginFragment : VectorBaseFragment(), OnBackPressed {
|
||||||
|
|
||||||
loginSharedActionViewModel = activityViewModelProvider.get(LoginSharedActionViewModel::class.java)
|
loginSharedActionViewModel = activityViewModelProvider.get(LoginSharedActionViewModel::class.java)
|
||||||
|
|
||||||
loginViewModel.viewEvents
|
loginViewModel.observeViewEvents {
|
||||||
.observe()
|
handleLoginViewEvents(it)
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
}
|
||||||
.subscribe {
|
|
||||||
handleLoginViewEvents(it)
|
|
||||||
}
|
|
||||||
.disposeOnDestroyView()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun handleLoginViewEvents(loginViewEvents: LoginViewEvents) {
|
private fun handleLoginViewEvents(loginViewEvents: LoginViewEvents) {
|
||||||
|
@ -74,7 +70,7 @@ abstract class AbstractLoginFragment : VectorBaseFragment(), OnBackPressed {
|
||||||
else ->
|
else ->
|
||||||
// This is handled by the Activity
|
// This is handled by the Activity
|
||||||
Unit
|
Unit
|
||||||
}
|
}.exhaustive
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun showFailure(throwable: Throwable) {
|
override fun showFailure(throwable: Throwable) {
|
||||||
|
|
|
@ -37,7 +37,6 @@ import im.vector.riotx.core.extensions.setTextOrHide
|
||||||
import im.vector.riotx.core.platform.StateView
|
import im.vector.riotx.core.platform.StateView
|
||||||
import im.vector.riotx.core.platform.VectorBaseFragment
|
import im.vector.riotx.core.platform.VectorBaseFragment
|
||||||
import im.vector.riotx.features.home.AvatarRenderer
|
import im.vector.riotx.features.home.AvatarRenderer
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
|
||||||
import kotlinx.android.parcel.Parcelize
|
import kotlinx.android.parcel.Parcelize
|
||||||
import kotlinx.android.synthetic.main.fragment_matrix_profile.*
|
import kotlinx.android.synthetic.main.fragment_matrix_profile.*
|
||||||
import kotlinx.android.synthetic.main.view_stub_room_member_profile_header.*
|
import kotlinx.android.synthetic.main.view_stub_room_member_profile_header.*
|
||||||
|
@ -80,18 +79,13 @@ class RoomMemberProfileFragment @Inject constructor(
|
||||||
appBarStateChangeListener = MatrixItemAppBarStateChangeListener(headerView, listOf(matrixProfileToolbarAvatarImageView,
|
appBarStateChangeListener = MatrixItemAppBarStateChangeListener(headerView, listOf(matrixProfileToolbarAvatarImageView,
|
||||||
matrixProfileToolbarTitleView))
|
matrixProfileToolbarTitleView))
|
||||||
matrixProfileAppBarLayout.addOnOffsetChangedListener(appBarStateChangeListener)
|
matrixProfileAppBarLayout.addOnOffsetChangedListener(appBarStateChangeListener)
|
||||||
viewModel.viewEvents
|
viewModel.observeViewEvents {
|
||||||
.observe()
|
when (it) {
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
is RoomMemberProfileViewEvents.Loading -> showLoading(it.message)
|
||||||
.subscribe {
|
is RoomMemberProfileViewEvents.Failure -> showFailure(it.throwable)
|
||||||
dismissLoadingDialog()
|
is RoomMemberProfileViewEvents.OnIgnoreActionSuccess -> Unit
|
||||||
when (it) {
|
}.exhaustive
|
||||||
is RoomMemberProfileViewEvents.Loading -> showLoading(it.message)
|
}
|
||||||
is RoomMemberProfileViewEvents.Failure -> showFailure(it.throwable)
|
|
||||||
is RoomMemberProfileViewEvents.OnIgnoreActionSuccess -> Unit
|
|
||||||
}.exhaustive
|
|
||||||
}
|
|
||||||
.disposeOnDestroyView()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroyView() {
|
override fun onDestroyView() {
|
||||||
|
|
|
@ -39,7 +39,6 @@ import im.vector.riotx.features.home.room.list.actions.RoomListActionsArgs
|
||||||
import im.vector.riotx.features.home.room.list.actions.RoomListQuickActionsBottomSheet
|
import im.vector.riotx.features.home.room.list.actions.RoomListQuickActionsBottomSheet
|
||||||
import im.vector.riotx.features.home.room.list.actions.RoomListQuickActionsSharedAction
|
import im.vector.riotx.features.home.room.list.actions.RoomListQuickActionsSharedAction
|
||||||
import im.vector.riotx.features.home.room.list.actions.RoomListQuickActionsSharedActionViewModel
|
import im.vector.riotx.features.home.room.list.actions.RoomListQuickActionsSharedActionViewModel
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
|
||||||
import kotlinx.android.parcel.Parcelize
|
import kotlinx.android.parcel.Parcelize
|
||||||
import kotlinx.android.synthetic.main.fragment_matrix_profile.*
|
import kotlinx.android.synthetic.main.fragment_matrix_profile.*
|
||||||
import kotlinx.android.synthetic.main.view_stub_room_profile_header.*
|
import kotlinx.android.synthetic.main.view_stub_room_profile_header.*
|
||||||
|
@ -79,18 +78,13 @@ class RoomProfileFragment @Inject constructor(
|
||||||
appBarStateChangeListener = MatrixItemAppBarStateChangeListener(headerView, listOf(matrixProfileToolbarAvatarImageView,
|
appBarStateChangeListener = MatrixItemAppBarStateChangeListener(headerView, listOf(matrixProfileToolbarAvatarImageView,
|
||||||
matrixProfileToolbarTitleView))
|
matrixProfileToolbarTitleView))
|
||||||
matrixProfileAppBarLayout.addOnOffsetChangedListener(appBarStateChangeListener)
|
matrixProfileAppBarLayout.addOnOffsetChangedListener(appBarStateChangeListener)
|
||||||
roomProfileViewModel.viewEvents
|
roomProfileViewModel.observeViewEvents {
|
||||||
.observe()
|
when (it) {
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
is RoomProfileViewEvents.Loading -> showLoading(it.message)
|
||||||
.subscribe {
|
is RoomProfileViewEvents.Failure -> showFailure(it.throwable)
|
||||||
dismissLoadingDialog()
|
is RoomProfileViewEvents.OnLeaveRoomSuccess -> onLeaveRoom()
|
||||||
when (it) {
|
}.exhaustive
|
||||||
is RoomProfileViewEvents.Loading -> showLoading(it.message)
|
}
|
||||||
is RoomProfileViewEvents.Failure -> showFailure(it.throwable)
|
|
||||||
is RoomProfileViewEvents.OnLeaveRoomSuccess -> onLeaveRoom()
|
|
||||||
}.exhaustive
|
|
||||||
}
|
|
||||||
.disposeOnDestroyView()
|
|
||||||
roomListQuickActionsSharedActionViewModel
|
roomListQuickActionsSharedActionViewModel
|
||||||
.observe()
|
.observe()
|
||||||
.subscribe { handleQuickActions(it) }
|
.subscribe { handleQuickActions(it) }
|
||||||
|
|
|
@ -31,7 +31,6 @@ import im.vector.riotx.core.extensions.exhaustive
|
||||||
import im.vector.riotx.core.platform.VectorBaseFragment
|
import im.vector.riotx.core.platform.VectorBaseFragment
|
||||||
import im.vector.riotx.features.home.AvatarRenderer
|
import im.vector.riotx.features.home.AvatarRenderer
|
||||||
import im.vector.riotx.features.roomprofile.RoomProfileArgs
|
import im.vector.riotx.features.roomprofile.RoomProfileArgs
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
|
||||||
import kotlinx.android.synthetic.main.fragment_room_setting_generic.*
|
import kotlinx.android.synthetic.main.fragment_room_setting_generic.*
|
||||||
import kotlinx.android.synthetic.main.merge_overlay_waiting_view.*
|
import kotlinx.android.synthetic.main.merge_overlay_waiting_view.*
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
@ -55,16 +54,11 @@ class RoomSettingsFragment @Inject constructor(
|
||||||
waiting_view_status_text.setText(R.string.please_wait)
|
waiting_view_status_text.setText(R.string.please_wait)
|
||||||
waiting_view_status_text.isVisible = true
|
waiting_view_status_text.isVisible = true
|
||||||
|
|
||||||
viewModel.viewEvents
|
viewModel.observeViewEvents {
|
||||||
.observe()
|
when (it) {
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
is RoomSettingsViewEvents.Failure -> showFailure(it.throwable)
|
||||||
.subscribe {
|
}.exhaustive
|
||||||
dismissLoadingDialog()
|
}
|
||||||
when (it) {
|
|
||||||
is RoomSettingsViewEvents.Failure -> showFailure(it.throwable)
|
|
||||||
}.exhaustive
|
|
||||||
}
|
|
||||||
.disposeOnDestroyView()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroyView() {
|
override fun onDestroyView() {
|
||||||
|
|
|
@ -36,7 +36,6 @@ import im.vector.riotx.core.extensions.observeEvent
|
||||||
import im.vector.riotx.core.platform.VectorBaseActivity
|
import im.vector.riotx.core.platform.VectorBaseActivity
|
||||||
import im.vector.riotx.core.platform.VectorBaseFragment
|
import im.vector.riotx.core.platform.VectorBaseFragment
|
||||||
import im.vector.riotx.core.utils.toast
|
import im.vector.riotx.core.utils.toast
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
|
||||||
import kotlinx.android.synthetic.main.fragment_generic_recycler.*
|
import kotlinx.android.synthetic.main.fragment_generic_recycler.*
|
||||||
import kotlinx.android.synthetic.main.merge_overlay_waiting_view.*
|
import kotlinx.android.synthetic.main.merge_overlay_waiting_view.*
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
@ -63,17 +62,12 @@ class VectorSettingsDevicesFragment @Inject constructor(
|
||||||
waiting_view_status_text.isVisible = true
|
waiting_view_status_text.isVisible = true
|
||||||
devicesController.callback = this
|
devicesController.callback = this
|
||||||
recyclerView.configureWith(devicesController, showDivider = true)
|
recyclerView.configureWith(devicesController, showDivider = true)
|
||||||
viewModel.viewEvents
|
viewModel.observeViewEvents {
|
||||||
.observe()
|
when (it) {
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
is DevicesViewEvents.Loading -> showLoading(it.message)
|
||||||
.subscribe {
|
is DevicesViewEvents.Failure -> showFailure(it.throwable)
|
||||||
dismissLoadingDialog()
|
}.exhaustive
|
||||||
when (it) {
|
}
|
||||||
is DevicesViewEvents.Loading -> showLoading(it.message)
|
|
||||||
is DevicesViewEvents.Failure -> showFailure(it.throwable)
|
|
||||||
}.exhaustive
|
|
||||||
}
|
|
||||||
.disposeOnDestroyView()
|
|
||||||
viewModel.requestPasswordLiveData.observeEvent(this) {
|
viewModel.requestPasswordLiveData.observeEvent(this) {
|
||||||
maybeShowDeleteDeviceWithPasswordDialog()
|
maybeShowDeleteDeviceWithPasswordDialog()
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,6 @@ import im.vector.riotx.core.extensions.configureWith
|
||||||
import im.vector.riotx.core.extensions.exhaustive
|
import im.vector.riotx.core.extensions.exhaustive
|
||||||
import im.vector.riotx.core.platform.VectorBaseActivity
|
import im.vector.riotx.core.platform.VectorBaseActivity
|
||||||
import im.vector.riotx.core.platform.VectorBaseFragment
|
import im.vector.riotx.core.platform.VectorBaseFragment
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
|
||||||
import kotlinx.android.synthetic.main.fragment_generic_recycler.*
|
import kotlinx.android.synthetic.main.fragment_generic_recycler.*
|
||||||
import kotlinx.android.synthetic.main.merge_overlay_waiting_view.*
|
import kotlinx.android.synthetic.main.merge_overlay_waiting_view.*
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
@ -51,17 +50,12 @@ class VectorSettingsIgnoredUsersFragment @Inject constructor(
|
||||||
waiting_view_status_text.isVisible = true
|
waiting_view_status_text.isVisible = true
|
||||||
ignoredUsersController.callback = this
|
ignoredUsersController.callback = this
|
||||||
recyclerView.configureWith(ignoredUsersController)
|
recyclerView.configureWith(ignoredUsersController)
|
||||||
viewModel.viewEvents
|
viewModel.observeViewEvents {
|
||||||
.observe()
|
when (it) {
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
is IgnoredUsersViewEvents.Loading -> showLoading(it.message)
|
||||||
.subscribe {
|
is IgnoredUsersViewEvents.Failure -> showFailure(it.throwable)
|
||||||
dismissLoadingDialog()
|
}.exhaustive
|
||||||
when (it) {
|
}
|
||||||
is IgnoredUsersViewEvents.Loading -> showLoading(it.message)
|
|
||||||
is IgnoredUsersViewEvents.Failure -> showFailure(it.throwable)
|
|
||||||
}.exhaustive
|
|
||||||
}
|
|
||||||
.disposeOnDestroyView()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroyView() {
|
override fun onDestroyView() {
|
||||||
|
|
Loading…
Reference in a new issue