Skip to content
This repository has been archived by the owner on Jun 7, 2020. It is now read-only.

[WIP][NEW] Group same user messages #2295

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,15 @@ abstract class BaseViewHolder<T : BaseUiModel<*>>(
) : RecyclerView.ViewHolder(itemView),
MenuItem.OnMenuItemClickListener {
var data: T? = null
var groupMessage = false

init {
setupActionMenu(itemView)
}

fun bind(data: T) {
fun bind(data: T, groupMessage: Boolean = false) {
this.data = data
this.groupMessage = groupMessage
bindViews(data)
bindReactions()
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package chat.rocket.android.chatroom.adapter

import android.content.res.Resources
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
Expand All @@ -22,6 +23,9 @@ import chat.rocket.core.model.attachment.actions.ButtonAction
import chat.rocket.core.model.isSystemMessage
import timber.log.Timber
import java.security.InvalidParameterException
import java.util.Calendar
import kotlin.Comparator
import kotlin.collections.ArrayList

class ChatRoomAdapter(
private val roomId: String? = null,
Expand Down Expand Up @@ -106,9 +110,18 @@ class ChatRoomAdapter(
}
}

var groupMessage = false

if (position + 1 < dataSet.size) {
val a = dataSet[position].message
val b = dataSet[position + 1].message

groupMessage = shouldGroupMessage(a, b)
}

when (holder) {
is MessageViewHolder ->
holder.bind(dataSet[position] as MessageUiModel)
holder.bind(dataSet[position] as MessageUiModel, groupMessage)
is UrlPreviewViewHolder -> {
holder.bind(dataSet[position] as UrlPreviewUiModel)
}
Expand All @@ -119,6 +132,23 @@ class ChatRoomAdapter(
}
}


private fun shouldGroupMessage(a: Message, b: Message): Boolean {
a.sender?.let { u1 ->
b.sender?.let { u2 ->
if (u1.id.equals(u2.id)) {
val date1 = a.getDate()
val date2 = b.getDate()

if (date1.isSameDay(date2))
return true
}
}
}

return false
}

override fun getItemId(position: Int): Long {
val model = dataSet[position]
return when (model) {
Expand Down Expand Up @@ -336,3 +366,18 @@ class ChatRoomAdapter(
fun reportMessage(id: String)
}
}

fun Message.getDate(): Calendar {
return Calendar.getInstance().apply {
timeInMillis = [email protected]
}
}

fun Calendar.isSameDay(other: Calendar): Boolean {
return this.get(Calendar.YEAR) == other.get(Calendar.YEAR) &&
this.get(Calendar.MONTH) == other.get(Calendar.MONTH) &&
this.get(Calendar.DAY_OF_MONTH) == other.get(Calendar.DAY_OF_MONTH)
}

val Int.toPx: Float
get() = (this * Resources.getSystem().displayMetrics.density)
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import android.text.Spannable
import android.text.method.LinkMovementMethod
import android.text.style.ImageSpan
import android.view.View
import android.view.ViewGroup
import androidx.core.view.isVisible
import chat.rocket.android.R
import chat.rocket.android.chatroom.uimodel.MessageUiModel
Expand Down Expand Up @@ -77,11 +78,30 @@ class MessageViewHolder(
read_receipt_view.isVisible = true
}

image_avatar.setOnClickListener {
data.message.sender?.id?.let { userId ->
avatarListener(userId)
if (!groupMessage) {
layout_avatar.visibility = View.VISIBLE
message_header.visibility = View.VISIBLE
(text_content.layoutParams as ViewGroup.MarginLayoutParams).apply {
marginStart = 16.toPx.toInt()
}

image_avatar.setOnClickListener {
data.message.sender?.id?.let { userId ->
avatarListener(userId)
}
}
} else {
layout_avatar.visibility = View.GONE
message_header.visibility = View.GONE

(text_content.layoutParams as ViewGroup.MarginLayoutParams).apply {
marginStart = 56.toPx.toInt()
}

image_avatar.setOnClickListener(null)
}


}
}

Expand Down
3 changes: 2 additions & 1 deletion app/src/main/res/layout/item_message.xml
Original file line number Diff line number Diff line change
Expand Up @@ -147,14 +147,15 @@

<TextView
android:id="@+id/text_content"
android:layout_marginStart="16dp"
style="@style/Message.TextView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:layout_marginEnd="4dp"
android:layout_marginBottom="2dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/message_header"
app:layout_constraintStart_toEndOf="@+id/layout_avatar"
app:layout_constraintTop_toBottomOf="@+id/message_header"
tools:text="This is a multiline chat message from Bertie that will take more than just one line of text. I have sure that everything is amazing!" />

Expand Down