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

Bind holder

parent df4882f1
No related branches found
No related tags found
No related merge requests found
......@@ -9,6 +9,7 @@ import org.futo.circles.core.model.PostContentType
import org.futo.circles.core.provider.MatrixSessionProvider
import org.futo.circles.feature.timeline.list.holder.ImagePostViewHolder
import org.futo.circles.feature.timeline.list.holder.MediaViewHolder
import org.futo.circles.feature.timeline.list.holder.OtherEventPostViewHolder
import org.futo.circles.feature.timeline.list.holder.PollPostViewHolder
import org.futo.circles.feature.timeline.list.holder.PostViewHolder
import org.futo.circles.feature.timeline.list.holder.TextPostViewHolder
......@@ -62,6 +63,8 @@ class TimelineAdapter(
PostContentType.POLL_CONTENT -> PollPostViewHolder(
parent, postOptionsListener, isThread
)
PostContentType.OTHER_CONTENT -> OtherEventPostViewHolder(parent, postOptionsListener)
}
}
......
......@@ -37,11 +37,11 @@ sealed class PostViewHolder(
private val isThread: Boolean
) : RecyclerView.ViewHolder(view) {
abstract val postLayout: ViewGroup
abstract val postLayout: ViewGroup?
abstract val postFooter: PostFooterView?
abstract val postStatus: PostStatusView?
abstract val readMoreTextView: ReadMoreTextView?
abstract val postHeader: PostHeaderView
abstract val postFooter: PostFooterView
abstract val postStatus: PostStatusView
abstract val readMoreTextView: ReadMoreTextView
protected var post: Post? = null
......@@ -50,7 +50,7 @@ sealed class PostViewHolder(
override fun onDoubleTap(e: MotionEvent): Boolean {
post?.let {
optionsListener.onShowEmoji(it.postInfo.roomId, it.id) { emoji ->
postFooter.addEmojiFromPickerLocalUpdate(emoji)
postFooter?.addEmojiFromPickerLocalUpdate(emoji)
}
}
return true
......@@ -74,14 +74,14 @@ sealed class PostViewHolder(
protected fun setListeners() {
postLayout.setOnTouchListener { _, event ->
postLayout?.setOnTouchListener { _, event ->
gestureDetector.onTouchEvent(event)
false
}
postFooter.setListener(optionsListener)
postFooter?.setListener(optionsListener)
postHeader.setListener(optionsListener)
handleLinkClick()
readMoreTextView.apply {
readMoreTextView?.apply {
setNotCollapsableClickAction { openReplies() }
setOnLongClickListener {
postHeader.showMenu()
......@@ -94,17 +94,17 @@ sealed class PostViewHolder(
open fun bind(post: Post) {
this.post = post
postHeader.setData(post)
postFooter.setData(post, isThread)
postFooter?.setData(post, isThread)
bindMentionBorder(post.content)
postStatus.apply {
postStatus?.apply {
setIsEdited(post.postInfo.isEdited)
setSendStatus(post.sendState, post.readByCount)
}
}
fun bindPayload(payload: PostItemPayload) {
postStatus.setSendStatus(payload.sendState, payload.readByCount)
postFooter.bindPayload(payload.repliesCount, payload.reactions)
postStatus?.setSendStatus(payload.sendState, payload.readByCount)
postFooter?.bindPayload(payload.repliesCount, payload.reactions)
}
private fun bindMentionBorder(content: PostContent) {
......@@ -115,15 +115,16 @@ sealed class PostViewHolder(
is TextContent -> MarkdownParser.hasCurrentUserMention(content.message)
is PollContent -> MarkdownParser.hasCurrentUserMention(content.question)
else -> false
}
if (hasMention) postLayout.setBackgroundResource(R.drawable.bg_mention_highlight)
else postLayout.background = null
if (hasMention) postLayout?.setBackgroundResource(R.drawable.bg_mention_highlight)
else postLayout?.background = null
}
@SuppressLint("ClickableViewAccessibility")
private fun handleLinkClick() {
readMoreTextView.apply {
readMoreTextView?.apply {
movementMethod = InternalLinkMovementMethod(object : OnLinkClickedListener {
override fun onLinkClicked(url: String) {
showLinkConfirmation(context, url)
......
......@@ -33,9 +33,10 @@ class TextPostViewHolder(
override val readMoreTextView: ReadMoreTextView
get() = binding.tvTextContent
init {
setListeners()
}
init {
setListeners()
}
override fun bind(post: Post) {
super.bind(post)
val content = (post.content as? TextContent) ?: return
......
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/lCard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:focusable="true"
android:foreground="?selectableItemBackground"
android:orientation="vertical">
<org.futo.circles.view.PostHeaderView
android:id="@+id/postHeader"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="8dp"
android:layout_marginTop="8dp" />
<TextView
android:id="@+id/tvTextContent"
style="@style/postMessage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/post_text_side_margin"
android:layout_marginTop="8dp"
android:layout_marginBottom="16dp"
android:textStyle="bold" />
</LinearLayout>
\ No newline at end of file
......@@ -24,9 +24,6 @@
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/post_text_side_margin"
android:layout_marginTop="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:readMoreMaxLines="7"
app:readMoreText="@string/show_more"
app:readMoreTextColor="@color/blue" />
......
......@@ -7,6 +7,8 @@ import org.futo.circles.core.model.PostContent
import org.futo.circles.core.model.PostContentType
import org.futo.circles.core.model.PostInfo
import org.futo.circles.core.model.ReactionsData
import org.futo.circles.core.model.toOtherEventContent
import org.futo.circles.core.model.toTextContent
import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent
import org.matrix.android.sdk.api.session.room.timeline.hasBeenEdited
......@@ -42,7 +44,7 @@ private fun TimelineEvent.toPostContent(): PostContent =
PostContentType.IMAGE_CONTENT -> toMediaContent(MediaType.Image)
PostContentType.VIDEO_CONTENT -> toMediaContent(MediaType.Video)
PostContentType.POLL_CONTENT -> toPollContent()
else -> toTextContent()
else -> toOtherEventContent()
}
private fun TimelineEvent.getReadByCount(receipts: List<Long>): Int {
......
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