Adding creation date field

This commit is contained in:
Maxime NATUREL 2023-02-03 10:31:36 +01:00
parent 2ee079fe79
commit b75787a4f4
5 changed files with 53 additions and 5 deletions

View file

@ -19,6 +19,7 @@ package im.vector.app.features.roomprofile.polls.detail.ui
import im.vector.app.features.poll.PollItemViewState
data class RoomPollDetail(
val creationTimestamp: Long,
val isEnded: Boolean,
val endedPollEventId: String?,
val pollItemViewState: PollItemViewState,

View file

@ -17,10 +17,14 @@
package im.vector.app.features.roomprofile.polls.detail.ui
import com.airbnb.epoxy.TypedEpoxyController
import im.vector.app.core.date.DateFormatKind
import im.vector.app.core.date.VectorDateFormatter
import java.util.UUID
import javax.inject.Inject
class RoomPollDetailController @Inject constructor() : TypedEpoxyController<RoomPollDetailViewState>() {
class RoomPollDetailController @Inject constructor(
val dateFormatter: VectorDateFormatter,
) : TypedEpoxyController<RoomPollDetailViewState>() {
interface Callback {
fun vote(pollEventId: String, optionId: String)
@ -37,6 +41,7 @@ class RoomPollDetailController @Inject constructor() : TypedEpoxyController<Room
roomPollDetailItem {
id(viewState.pollId)
eventId(viewState.pollId)
formattedDate(host.dateFormatter.format(pollDetail.creationTimestamp, DateFormatKind.TIMELINE_DAY_DIVIDER))
question(pollItemViewState.question)
canVote(pollItemViewState.canVote)
votesStatus(pollItemViewState.votesStatus)

View file

@ -28,7 +28,10 @@ import im.vector.app.features.home.room.detail.timeline.item.PollOptionView
import im.vector.app.features.home.room.detail.timeline.item.PollOptionViewState
@EpoxyModelClass
abstract class RoomPollDetailItem : VectorEpoxyModel<RoomPollDetailItem.Holder>(R.layout.item_timeline_event_poll) {
abstract class RoomPollDetailItem : VectorEpoxyModel<RoomPollDetailItem.Holder>(R.layout.item_poll_detail) {
@EpoxyAttribute
lateinit var formattedDate: String
@EpoxyAttribute
var question: String? = null
@ -53,7 +56,7 @@ abstract class RoomPollDetailItem : VectorEpoxyModel<RoomPollDetailItem.Holder>(
override fun bind(holder: Holder) {
super.bind(holder)
holder.date.text = formattedDate
holder.questionTextView.text = question
holder.votesStatusTextView.text = votesStatus
holder.optionsContainer.removeAllViews()
@ -77,6 +80,7 @@ abstract class RoomPollDetailItem : VectorEpoxyModel<RoomPollDetailItem.Holder>(
}
class Holder : VectorEpoxyHolder() {
val date by bind<TextView>(R.id.pollDetailDate)
val questionTextView by bind<TextView>(R.id.questionTextView)
val optionsContainer by bind<LinearLayout>(R.id.optionsContainer)
val votesStatusTextView by bind<TextView>(R.id.optionsVotesStatusTextView)

View file

@ -39,14 +39,21 @@ class RoomPollDetailMapper @Inject constructor(
val result = runCatching {
val content = timelineEvent.getVectorLastMessageContent()
val pollResponseData = pollResponseDataFactory.create(timelineEvent)
return if (eventId.isNotEmpty() && content is MessagePollContent) {
val creationTimestamp = timelineEvent.root.originServerTs ?: 0
return if (eventId.isNotEmpty() && creationTimestamp > 0 && content is MessagePollContent) {
val isPollEnded = pollResponseData?.isClosed.orFalse()
val endedPollEventId = getEndedPollEventId(
isPollEnded,
startPollEventId = eventId,
roomId = timelineEvent.roomId,
)
convertToRoomPollDetail(content, pollResponseData, isPollEnded, endedPollEventId)
convertToRoomPollDetail(
creationTimestamp = creationTimestamp,
content = content,
pollResponseData = pollResponseData,
isPollEnded = isPollEnded,
endedPollEventId = endedPollEventId,
)
} else {
Timber.w("missing mandatory info about poll event with id=$eventId")
null
@ -60,6 +67,7 @@ class RoomPollDetailMapper @Inject constructor(
}
private fun convertToRoomPollDetail(
creationTimestamp: Long,
content: MessagePollContent,
pollResponseData: PollResponseData?,
isPollEnded: Boolean,
@ -72,6 +80,7 @@ class RoomPollDetailMapper @Inject constructor(
isSent = true,
)
return RoomPollDetail(
creationTimestamp = creationTimestamp,
isEnded = isPollEnded,
pollItemViewState = pollItemViewState,
endedPollEventId = endedPollEventId,

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/pollDetailDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.Vector.Caption"
android:textColor="?vctr_content_tertiary"
app:layout_constraintBottom_toTopOf="@id/pollDetailContent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="28/06/22" />
<include
android:id="@+id/pollDetailContent"
layout="@layout/item_timeline_event_poll"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/pollDetailDate" />
</androidx.constraintlayout.widget.ConstraintLayout>