@@ -17,23 +17,38 @@ import androidx.compose.runtime.setValue
17
17
import io.element.android.libraries.architecture.Presenter
18
18
import io.element.android.libraries.matrix.api.core.EventId
19
19
import io.element.android.libraries.matrix.api.media.MediaPreviewValue
20
+ import io.element.android.libraries.matrix.api.room.MatrixRoom
20
21
import io.element.android.libraries.preferences.api.store.AppPreferencesStore
21
22
import kotlinx.collections.immutable.toImmutableSet
22
23
import javax.inject.Inject
23
24
24
25
class TimelineProtectionPresenter @Inject constructor(
25
26
private val appPreferencesStore : AppPreferencesStore ,
27
+ private val room : MatrixRoom ,
26
28
) : Presenter<TimelineProtectionState> {
27
29
@Composable
28
30
override fun present (): TimelineProtectionState {
29
- val mediaPreviewValue = appPreferencesStore.getTimelineMediaPreviewValueFlow().collectAsState(initial = MediaPreviewValue .Off )
31
+ val mediaPreviewValue = remember {
32
+ appPreferencesStore.getTimelineMediaPreviewValueFlow()
33
+ }.collectAsState(initial = MediaPreviewValue .Off )
30
34
var allowedEvents by remember { mutableStateOf<Set <EventId >>(setOf ()) }
35
+ val roomInfo = room.roomInfoFlow.collectAsState()
31
36
val protectionState by remember {
32
37
derivedStateOf {
33
- if (mediaPreviewValue.value == MediaPreviewValue .On ) {
34
- ProtectionState .RenderAll
35
- } else {
36
- ProtectionState .RenderOnly (eventIds = allowedEvents.toImmutableSet())
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
+ }
37
52
}
38
53
}
39
54
}
0 commit comments