From f7c9b36cef33a037c0237f0c37f817ccdb542042 Mon Sep 17 00:00:00 2001 From: ganfra Date: Tue, 11 Jan 2022 11:57:35 +0100 Subject: [PATCH] Bubbles: continue exploration --- .../main/res/values/stylable_message_bubble.xml | 2 +- .../detail/timeline/TimelineEventController.kt | 4 ++++ .../timeline/factory/TimelineItemFactoryParams.kt | 1 + .../helper/MessageInformationDataFactory.kt | 10 ++++++---- .../detail/timeline/item/MessageImageVideoItem.kt | 3 +-- .../detail/timeline/view/MessageBubbleView.kt | 15 ++++++--------- .../timeline/view/MessageViewConfiguration.kt | 2 +- .../item_timeline_event_media_message_stub.xml | 2 -- 8 files changed, 20 insertions(+), 19 deletions(-) diff --git a/library/ui-styles/src/main/res/values/stylable_message_bubble.xml b/library/ui-styles/src/main/res/values/stylable_message_bubble.xml index 32ed23c613..f7a877e3ed 100644 --- a/library/ui-styles/src/main/res/values/stylable_message_bubble.xml +++ b/library/ui-styles/src/main/res/values/stylable_message_bubble.xml @@ -3,7 +3,7 @@ - + diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/TimelineEventController.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/TimelineEventController.kt index dc5c76725b..460c332812 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/TimelineEventController.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/TimelineEventController.kt @@ -358,6 +358,9 @@ class TimelineEventController @Inject constructor(private val dateFormatter: Vec // Should be build if not cached or if model should be refreshed if (modelCache[position] == null || modelCache[position]?.isCacheable(partialState) == false) { val prevEvent = currentSnapshot.prevOrNull(position) + val prevDisplayableEvent = currentSnapshot.subList(0, position).lastOrNull { + timelineEventVisibilityHelper.shouldShowEvent(it, partialState.highlightedEventId) + } val nextDisplayableEvent = currentSnapshot.subList(position + 1, currentSnapshot.size).firstOrNull { timelineEventVisibilityHelper.shouldShowEvent(it, partialState.highlightedEventId) } @@ -365,6 +368,7 @@ class TimelineEventController @Inject constructor(private val dateFormatter: Vec val params = TimelineItemFactoryParams( event = event, prevEvent = prevEvent, + prevDisplayableEvent = prevDisplayableEvent, nextEvent = nextEvent, nextDisplayableEvent = nextDisplayableEvent, partialState = partialState, diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/TimelineItemFactoryParams.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/TimelineItemFactoryParams.kt index cdfedb2925..fad558344c 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/TimelineItemFactoryParams.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/TimelineItemFactoryParams.kt @@ -23,6 +23,7 @@ import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent data class TimelineItemFactoryParams( val event: TimelineEvent, val prevEvent: TimelineEvent? = null, + val prevDisplayableEvent: TimelineEvent? = null, val nextEvent: TimelineEvent? = null, val nextDisplayableEvent: TimelineEvent? = null, val partialState: TimelineEventController.PartialState = TimelineEventController.PartialState(), diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/MessageInformationDataFactory.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/MessageInformationDataFactory.kt index b9ef9ca558..b9ea78e0db 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/MessageInformationDataFactory.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/MessageInformationDataFactory.kt @@ -57,19 +57,21 @@ class MessageInformationDataFactory @Inject constructor(private val session: Ses fun create(params: TimelineItemFactoryParams): MessageInformationData { val event = params.event val nextDisplayableEvent = params.nextDisplayableEvent - val prevEvent = params.prevEvent + val prevDisplayableEvent = params.prevDisplayableEvent val eventId = event.eventId val isSentByMe = event.root.senderId == session.myUserId - val isFirstFromThisSender = nextDisplayableEvent?.root?.senderId != event.root.senderId - val isLastFromThisSender = prevEvent?.root?.senderId != event.root.senderId val roomSummary = params.partialState.roomSummary val date = event.root.localDateTime() val nextDate = nextDisplayableEvent?.root?.localDateTime() val addDaySeparator = date.toLocalDate() != nextDate?.toLocalDate() + val isNextMessageReceivedMoreThanOneHourAgo = nextDate?.isBefore(date.minusMinutes(60)) ?: false + val isFirstFromThisSender = nextDisplayableEvent?.root?.senderId != event.root.senderId || addDaySeparator + val isLastFromThisSender = prevDisplayableEvent?.root?.senderId != event.root.senderId || prevDisplayableEvent?.root?.localDateTime()?.toLocalDate() != date.toLocalDate() + val showInformation = (addDaySeparator || event.senderInfo.avatarUrl != nextDisplayableEvent?.senderInfo?.avatarUrl || @@ -77,7 +79,7 @@ class MessageInformationDataFactory @Inject constructor(private val session: Ses nextDisplayableEvent.root.getClearType() !in listOf(EventType.MESSAGE, EventType.STICKER, EventType.ENCRYPTED) || isNextMessageReceivedMoreThanOneHourAgo || isTileTypeMessage(nextDisplayableEvent) || - nextDisplayableEvent.isEdition() ) && !isSentByMe + nextDisplayableEvent.isEdition()) && !isSentByMe val time = dateFormatter.format(event.root.originServerTs, DateFormatKind.MESSAGE_SIMPLE) val e2eDecoration = getE2EDecoration(roomSummary, event) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageImageVideoItem.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageImageVideoItem.kt index 8e42297bc1..e865354747 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageImageVideoItem.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageImageVideoItem.kt @@ -29,7 +29,6 @@ import im.vector.app.core.epoxy.onClick import im.vector.app.core.files.LocalFilesHelper import im.vector.app.core.glide.GlideApp import im.vector.app.features.home.room.detail.timeline.helper.ContentUploadStateTrackerBinder -import im.vector.app.features.home.room.detail.timeline.view.MessageBubbleView import im.vector.app.features.home.room.detail.timeline.view.MessageViewConfiguration import im.vector.app.features.media.ImageContentRenderer @@ -72,7 +71,7 @@ abstract class MessageImageVideoItem : AbsMessageItem