Skip to content

Commit 5725e32

Browse files
committed
change (preferences) : bind timeline media preview with join rule
1 parent ca1c2ae commit 5725e32

File tree

2 files changed

+29
-17
lines changed

2 files changed

+29
-17
lines changed

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/protection/TimelineProtectionPresenter.kt

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import androidx.compose.runtime.setValue
1717
import io.element.android.libraries.architecture.Presenter
1818
import io.element.android.libraries.matrix.api.core.EventId
1919
import io.element.android.libraries.matrix.api.media.MediaPreviewValue
20+
import io.element.android.libraries.matrix.api.media.isPreviewEnabled
2021
import io.element.android.libraries.matrix.api.room.MatrixRoom
2122
import io.element.android.libraries.preferences.api.store.AppPreferencesStore
2223
import kotlinx.collections.immutable.toImmutableSet
@@ -26,37 +27,29 @@ class TimelineProtectionPresenter @Inject constructor(
2627
private val appPreferencesStore: AppPreferencesStore,
2728
private val room: MatrixRoom,
2829
) : Presenter<TimelineProtectionState> {
30+
private val allowedEvents = mutableStateOf<Set<EventId>>(setOf())
31+
2932
@Composable
3033
override fun present(): TimelineProtectionState {
3134
val mediaPreviewValue = remember {
3235
appPreferencesStore.getTimelineMediaPreviewValueFlow()
33-
}.collectAsState(initial = MediaPreviewValue.Off)
34-
var allowedEvents by remember { mutableStateOf<Set<EventId>>(setOf()) }
36+
}.collectAsState(initial = MediaPreviewValue.On)
3537
val roomInfo = room.roomInfoFlow.collectAsState()
3638
val protectionState by remember {
3739
derivedStateOf {
38-
when (mediaPreviewValue.value) {
39-
MediaPreviewValue.On -> {
40-
ProtectionState.RenderAll
41-
}
42-
MediaPreviewValue.Off -> {
43-
ProtectionState.RenderOnly(eventIds = allowedEvents.toImmutableSet())
44-
}
45-
MediaPreviewValue.Private -> {
46-
if (roomInfo.value.isPublic) {
47-
ProtectionState.RenderOnly(eventIds = allowedEvents.toImmutableSet())
48-
} else {
49-
ProtectionState.RenderAll
50-
}
51-
}
40+
val isPreviewEnabled = mediaPreviewValue.value.isPreviewEnabled(roomInfo.value.joinRule)
41+
if (isPreviewEnabled) {
42+
ProtectionState.RenderAll
43+
} else {
44+
ProtectionState.RenderOnly(eventIds = allowedEvents.value.toImmutableSet())
5245
}
5346
}
5447
}
5548

5649
fun handleEvent(event: TimelineProtectionEvent) {
5750
when (event) {
5851
is TimelineProtectionEvent.ShowContent -> {
59-
allowedEvents = allowedEvents + setOfNotNull(event.eventId)
52+
allowedEvents.value = allowedEvents.value + setOfNotNull(event.eventId)
6053
}
6154
}
6255
}

libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/media/MediaPreviewValue.kt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@
77

88
package io.element.android.libraries.matrix.api.media
99

10+
import io.element.android.libraries.matrix.api.media.MediaPreviewValue.Off
11+
import io.element.android.libraries.matrix.api.media.MediaPreviewValue.On
12+
import io.element.android.libraries.matrix.api.media.MediaPreviewValue.Private
13+
import io.element.android.libraries.matrix.api.room.join.JoinRule
14+
1015
/**
1116
* Represents the values for media preview settings.
1217
* - [On] means that media preview are enabled
@@ -18,3 +23,17 @@ enum class MediaPreviewValue {
1823
Off,
1924
Private
2025
}
26+
27+
fun MediaPreviewValue.isPreviewEnabled(joinRule: JoinRule?): Boolean {
28+
return when (this) {
29+
On -> true
30+
Off -> false
31+
Private -> when (joinRule) {
32+
is JoinRule.Knock,
33+
is JoinRule.Invite,
34+
is JoinRule.Restricted,
35+
is JoinRule.KnockRestricted -> true
36+
else -> false
37+
}
38+
}
39+
}

0 commit comments

Comments
 (0)