forked from GitHub-Mirror/riotX-android
Timeline : improve scrolling performances
This commit is contained in:
@ -75,6 +75,8 @@ class RoomDetailFragment : RiotFragment(), TimelineEventController.Callback {
|
||||
//scrollOnNewMessageCallback = ScrollOnNewMessageCallback(layoutManager)
|
||||
recyclerView.layoutManager = layoutManager
|
||||
//timelineEventController.addModelBuildListener { it.dispatchTo(scrollOnNewMessageCallback) }
|
||||
recyclerView.setHasFixedSize(true)
|
||||
recyclerView.setItemViewCacheSize(20)
|
||||
recyclerView.setController(timelineEventController)
|
||||
timelineEventController.callback = this
|
||||
}
|
||||
|
@ -1,11 +1,9 @@
|
||||
package im.vector.riotredesign.features.home.room.detail.timeline
|
||||
|
||||
import android.text.util.Linkify
|
||||
import android.view.View
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import im.vector.matrix.android.api.permalinks.MatrixLinkify
|
||||
import im.vector.matrix.android.api.permalinks.MatrixPermalinkSpan
|
||||
import im.vector.riotredesign.R
|
||||
import im.vector.riotredesign.core.epoxy.KotlinModel
|
||||
import im.vector.riotredesign.features.home.AvatarRenderer
|
||||
@ -15,8 +13,7 @@ data class MessageItem(
|
||||
val time: CharSequence? = null,
|
||||
val avatarUrl: String?,
|
||||
val memberName: CharSequence? = null,
|
||||
val showInformation: Boolean = true,
|
||||
val onUrlClickedListener: ((url: String) -> Unit)? = null
|
||||
val showInformation: Boolean = true
|
||||
) : KotlinModel(R.layout.item_event_message) {
|
||||
|
||||
private val avatarImageView by bind<ImageView>(R.id.messageAvatarImageView)
|
||||
@ -26,12 +23,7 @@ data class MessageItem(
|
||||
|
||||
override fun bind() {
|
||||
messageView.text = message
|
||||
MatrixLinkify.addLinks(messageView, object : MatrixPermalinkSpan.Callback {
|
||||
override fun onUrlClicked(url: String) {
|
||||
onUrlClickedListener?.invoke(url)
|
||||
}
|
||||
})
|
||||
Linkify.addLinks(messageView, Linkify.ALL)
|
||||
MatrixLinkify.addLinkMovementMethod(messageView)
|
||||
if (showInformation) {
|
||||
avatarImageView.visibility = View.VISIBLE
|
||||
memberNameView.visibility = View.VISIBLE
|
||||
|
@ -1,5 +1,9 @@
|
||||
package im.vector.riotredesign.features.home.room.detail.timeline
|
||||
|
||||
import android.text.SpannableStringBuilder
|
||||
import android.text.util.Linkify
|
||||
import im.vector.matrix.android.api.permalinks.MatrixLinkify
|
||||
import im.vector.matrix.android.api.permalinks.MatrixPermalinkSpan
|
||||
import im.vector.matrix.android.api.session.events.model.EnrichedEvent
|
||||
import im.vector.matrix.android.api.session.events.model.toModel
|
||||
import im.vector.matrix.android.api.session.room.model.MessageContent
|
||||
@ -25,14 +29,24 @@ class MessageItemFactory(private val timelineDateFormatter: TimelineDateFormatte
|
||||
if (addDaySeparator || nextRoomMember != roomMember) {
|
||||
messagesDisplayedWithInformation.add(event.root.eventId)
|
||||
}
|
||||
|
||||
val message = messageContent.body?.let {
|
||||
val spannable = SpannableStringBuilder(it)
|
||||
MatrixLinkify.addLinks(spannable, object : MatrixPermalinkSpan.Callback {
|
||||
override fun onUrlClicked(url: String) {
|
||||
callback?.onUrlClicked(url)
|
||||
}
|
||||
})
|
||||
Linkify.addLinks(spannable, Linkify.ALL)
|
||||
spannable
|
||||
}
|
||||
val showInformation = messagesDisplayedWithInformation.contains(event.root.eventId)
|
||||
return MessageItem(
|
||||
message = messageContent.body,
|
||||
message = message,
|
||||
avatarUrl = roomMember.avatarUrl,
|
||||
showInformation = showInformation,
|
||||
time = timelineDateFormatter.formatMessageHour(date),
|
||||
memberName = roomMember.displayName ?: event.root.sender,
|
||||
onUrlClickedListener = { callback?.onUrlClicked(it) }
|
||||
memberName = roomMember.displayName ?: event.root.sender
|
||||
)
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user