diff --git a/app/src/main/java/com/nextcloud/talk/newarch/features/chat/ChatPresenter.kt b/app/src/main/java/com/nextcloud/talk/newarch/features/chat/ChatPresenter.kt index f68c33331..ae4f90547 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/features/chat/ChatPresenter.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/features/chat/ChatPresenter.kt @@ -6,8 +6,9 @@ import android.graphics.drawable.LayerDrawable import android.util.TypedValue import android.view.View import android.view.ViewGroup +import android.widget.RelativeLayout import androidx.core.view.isVisible -import coil.api.load +import androidx.recyclerview.widget.RecyclerView import coil.api.loadAny import coil.api.newLoadBuilder import com.amulyakhare.textdrawable.TextDrawable @@ -71,12 +72,19 @@ open class ChatPresenter(context: Context, private val onElementClickPa if (elementType == ChatElementTypes.CHAT_MESSAGE) { var shouldShowNameAndAvatar = true val previousElement = getAdapter().elementAt(holder.adapterPosition - 1) + val isOutgoingMessage = it.actorId == it.activeUser?.userId + var isGrouped = false + if (isOutgoingMessage) { + shouldShowNameAndAvatar = false + } + if (previousElement != null && previousElement.element.data != null && previousElement.element.data is ChatElement) { val previousChatElement = previousElement.element.data as ChatElement if (previousChatElement.elementType == ChatElementTypes.CHAT_MESSAGE) { val previousChatMessage = previousChatElement.data as ChatMessage if (previousChatMessage.actorId == it.actorId) { shouldShowNameAndAvatar = false + isGrouped = true } } } @@ -93,6 +101,8 @@ open class ChatPresenter(context: Context, private val onElementClickPa if (shouldShowNameAndAvatar) { holder.itemView.authorLayout.isVisible = true + holder.itemView.authorName.isVisible = true + holder.itemView.authorName?.text = if (it.user.name.isNotEmpty()) it.user.name else context.resources.getText(R.string.nc_guest) if (it.actorType == "bots" && it.actorId == "changelog") { val layers = arrayOfNulls(2) @@ -118,6 +128,42 @@ open class ChatPresenter(context: Context, private val onElementClickPa } } else { holder.itemView.authorLayout.isVisible = false + holder.itemView.authorName.isVisible = false + } + + val messageLayoutParams = holder.itemView.messageLayout.layoutParams as RelativeLayout.LayoutParams + + if (isOutgoingMessage) { + messageLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_END, 1) + messageLayoutParams.marginStart = 40.dp + } else { + messageLayoutParams.removeRule(RelativeLayout.ALIGN_PARENT_END) + messageLayoutParams.marginEnd = 40.dp + } + + + if (isGrouped) { + + if (isOutgoingMessage) { + messageLayoutParams.marginEnd = 8.dp + holder.itemView.messageLayout.background = context.resources.getDrawable(R.drawable.outgoing_grouped_message_background) + } else { + messageLayoutParams.marginStart = 40.dp + holder.itemView.messageLayout.background = context.resources.getDrawable(R.drawable.incoming_grouped_message_background) + } + holder.itemView.messageLayout.layoutParams = messageLayoutParams + + } else { + + if (isOutgoingMessage) { + messageLayoutParams.marginEnd = 8.dp + holder.itemView.messageLayout.background = context.resources.getDrawable(R.drawable.outgoing_message_background) + } else { + messageLayoutParams.marginStart = 0 + holder.itemView.messageLayout.background = context.resources.getDrawable(R.drawable.incoming_message_background) + } + + holder.itemView.messageLayout.layoutParams = messageLayoutParams } it.parentMessage?.let { parentMessage -> @@ -161,6 +207,11 @@ open class ChatPresenter(context: Context, private val onElementClickPa holder.itemView.quotedAuthor.text = if (parentMessage.user.name.isNotEmpty()) parentMessage.user.name else context.resources.getText(R.string.nc_guest) holder.itemView.quotedChatText.text = parentMessage.text holder.itemView.quotedMessageTime?.text = DateFormatter.format(it.createdAt, DateFormatter.Template.TIME) + if (isOutgoingMessage) { + holder.itemView.quoteColoredView.setBackgroundColor(context.resources.getColor(R.color.bg_message_list_incoming_bubble)) + } else { + holder.itemView.quoteColoredView.setBackgroundColor(context.resources.getColor(R.color.bg_message_list_outcoming_bubble)) + } } ?: run { holder.itemView.quotedMessageLayout.isVisible = false } diff --git a/app/src/main/res/drawable/incoming_grouped_message_background.xml b/app/src/main/res/drawable/incoming_grouped_message_background.xml new file mode 100644 index 000000000..e32f01812 --- /dev/null +++ b/app/src/main/res/drawable/incoming_grouped_message_background.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/incoming_message_background.xml b/app/src/main/res/drawable/incoming_message_background.xml new file mode 100644 index 000000000..3bdee1fa2 --- /dev/null +++ b/app/src/main/res/drawable/incoming_message_background.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/outgoing_grouped_message_background.xml b/app/src/main/res/drawable/outgoing_grouped_message_background.xml new file mode 100644 index 000000000..624934c3e --- /dev/null +++ b/app/src/main/res/drawable/outgoing_grouped_message_background.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/outgoing_message_background.xml b/app/src/main/res/drawable/outgoing_message_background.xml new file mode 100644 index 000000000..435cd22a0 --- /dev/null +++ b/app/src/main/res/drawable/outgoing_message_background.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_grouped_incoming_message.xml b/app/src/main/res/drawable/shape_grouped_incoming_message.xml deleted file mode 100644 index a6ee348b7..000000000 --- a/app/src/main/res/drawable/shape_grouped_incoming_message.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - diff --git a/app/src/main/res/drawable/shape_grouped_outcoming_message.xml b/app/src/main/res/drawable/shape_grouped_outcoming_message.xml deleted file mode 100644 index 22852f946..000000000 --- a/app/src/main/res/drawable/shape_grouped_outcoming_message.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - diff --git a/app/src/main/res/drawable/shape_incoming_message.xml b/app/src/main/res/drawable/shape_incoming_message.xml deleted file mode 100644 index b7b2b8f58..000000000 --- a/app/src/main/res/drawable/shape_incoming_message.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_message_quote.xml b/app/src/main/res/layout/item_message_quote.xml index 85a091bca..eb28a829e 100644 --- a/app/src/main/res/layout/item_message_quote.xml +++ b/app/src/main/res/layout/item_message_quote.xml @@ -5,7 +5,8 @@ android:id="@+id/quotedMessageLayout" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginBottom="4dp"> + android:clipToPadding="true" + android:layout_marginVertical="2dp"> - - - - - - - - - - - + android:id="@+id/messageLayout" + android:layout_toEndOf="@id/authorLayout" + android:background="@drawable/incoming_message_background"> + + + + + + + + + + + + \ No newline at end of file