Skip to content

Commit bb8ebb7

Browse files
authored
Merge pull request #8042 from vector-im/bugfix/fre/vb_move_last_message_behind_labs
[Voice Broadcast] Move the live broadcast computation in the room list behind the lab flag
2 parents a9152df + 2267d59 commit bb8ebb7

File tree

5 files changed

+23
-8
lines changed

5 files changed

+23
-8
lines changed

changelog.d/8042.misc

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[Voice Broadcast] Show Live broadcast in the room list only if the feature flag is enabled in the lab

vector/src/main/java/im/vector/app/features/home/room/list/usecase/GetLatestPreviewableEventUseCase.kt

+11-3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package im.vector.app.features.home.room.list.usecase
1818

1919
import im.vector.app.core.di.ActiveSessionHolder
20+
import im.vector.app.features.settings.VectorPreferences
2021
import im.vector.app.features.voicebroadcast.isLive
2122
import im.vector.app.features.voicebroadcast.isVoiceBroadcast
2223
import im.vector.app.features.voicebroadcast.model.asVoiceBroadcastEvent
@@ -35,14 +36,21 @@ import javax.inject.Inject
3536
class GetLatestPreviewableEventUseCase @Inject constructor(
3637
private val sessionHolder: ActiveSessionHolder,
3738
private val getRoomLiveVoiceBroadcastsUseCase: GetRoomLiveVoiceBroadcastsUseCase,
39+
private val vectorPreferences: VectorPreferences,
3840
) {
3941

4042
fun execute(roomId: String): TimelineEvent? {
4143
val room = sessionHolder.getSafeActiveSession()?.getRoom(roomId) ?: return null
4244
val roomSummary = room.roomSummary() ?: return null
43-
return getCallEvent(roomSummary)
44-
?: getLiveVoiceBroadcastEvent(room)
45-
?: getDefaultLatestEvent(room, roomSummary)
45+
// FIXME Observing live broadcasts results in many db requests,
46+
// to prevent performances issues, we only enable this mechanism if the voice broadcast flag is enabled
47+
return if (vectorPreferences.isVoiceBroadcastEnabled()) {
48+
getCallEvent(roomSummary)
49+
?: getLiveVoiceBroadcastEvent(room)
50+
?: getDefaultLatestEvent(room, roomSummary)
51+
} else {
52+
roomSummary.latestPreviewableEvent
53+
}
4654
}
4755

4856
private fun getCallEvent(roomSummary: RoomSummary): TimelineEvent? {

vector/src/main/java/im/vector/app/features/voicebroadcast/listening/usecase/GetLiveVoiceBroadcastChunksUseCase.kt

+3-5
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,15 @@ import im.vector.app.features.voicebroadcast.model.VoiceBroadcastEvent
2424
import im.vector.app.features.voicebroadcast.model.VoiceBroadcastState
2525
import im.vector.app.features.voicebroadcast.model.asVoiceBroadcastEvent
2626
import im.vector.app.features.voicebroadcast.sequence
27-
import im.vector.app.features.voicebroadcast.usecase.GetVoiceBroadcastStateEventLiveUseCase
27+
import im.vector.app.features.voicebroadcast.usecase.GetVoiceBroadcastStateEventUseCase
2828
import im.vector.app.features.voicebroadcast.voiceBroadcastId
2929
import kotlinx.coroutines.channels.awaitClose
3030
import kotlinx.coroutines.flow.Flow
3131
import kotlinx.coroutines.flow.callbackFlow
3232
import kotlinx.coroutines.flow.emptyFlow
33-
import kotlinx.coroutines.flow.firstOrNull
3433
import kotlinx.coroutines.flow.flowOf
3534
import kotlinx.coroutines.flow.map
3635
import kotlinx.coroutines.flow.runningReduce
37-
import kotlinx.coroutines.runBlocking
3836
import org.matrix.android.sdk.api.session.events.model.RelationType
3937
import org.matrix.android.sdk.api.session.room.model.message.MessageAudioEvent
4038
import org.matrix.android.sdk.api.session.room.model.message.asMessageAudioEvent
@@ -48,7 +46,7 @@ import javax.inject.Inject
4846
*/
4947
class GetLiveVoiceBroadcastChunksUseCase @Inject constructor(
5048
private val activeSessionHolder: ActiveSessionHolder,
51-
private val getVoiceBroadcastEventUseCase: GetVoiceBroadcastStateEventLiveUseCase,
49+
private val getVoiceBroadcastEventUseCase: GetVoiceBroadcastStateEventUseCase,
5250
) {
5351

5452
fun execute(voiceBroadcast: VoiceBroadcast): Flow<List<MessageAudioEvent>> {
@@ -60,7 +58,7 @@ class GetLiveVoiceBroadcastChunksUseCase @Inject constructor(
6058
val existingChunks = room.timelineService().getTimelineEventsRelatedTo(RelationType.REFERENCE, voiceBroadcast.voiceBroadcastId)
6159
.mapNotNull { timelineEvent -> timelineEvent.root.asMessageAudioEvent().takeIf { it.isVoiceBroadcast() } }
6260

63-
val voiceBroadcastEvent = runBlocking { getVoiceBroadcastEventUseCase.execute(voiceBroadcast).firstOrNull()?.getOrNull() }
61+
val voiceBroadcastEvent = getVoiceBroadcastEventUseCase.execute(voiceBroadcast)
6462
val voiceBroadcastState = voiceBroadcastEvent?.content?.voiceBroadcastState
6563

6664
return if (voiceBroadcastState == null || voiceBroadcastState == VoiceBroadcastState.STOPPED) {

vector/src/test/java/im/vector/app/features/home/room/list/usecase/GetLatestPreviewableEventUseCaseTest.kt

+4
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import im.vector.app.features.voicebroadcast.model.asVoiceBroadcastEvent
2323
import im.vector.app.features.voicebroadcast.usecase.GetRoomLiveVoiceBroadcastsUseCase
2424
import im.vector.app.test.fakes.FakeActiveSessionHolder
2525
import im.vector.app.test.fakes.FakeRoom
26+
import im.vector.app.test.fakes.FakeVectorPreferences
2627
import io.mockk.every
2728
import io.mockk.mockk
2829
import org.amshove.kluent.shouldBe
@@ -46,10 +47,12 @@ internal class GetLatestPreviewableEventUseCaseTest {
4647
private val fakeSessionHolder = FakeActiveSessionHolder()
4748
private val fakeRoomSummary = mockk<RoomSummary>()
4849
private val fakeGetRoomLiveVoiceBroadcastsUseCase = mockk<GetRoomLiveVoiceBroadcastsUseCase>()
50+
private val fakeVectorPreferences = FakeVectorPreferences()
4951

5052
private val getLatestPreviewableEventUseCase = GetLatestPreviewableEventUseCase(
5153
fakeSessionHolder.instance,
5254
fakeGetRoomLiveVoiceBroadcastsUseCase,
55+
fakeVectorPreferences.instance,
5356
)
5457

5558
@Before
@@ -62,6 +65,7 @@ internal class GetLatestPreviewableEventUseCaseTest {
6265
every { eventId } returns firstArg()
6366
}
6467
}
68+
fakeVectorPreferences.givenIsVoiceBroadcastEnabled(true)
6569
}
6670

6771
@Test

vector/src/test/java/im/vector/app/test/fakes/FakeVectorPreferences.kt

+4
Original file line numberDiff line numberDiff line change
@@ -85,4 +85,8 @@ class FakeVectorPreferences {
8585
fun verifySetIpAddressVisibilityInDeviceManagerScreens(isVisible: Boolean) {
8686
verify { instance.setIpAddressVisibilityInDeviceManagerScreens(isVisible) }
8787
}
88+
89+
fun givenIsVoiceBroadcastEnabled(isEnabled: Boolean) {
90+
every { instance.isVoiceBroadcastEnabled() } returns isEnabled
91+
}
8892
}

0 commit comments

Comments
 (0)