Skip to content
Snippets Groups Projects
Commit ab741d9e authored by Taras's avatar Taras
Browse files

Create abstract dm vh

parent ca4e65ad
No related branches found
No related tags found
No related merge requests found
package org.futo.circles.feature.direct.timeline.list.holder
import android.annotation.SuppressLint
import android.view.GestureDetector
import android.view.MotionEvent
import android.view.View
import com.google.android.material.imageview.ShapeableImageView
import org.futo.circles.core.base.list.context
import org.futo.circles.core.model.Post
import org.futo.circles.core.model.PostListItem
import org.futo.circles.feature.direct.timeline.listeners.DmOptionsListener
import org.futo.circles.feature.timeline.base.TimelineListItemViewHolder
import org.futo.circles.model.PostItemPayload
import org.futo.circles.view.DmFooterView
@SuppressLint("ClickableViewAccessibility")
abstract class DmViewHolder(
view: View,
protected val dmOptionsListener: DmOptionsListener
) : TimelineListItemViewHolder(view) {
abstract val dmBackground: ShapeableImageView?
abstract val dmFooter: DmFooterView?
abstract fun bindHolderSpecific(post: Post)
protected var post: Post? = null
private val gestureDetector =
GestureDetector(context, object : GestureDetector.SimpleOnGestureListener() {
override fun onDoubleTap(e: MotionEvent): Boolean {
post?.let {
dmOptionsListener.onShowEmoji(it.id) { emoji ->
dmFooter?.addEmojiFromPickerLocalUpdate(emoji)
}
}
return true
}
override fun onLongPress(e: MotionEvent) {
post?.let {
dmOptionsListener.onShowMenuClicked(it.id)
}
}
override fun onDoubleTapEvent(e: MotionEvent) = true
override fun onDown(e: MotionEvent) = true
}).apply {
setIsLongpressEnabled(true)
}
override fun bind(item: PostListItem) {
(item as? Post)?.let { bindPost(item) }
}
protected fun setListeners() {
dmBackground?.setOnTouchListener { _, event ->
gestureDetector.onTouchEvent(event)
false
}
dmFooter?.setListener(dmOptionsListener)
}
private fun bindPost(post: Post) {
this.post = post
dmFooter?.setData(post)
bindHolderSpecific(post)
}
fun bindPayload(payload: PostItemPayload) {
dmFooter?.bindPayload(payload.reactions)
}
}
......@@ -9,7 +9,7 @@ import org.futo.circles.core.extensions.setIsVisible
import org.futo.circles.core.model.Post
import org.futo.circles.core.model.ReactionsData
import org.futo.circles.databinding.ViewDmFooterBinding
import org.futo.circles.feature.timeline.list.PostOptionsListener
import org.futo.circles.feature.direct.timeline.listeners.DmOptionsListener
import java.util.Date
......@@ -21,10 +21,14 @@ class DmFooterView(
private val binding =
ViewDmFooterBinding.inflate(LayoutInflater.from(context), this)
private var optionsListener: PostOptionsListener? = null
private var optionsListener: DmOptionsListener? = null
private var post: Post? = null
fun setListener(optionsListener: DmOptionsListener) {
this.optionsListener = optionsListener
}
fun setData(data: Post) {
post = data
binding.tvTime.text =
......@@ -47,7 +51,6 @@ class DmFooterView(
override fun onReactionChipClicked(emoji: String, isAddedByMe: Boolean) {
post?.let {
optionsListener?.onEmojiChipClicked(
it.postInfo.roomId,
it.id,
emoji,
isAddedByMe
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment