mirror of
https://github.com/SchildiChat/SchildiChat-android.git
synced 2025-03-18 20:29:10 +03:00
Open poll detail screen.
This commit is contained in:
parent
c9dc570f83
commit
b86f6a41bd
10 changed files with 80 additions and 10 deletions
|
@ -106,7 +106,7 @@ class RoomProfileActivity :
|
|||
RoomProfileSharedAction.OpenRoomUploads -> openRoomUploads()
|
||||
RoomProfileSharedAction.OpenBannedRoomMembers -> openBannedRoomMembers()
|
||||
RoomProfileSharedAction.OpenRoomNotificationSettings -> openRoomNotificationSettings()
|
||||
is RoomProfileSharedAction.OpenPollDetails -> handleOpenPollDetails()
|
||||
is RoomProfileSharedAction.OpenPollDetails -> handleOpenPollDetails(sharedAction)
|
||||
}
|
||||
}
|
||||
.launchIn(lifecycleScope)
|
||||
|
@ -132,8 +132,12 @@ class RoomProfileActivity :
|
|||
finish()
|
||||
}
|
||||
|
||||
private fun handleOpenPollDetails() {
|
||||
addFragmentToBackstack(views.simpleFragmentContainer, RoomPollDetailFragment::class.java, roomProfileArgs)
|
||||
private fun handleOpenPollDetails(sharedAction: RoomProfileSharedAction.OpenPollDetails) {
|
||||
addFragmentToBackstack(
|
||||
views.simpleFragmentContainer,
|
||||
RoomPollDetailFragment::class.java,
|
||||
roomProfileArgs.copy(selectedPollId = sharedAction.pollId)
|
||||
)
|
||||
}
|
||||
|
||||
private fun openRoomPolls() {
|
||||
|
|
|
@ -64,7 +64,8 @@ import javax.inject.Inject
|
|||
|
||||
@Parcelize
|
||||
data class RoomProfileArgs(
|
||||
val roomId: String
|
||||
val roomId: String,
|
||||
val selectedPollId: String? = null,
|
||||
) : Parcelable
|
||||
|
||||
@AndroidEntryPoint
|
||||
|
|
|
@ -26,7 +26,7 @@ sealed class RoomProfileSharedAction : VectorSharedAction {
|
|||
object OpenRoomAliasesSettings : RoomProfileSharedAction()
|
||||
object OpenRoomPermissionsSettings : RoomProfileSharedAction()
|
||||
object OpenRoomPolls : RoomProfileSharedAction()
|
||||
object OpenPollDetails : RoomProfileSharedAction()
|
||||
data class OpenPollDetails(val pollId: String) : RoomProfileSharedAction()
|
||||
object OpenRoomUploads : RoomProfileSharedAction()
|
||||
object OpenRoomMembers : RoomProfileSharedAction()
|
||||
object OpenBannedRoomMembers : RoomProfileSharedAction()
|
||||
|
|
|
@ -20,5 +20,6 @@ import im.vector.app.core.platform.VectorViewModelAction
|
|||
|
||||
sealed interface RoomPollsAction : VectorViewModelAction {
|
||||
object LoadMorePolls : RoomPollsAction
|
||||
data class OnRoomPollsTypeChange(val roomPollsType: RoomPollsType) : RoomPollsAction
|
||||
data class OnPollSelected(val selectedPollId: String) : RoomPollsAction
|
||||
}
|
||||
|
|
|
@ -20,6 +20,9 @@ import android.os.Bundle
|
|||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.lifecycle.DefaultLifecycleObserver
|
||||
import androidx.lifecycle.LifecycleOwner
|
||||
import androidx.viewpager2.widget.ViewPager2
|
||||
import com.airbnb.mvrx.args
|
||||
import com.airbnb.mvrx.fragmentViewModel
|
||||
import com.google.android.material.tabs.TabLayoutMediator
|
||||
|
@ -66,9 +69,35 @@ class RoomPollsFragment : VectorBaseFragment<FragmentRoomPollsBinding>() {
|
|||
|
||||
tabLayoutMediator = TabLayoutMediator(views.roomPollsTabs, views.roomPollsViewPager) { tab, position ->
|
||||
when (position) {
|
||||
RoomPollsType.ACTIVE.ordinal -> tab.text = getString(R.string.room_polls_active)
|
||||
RoomPollsType.ENDED.ordinal -> tab.text = getString(R.string.room_polls_ended)
|
||||
RoomPollsType.ACTIVE.ordinal -> {
|
||||
tab.text = getString(R.string.room_polls_active)
|
||||
}
|
||||
RoomPollsType.ENDED.ordinal -> {
|
||||
tab.text = getString(R.string.room_polls_ended)
|
||||
}
|
||||
}
|
||||
}.also { it.attach() }
|
||||
|
||||
val onPageChangeCallback = object : ViewPager2.OnPageChangeCallback() {
|
||||
override fun onPageSelected(position: Int) {
|
||||
when (position) {
|
||||
RoomPollsType.ACTIVE.ordinal -> {
|
||||
viewModel.handle(RoomPollsAction.OnRoomPollsTypeChange(RoomPollsType.ACTIVE))
|
||||
}
|
||||
RoomPollsType.ENDED.ordinal -> {
|
||||
viewModel.handle(RoomPollsAction.OnRoomPollsTypeChange(RoomPollsType.ENDED))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
viewLifecycleOwner.lifecycle.addObserver(object : DefaultLifecycleObserver {
|
||||
override fun onCreate(owner: LifecycleOwner) {
|
||||
views.roomPollsViewPager.registerOnPageChangeCallback(onPageChangeCallback)
|
||||
}
|
||||
override fun onDestroy(owner: LifecycleOwner) {
|
||||
views.roomPollsViewPager.unregisterOnPageChangeCallback(onPageChangeCallback)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,5 +20,5 @@ import im.vector.app.core.platform.VectorViewEvents
|
|||
|
||||
sealed class RoomPollsViewEvent : VectorViewEvents {
|
||||
object LoadingError : RoomPollsViewEvent()
|
||||
object NavigateToPollDetail : RoomPollsViewEvent()
|
||||
data class NavigateToPollDetail(val selectedPollId: String) : RoomPollsViewEvent()
|
||||
}
|
||||
|
|
|
@ -90,12 +90,17 @@ class RoomPollsViewModel @AssistedInject constructor(
|
|||
when (action) {
|
||||
RoomPollsAction.LoadMorePolls -> handleLoadMore()
|
||||
is RoomPollsAction.OnPollSelected -> handleOnPollSelected(action)
|
||||
is RoomPollsAction.OnRoomPollsTypeChange -> handleOnRoomPollsTypeChange(action)
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleOnRoomPollsTypeChange(action: RoomPollsAction.OnRoomPollsTypeChange) {
|
||||
setState { copy(selectedRoomPollsType = action.roomPollsType) }
|
||||
}
|
||||
|
||||
private fun handleOnPollSelected(action: RoomPollsAction.OnPollSelected) {
|
||||
setState { copy(selectedPollId = action.selectedPollId) }
|
||||
_viewEvents.post(RoomPollsViewEvent.NavigateToPollDetail)
|
||||
_viewEvents.post(RoomPollsViewEvent.NavigateToPollDetail(action.selectedPollId))
|
||||
}
|
||||
|
||||
private fun handleLoadMore() = withState { viewState ->
|
||||
|
|
|
@ -28,6 +28,7 @@ data class RoomPollsViewState(
|
|||
val nbSyncedDays: Int = 0,
|
||||
val isSyncing: Boolean = false,
|
||||
val selectedPollId: String? = null,
|
||||
val selectedRoomPollsType: RoomPollsType = RoomPollsType.ACTIVE,
|
||||
) : MavericksState {
|
||||
|
||||
constructor(roomProfileArgs: RoomProfileArgs) : this(roomId = roomProfileArgs.roomId)
|
||||
|
|
|
@ -20,11 +20,24 @@ import android.os.Bundle
|
|||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import com.airbnb.mvrx.activityViewModel
|
||||
import com.airbnb.mvrx.args
|
||||
import com.airbnb.mvrx.fragmentViewModel
|
||||
import com.airbnb.mvrx.withState
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import im.vector.app.R
|
||||
import im.vector.app.core.platform.VectorBaseFragment
|
||||
import im.vector.app.databinding.FragmentRoomPollDetailBinding
|
||||
import im.vector.app.features.roomprofile.RoomProfileArgs
|
||||
import im.vector.app.features.roomprofile.polls.RoomPollsType
|
||||
import im.vector.app.features.roomprofile.polls.RoomPollsViewModel
|
||||
|
||||
@AndroidEntryPoint
|
||||
class RoomPollDetailFragment : VectorBaseFragment<FragmentRoomPollDetailBinding>() {
|
||||
|
||||
private val viewModel: RoomPollsViewModel by activityViewModel()
|
||||
private val roomProfileArgs: RoomProfileArgs by args()
|
||||
|
||||
override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentRoomPollDetailBinding {
|
||||
return FragmentRoomPollDetailBinding.inflate(inflater, container, false)
|
||||
}
|
||||
|
@ -32,7 +45,21 @@ class RoomPollDetailFragment : VectorBaseFragment<FragmentRoomPollDetailBinding>
|
|||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
initToolbar()
|
||||
}
|
||||
|
||||
private fun initToolbar() = withState(viewModel) { state ->
|
||||
val title = if (state.selectedRoomPollsType == RoomPollsType.ACTIVE) getString(R.string.room_polls_active)
|
||||
else getString(R.string.room_polls_ended)
|
||||
|
||||
setupToolbar(views.roomPollDetailToolbar)
|
||||
.setTitle(title)
|
||||
.allowBack()
|
||||
}
|
||||
|
||||
override fun invalidate() = withState(viewModel) { state ->
|
||||
state.getSelectedPoll()?.let { _ ->
|
||||
}
|
||||
Unit
|
||||
}
|
||||
}
|
||||
|
|
|
@ -68,7 +68,9 @@ abstract class RoomPollsListFragment :
|
|||
viewModel.observeViewEvents { viewEvent ->
|
||||
when (viewEvent) {
|
||||
RoomPollsViewEvent.LoadingError -> showErrorInSnackbar(RoomPollsLoadingError())
|
||||
RoomPollsViewEvent.NavigateToPollDetail -> sharedActionViewModel.post(RoomProfileSharedAction.OpenPollDetails)
|
||||
is RoomPollsViewEvent.NavigateToPollDetail -> {
|
||||
sharedActionViewModel.post(RoomProfileSharedAction.OpenPollDetails(viewEvent.selectedPollId))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue