change (preferences) : bind timeline media preview with join rule
This commit is contained in:
parent
ca1c2ae4a4
commit
5725e328fe
2 changed files with 29 additions and 17 deletions
|
|
@ -17,6 +17,7 @@ import androidx.compose.runtime.setValue
|
|||
import io.element.android.libraries.architecture.Presenter
|
||||
import io.element.android.libraries.matrix.api.core.EventId
|
||||
import io.element.android.libraries.matrix.api.media.MediaPreviewValue
|
||||
import io.element.android.libraries.matrix.api.media.isPreviewEnabled
|
||||
import io.element.android.libraries.matrix.api.room.MatrixRoom
|
||||
import io.element.android.libraries.preferences.api.store.AppPreferencesStore
|
||||
import kotlinx.collections.immutable.toImmutableSet
|
||||
|
|
@ -26,29 +27,21 @@ class TimelineProtectionPresenter @Inject constructor(
|
|||
private val appPreferencesStore: AppPreferencesStore,
|
||||
private val room: MatrixRoom,
|
||||
) : Presenter<TimelineProtectionState> {
|
||||
private val allowedEvents = mutableStateOf<Set<EventId>>(setOf())
|
||||
|
||||
@Composable
|
||||
override fun present(): TimelineProtectionState {
|
||||
val mediaPreviewValue = remember {
|
||||
appPreferencesStore.getTimelineMediaPreviewValueFlow()
|
||||
}.collectAsState(initial = MediaPreviewValue.Off)
|
||||
var allowedEvents by remember { mutableStateOf<Set<EventId>>(setOf()) }
|
||||
}.collectAsState(initial = MediaPreviewValue.On)
|
||||
val roomInfo = room.roomInfoFlow.collectAsState()
|
||||
val protectionState by remember {
|
||||
derivedStateOf {
|
||||
when (mediaPreviewValue.value) {
|
||||
MediaPreviewValue.On -> {
|
||||
ProtectionState.RenderAll
|
||||
}
|
||||
MediaPreviewValue.Off -> {
|
||||
ProtectionState.RenderOnly(eventIds = allowedEvents.toImmutableSet())
|
||||
}
|
||||
MediaPreviewValue.Private -> {
|
||||
if (roomInfo.value.isPublic) {
|
||||
ProtectionState.RenderOnly(eventIds = allowedEvents.toImmutableSet())
|
||||
} else {
|
||||
ProtectionState.RenderAll
|
||||
}
|
||||
}
|
||||
val isPreviewEnabled = mediaPreviewValue.value.isPreviewEnabled(roomInfo.value.joinRule)
|
||||
if (isPreviewEnabled) {
|
||||
ProtectionState.RenderAll
|
||||
} else {
|
||||
ProtectionState.RenderOnly(eventIds = allowedEvents.value.toImmutableSet())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -56,7 +49,7 @@ class TimelineProtectionPresenter @Inject constructor(
|
|||
fun handleEvent(event: TimelineProtectionEvent) {
|
||||
when (event) {
|
||||
is TimelineProtectionEvent.ShowContent -> {
|
||||
allowedEvents = allowedEvents + setOfNotNull(event.eventId)
|
||||
allowedEvents.value = allowedEvents.value + setOfNotNull(event.eventId)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,6 +7,11 @@
|
|||
|
||||
package io.element.android.libraries.matrix.api.media
|
||||
|
||||
import io.element.android.libraries.matrix.api.media.MediaPreviewValue.Off
|
||||
import io.element.android.libraries.matrix.api.media.MediaPreviewValue.On
|
||||
import io.element.android.libraries.matrix.api.media.MediaPreviewValue.Private
|
||||
import io.element.android.libraries.matrix.api.room.join.JoinRule
|
||||
|
||||
/**
|
||||
* Represents the values for media preview settings.
|
||||
* - [On] means that media preview are enabled
|
||||
|
|
@ -18,3 +23,17 @@ enum class MediaPreviewValue {
|
|||
Off,
|
||||
Private
|
||||
}
|
||||
|
||||
fun MediaPreviewValue.isPreviewEnabled(joinRule: JoinRule?): Boolean {
|
||||
return when (this) {
|
||||
On -> true
|
||||
Off -> false
|
||||
Private -> when (joinRule) {
|
||||
is JoinRule.Knock,
|
||||
is JoinRule.Invite,
|
||||
is JoinRule.Restricted,
|
||||
is JoinRule.KnockRestricted -> true
|
||||
else -> false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue