Commit 1f108732 authored by Leonardo Aramaki's avatar Leonardo Aramaki

Update downstream message reactions

parent c8eb71b6
...@@ -32,7 +32,7 @@ abstract class BaseViewHolder<T : BaseViewModel<*>>( ...@@ -32,7 +32,7 @@ abstract class BaseViewHolder<T : BaseViewModel<*>>(
private fun bindReactions() { private fun bindReactions() {
data?.let { data?.let {
if (it.isTailMessage) { if (it.nextDownStreamMessage == null) {
val recyclerView = itemView.findViewById(R.id.recycler_view_reactions) as RecyclerView val recyclerView = itemView.findViewById(R.id.recycler_view_reactions) as RecyclerView
val adapter = MessageReactionsAdapter() val adapter = MessageReactionsAdapter()
val manager = GridLayoutManager(itemView.context, 6) val manager = GridLayoutManager(itemView.context, 6)
......
...@@ -12,10 +12,10 @@ import timber.log.Timber ...@@ -12,10 +12,10 @@ import timber.log.Timber
import java.security.InvalidParameterException import java.security.InvalidParameterException
class ChatRoomAdapter( class ChatRoomAdapter(
private val roomType: String, private val roomType: String,
private val roomName: String, private val roomName: String,
private val presenter: ChatRoomPresenter?, private val presenter: ChatRoomPresenter?,
private val enableActions: Boolean = true private val enableActions: Boolean = true
) : RecyclerView.Adapter<BaseViewHolder<*>>() { ) : RecyclerView.Adapter<BaseViewHolder<*>>() {
private val dataSet = ArrayList<BaseViewModel<*>>() private val dataSet = ArrayList<BaseViewModel<*>>()
...@@ -25,7 +25,7 @@ class ChatRoomAdapter( ...@@ -25,7 +25,7 @@ class ChatRoomAdapter(
} }
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder<*> { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder<*> {
return when(viewType.toViewType()) { return when (viewType.toViewType()) {
BaseViewModel.ViewType.MESSAGE -> { BaseViewModel.ViewType.MESSAGE -> {
val view = parent.inflate(R.layout.item_message) val view = parent.inflate(R.layout.item_message)
MessageViewHolder(view, actionsListener) MessageViewHolder(view, actionsListener)
...@@ -65,16 +65,15 @@ class ChatRoomAdapter( ...@@ -65,16 +65,15 @@ class ChatRoomAdapter(
if (position + 1 < itemCount) { if (position + 1 < itemCount) {
val messageAbove = dataSet[position + 1] val messageAbove = dataSet[position + 1]
if (messageAbove.messageId == dataSet[position].messageId) { if (messageAbove.messageId == dataSet[position].messageId) {
dataSet[position].isTailMessage = true messageAbove.nextDownStreamMessage = dataSet[position]
} }
} }
} else { } else {
if (position == 0) { if (position == 0) {
dataSet[0].isTailMessage = true dataSet[0].nextDownStreamMessage = null
} } else if (position - 1 > 0) {
else if (position - 1 > 0) {
if (dataSet[position - 1].messageId != dataSet[position].messageId) { if (dataSet[position - 1].messageId != dataSet[position].messageId) {
dataSet[position].isTailMessage = true dataSet[position].nextDownStreamMessage = null
} }
} }
} }
...@@ -109,11 +108,16 @@ class ChatRoomAdapter( ...@@ -109,11 +108,16 @@ class ChatRoomAdapter(
} }
fun updateItem(message: BaseViewModel<*>) { fun updateItem(message: BaseViewModel<*>) {
val index = dataSet.indexOfLast { it.messageId == message.messageId } var index = dataSet.indexOfLast { it.messageId == message.messageId }
Timber.d("index: $index") Timber.d("index: $index")
if (index > -1) { if (index > -1) {
message.nextDownStreamMessage = dataSet[index].nextDownStreamMessage
dataSet[index] = message dataSet[index] = message
notifyItemChanged(index) notifyItemChanged(index)
while (dataSet[index].nextDownStreamMessage != null) {
dataSet[index].nextDownStreamMessage!!.reactions = message.reactions
notifyItemChanged(--index)
}
} }
} }
......
...@@ -11,9 +11,9 @@ data class AudioAttachmentViewModel( ...@@ -11,9 +11,9 @@ data class AudioAttachmentViewModel(
override val attachmentUrl: String, override val attachmentUrl: String,
override val attachmentTitle: CharSequence, override val attachmentTitle: CharSequence,
override val id: Long, override val id: Long,
override val reactions: List<ReactionViewModel>, override var reactions: List<ReactionViewModel>,
override var isTailMessage: Boolean = false override var nextDownStreamMessage: BaseViewModel<*>? = null
) : BaseFileAttachmentViewModel<AudioAttachment> { ) : BaseFileAttachmentViewModel<AudioAttachment> {
override val viewType: Int override val viewType: Int
get() = BaseViewModel.ViewType.AUDIO_ATTACHMENT.viewType get() = BaseViewModel.ViewType.AUDIO_ATTACHMENT.viewType
override val layoutId: Int override val layoutId: Int
......
...@@ -9,8 +9,8 @@ interface BaseViewModel<out T> { ...@@ -9,8 +9,8 @@ interface BaseViewModel<out T> {
val messageId: String val messageId: String
val viewType: Int val viewType: Int
val layoutId: Int val layoutId: Int
val reactions: List<ReactionViewModel> var reactions: List<ReactionViewModel>
var isTailMessage: Boolean var nextDownStreamMessage: BaseViewModel<*>?
enum class ViewType(val viewType: Int) { enum class ViewType(val viewType: Int) {
MESSAGE(0), MESSAGE(0),
......
...@@ -11,8 +11,8 @@ data class ImageAttachmentViewModel( ...@@ -11,8 +11,8 @@ data class ImageAttachmentViewModel(
override val attachmentUrl: String, override val attachmentUrl: String,
override val attachmentTitle: CharSequence, override val attachmentTitle: CharSequence,
override val id: Long, override val id: Long,
override val reactions: List<ReactionViewModel>, override var reactions: List<ReactionViewModel>,
override var isTailMessage: Boolean = false override var nextDownStreamMessage: BaseViewModel<*>? = null
) : BaseFileAttachmentViewModel<ImageAttachment> { ) : BaseFileAttachmentViewModel<ImageAttachment> {
override val viewType: Int override val viewType: Int
get() = BaseViewModel.ViewType.IMAGE_ATTACHMENT.viewType get() = BaseViewModel.ViewType.IMAGE_ATTACHMENT.viewType
......
...@@ -12,8 +12,8 @@ data class MessageViewModel( ...@@ -12,8 +12,8 @@ data class MessageViewModel(
override val senderName: CharSequence, override val senderName: CharSequence,
override val content: CharSequence, override val content: CharSequence,
override val isPinned: Boolean, override val isPinned: Boolean,
override val reactions: List<ReactionViewModel>, override var reactions: List<ReactionViewModel>,
override var isTailMessage: Boolean = false override var nextDownStreamMessage: BaseViewModel<*>? = null
) : BaseMessageViewModel<Message> { ) : BaseMessageViewModel<Message> {
override val viewType: Int override val viewType: Int
get() = BaseViewModel.ViewType.MESSAGE.viewType get() = BaseViewModel.ViewType.MESSAGE.viewType
......
...@@ -12,8 +12,8 @@ data class UrlPreviewViewModel( ...@@ -12,8 +12,8 @@ data class UrlPreviewViewModel(
val hostname: String, val hostname: String,
val description: CharSequence?, val description: CharSequence?,
val thumbUrl: String?, val thumbUrl: String?,
override val reactions: List<ReactionViewModel>, override var reactions: List<ReactionViewModel>,
override var isTailMessage: Boolean = false override var nextDownStreamMessage: BaseViewModel<*>? = null
) : BaseViewModel<Url> { ) : BaseViewModel<Url> {
override val viewType: Int override val viewType: Int
get() = BaseViewModel.ViewType.URL_PREVIEW.viewType get() = BaseViewModel.ViewType.URL_PREVIEW.viewType
......
...@@ -11,8 +11,8 @@ data class VideoAttachmentViewModel( ...@@ -11,8 +11,8 @@ data class VideoAttachmentViewModel(
override val attachmentUrl: String, override val attachmentUrl: String,
override val attachmentTitle: CharSequence, override val attachmentTitle: CharSequence,
override val id: Long, override val id: Long,
override val reactions: List<ReactionViewModel>, override var reactions: List<ReactionViewModel>,
override var isTailMessage: Boolean = false override var nextDownStreamMessage: BaseViewModel<*>? = null
) : BaseFileAttachmentViewModel<VideoAttachment> { ) : BaseFileAttachmentViewModel<VideoAttachment> {
override val viewType: Int override val viewType: Int
get() = BaseViewModel.ViewType.VIDEO_ATTACHMENT.viewType get() = BaseViewModel.ViewType.VIDEO_ATTACHMENT.viewType
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment