Code review fixes.
This commit is contained in:
parent
c7ad50a4d6
commit
f6dcda6841
@ -18,6 +18,7 @@ package im.vector.app.features.home.room.detail.timeline.item
|
|||||||
|
|
||||||
import android.widget.LinearLayout
|
import android.widget.LinearLayout
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
|
import androidx.core.view.children
|
||||||
import com.airbnb.epoxy.EpoxyAttribute
|
import com.airbnb.epoxy.EpoxyAttribute
|
||||||
import com.airbnb.epoxy.EpoxyModelClass
|
import com.airbnb.epoxy.EpoxyModelClass
|
||||||
import im.vector.app.R
|
import im.vector.app.R
|
||||||
@ -58,23 +59,29 @@ abstract class PollItem : AbsMessageItem<PollItem.Holder>() {
|
|||||||
holder.questionTextView.text = pollContent?.pollCreationInfo?.question?.question
|
holder.questionTextView.text = pollContent?.pollCreationInfo?.question?.question
|
||||||
holder.totalVotesTextView.text = totalVotesText
|
holder.totalVotesTextView.text = totalVotesText
|
||||||
|
|
||||||
|
val cachedViews = mutableMapOf<String, PollOptionItem>()
|
||||||
|
holder.optionsContainer.children.filterIsInstance<PollOptionItem>().forEach { existingPollItemView ->
|
||||||
|
cachedViews[existingPollItemView.getTag(STUB_ID)?.toString() ?: ""] = existingPollItemView
|
||||||
|
}
|
||||||
|
|
||||||
holder.optionsContainer.removeAllViews()
|
holder.optionsContainer.removeAllViews()
|
||||||
|
|
||||||
pollContent?.pollCreationInfo?.answers?.forEachIndexed { index, option ->
|
pollContent?.pollCreationInfo?.answers?.forEachIndexed { index, option ->
|
||||||
val optionName = option.answer ?: ""
|
val optionName = option.answer ?: ""
|
||||||
|
val tag = relatedEventId + option.id
|
||||||
|
|
||||||
holder.optionsContainer.addView(
|
val pollOptionItem: PollOptionItem = (cachedViews[tag] ?: PollOptionItem(holder.view.context))
|
||||||
PollOptionItem(holder.view.context).apply {
|
.apply {
|
||||||
|
setTag(STUB_ID, tag)
|
||||||
render(
|
render(
|
||||||
state = optionViewStates?.getOrNull(index) ?: PollOptionViewState.DisabledOptionWithInvisibleVotes(optionName),
|
state = optionViewStates?.getOrNull(index) ?: PollOptionViewState.DisabledOptionWithInvisibleVotes(optionName)
|
||||||
callback = object : PollOptionItem.Callback {
|
|
||||||
override fun onOptionClicked() {
|
|
||||||
callback?.onTimelineItemAction(RoomDetailAction.VoteToPoll(relatedEventId, option.id ?: ""))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
)
|
pollOptionItem.setOnClickListener {
|
||||||
|
callback?.onTimelineItemAction(RoomDetailAction.VoteToPoll(relatedEventId, option.id ?: ""))
|
||||||
|
}
|
||||||
|
|
||||||
|
holder.optionsContainer.addView(pollOptionItem)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,12 +32,7 @@ class PollOptionItem @JvmOverloads constructor(
|
|||||||
defStyleAttr: Int = 0
|
defStyleAttr: Int = 0
|
||||||
) : ConstraintLayout(context, attrs, defStyleAttr) {
|
) : ConstraintLayout(context, attrs, defStyleAttr) {
|
||||||
|
|
||||||
interface Callback {
|
|
||||||
fun onOptionClicked()
|
|
||||||
}
|
|
||||||
|
|
||||||
private lateinit var views: ItemPollOptionBinding
|
private lateinit var views: ItemPollOptionBinding
|
||||||
private var callback: Callback? = null
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
setupViews()
|
setupViews()
|
||||||
@ -46,12 +41,9 @@ class PollOptionItem @JvmOverloads constructor(
|
|||||||
private fun setupViews() {
|
private fun setupViews() {
|
||||||
inflate(context, R.layout.item_poll_option, this)
|
inflate(context, R.layout.item_poll_option, this)
|
||||||
views = ItemPollOptionBinding.bind(this)
|
views = ItemPollOptionBinding.bind(this)
|
||||||
|
|
||||||
views.root.setOnClickListener { callback?.onOptionClicked() }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun render(state: PollOptionViewState, callback: Callback) {
|
fun render(state: PollOptionViewState) {
|
||||||
this.callback = callback
|
|
||||||
|
|
||||||
views.optionNameTextView.text = state.name
|
views.optionNameTextView.text = state.name
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user