Skip to content

Commit b9f4740

Browse files
authored
Merge pull request #7283 from vector-im/feature/fre/aggregate_voice_broadcast_state_events
Aggregate voice broadcast state events
2 parents 48d2cc4 + 0a047b6 commit b9f4740

File tree

4 files changed

+30
-8
lines changed

4 files changed

+30
-8
lines changed

changelog.d/7283.wip

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[Voice Broadcast] Aggregate state events in the timeline

vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/MessageItemFactory.kt

+10-2
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,9 @@ import im.vector.app.features.home.room.detail.timeline.helper.ContentUploadStat
4343
import im.vector.app.features.home.room.detail.timeline.helper.LocationPinProvider
4444
import im.vector.app.features.home.room.detail.timeline.helper.MessageInformationDataFactory
4545
import im.vector.app.features.home.room.detail.timeline.helper.MessageItemAttributesFactory
46+
import im.vector.app.features.home.room.detail.timeline.helper.TimelineEventsGroup
4647
import im.vector.app.features.home.room.detail.timeline.helper.TimelineMediaSizeProvider
48+
import im.vector.app.features.home.room.detail.timeline.helper.VoiceBroadcastEventsGroup
4749
import im.vector.app.features.home.room.detail.timeline.item.AbsMessageItem
4850
import im.vector.app.features.home.room.detail.timeline.item.MessageAudioItem
4951
import im.vector.app.features.home.room.detail.timeline.item.MessageAudioItem_
@@ -81,6 +83,7 @@ import im.vector.app.features.media.VideoContentRenderer
8183
import im.vector.app.features.settings.VectorPreferences
8284
import im.vector.app.features.voice.AudioWaveformView
8385
import im.vector.app.features.voicebroadcast.model.MessageVoiceBroadcastInfoContent
86+
import im.vector.app.features.voicebroadcast.model.VoiceBroadcastState
8487
import im.vector.lib.core.utils.epoxy.charsequence.toEpoxyCharSequence
8588
import me.gujun.android.span.span
8689
import org.matrix.android.sdk.api.MatrixUrls.isMxcUrl
@@ -200,7 +203,7 @@ class MessageItemFactory @Inject constructor(
200203
is MessagePollContent -> buildPollItem(messageContent, informationData, highlight, callback, attributes)
201204
is MessageLocationContent -> buildLocationItem(messageContent, informationData, highlight, attributes)
202205
is MessageBeaconInfoContent -> liveLocationShareMessageItemFactory.create(params.event, highlight, attributes)
203-
is MessageVoiceBroadcastInfoContent -> buildVoiceBroadcastItem(messageContent, highlight, callback, attributes)
206+
is MessageVoiceBroadcastInfoContent -> buildVoiceBroadcastItem(messageContent, params.eventsGroup, highlight, callback, attributes)
204207
else -> buildNotHandledMessageItem(messageContent, informationData, highlight, callback, attributes)
205208
}
206209
return messageItem?.apply {
@@ -712,14 +715,19 @@ class MessageItemFactory @Inject constructor(
712715

713716
private fun buildVoiceBroadcastItem(
714717
messageContent: MessageVoiceBroadcastInfoContent,
718+
eventsGroup: TimelineEventsGroup?,
715719
highlight: Boolean,
716720
callback: TimelineEventController.Callback?,
717721
attributes: AbsMessageItem.Attributes,
718722
): MessageVoiceBroadcastItem? {
723+
if (messageContent.voiceBroadcastState != VoiceBroadcastState.STARTED) return null
724+
val voiceBroadcastEventsGroup = eventsGroup?.let { VoiceBroadcastEventsGroup(it) } ?: return null
725+
val mostRecentEvent = voiceBroadcastEventsGroup.getLastEvent()
726+
val mostRecentMessageContent = (mostRecentEvent.getVectorLastMessageContent() as? MessageVoiceBroadcastInfoContent) ?: return null
719727
return MessageVoiceBroadcastItem_()
720728
.attributes(attributes)
721729
.highlighted(highlight)
722-
.voiceBroadcastState(messageContent.voiceBroadcastState)
730+
.voiceBroadcastState(mostRecentMessageContent.voiceBroadcastState)
723731
.leftGuideline(avatarSizeProvider.leftGuideline)
724732
.callback(callback)
725733
}

vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/TimelineEventsGroups.kt

+17-6
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
package im.vector.app.features.home.room.detail.timeline.helper
1818

1919
import im.vector.app.core.utils.TextUtils
20+
import im.vector.app.features.voicebroadcast.STATE_ROOM_VOICE_BROADCAST_INFO
21+
import im.vector.app.features.voicebroadcast.model.VoiceBroadcastState
22+
import im.vector.app.features.voicebroadcast.model.asVoiceBroadcastEvent
2023
import org.matrix.android.sdk.api.extensions.orFalse
2124
import org.matrix.android.sdk.api.session.events.model.EventType
2225
import org.matrix.android.sdk.api.session.events.model.toModel
@@ -54,12 +57,13 @@ class TimelineEventsGroups {
5457
private fun TimelineEvent.getGroupIdOrNull(): String? {
5558
val type = root.getClearType()
5659
val content = root.getClearContent()
57-
return if (EventType.isCallEvent(type)) {
58-
(content?.get("call_id") as? String)
59-
} else if (type == EventType.STATE_ROOM_WIDGET || type == EventType.STATE_ROOM_WIDGET_LEGACY) {
60-
root.stateKey
61-
} else {
62-
null
60+
return when {
61+
EventType.isCallEvent(type) -> (content?.get("call_id") as? String)
62+
type == STATE_ROOM_VOICE_BROADCAST_INFO -> root.asVoiceBroadcastEvent()?.reference?.eventId
63+
type == EventType.STATE_ROOM_WIDGET || type == EventType.STATE_ROOM_WIDGET_LEGACY -> root.stateKey
64+
else -> {
65+
null
66+
}
6367
}
6468
}
6569

@@ -128,3 +132,10 @@ class CallSignalingEventsGroup(private val group: TimelineEventsGroup) {
128132
return group.events.firstOrNull { it.root.getClearType() == EventType.CALL_REJECT }
129133
}
130134
}
135+
136+
class VoiceBroadcastEventsGroup(private val group: TimelineEventsGroup) {
137+
fun getLastEvent(): TimelineEvent {
138+
return group.events.find { it.root.asVoiceBroadcastEvent()?.content?.voiceBroadcastState == VoiceBroadcastState.STOPPED }
139+
?: group.events.maxBy { it.root.originServerTs ?: 0L }
140+
}
141+
}

vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageVoiceBroadcastItem.kt

+2
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ abstract class MessageVoiceBroadcastItem : AbsMessageItem<MessageVoiceBroadcastI
3535
@EpoxyAttribute
3636
var voiceBroadcastState: VoiceBroadcastState? = null
3737

38+
override fun isCacheable(): Boolean = false
39+
3840
override fun bind(holder: Holder) {
3941
super.bind(holder)
4042
bindVoiceBroadcastItem(holder)

0 commit comments

Comments
 (0)