Merge pull request #989 from vector-im/feature/bma/noEmojiForStateEvent

Prevent reaction on state events and deleted events
This commit is contained in:
Benoit Marty
2023-07-28 16:56:50 +02:00
committed by GitHub
2 changed files with 22 additions and 1 deletions

View File

@@ -28,6 +28,7 @@ import io.element.android.features.messages.impl.timeline.model.TimelineItem
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemRedactedContent
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemStateContent
import io.element.android.features.messages.impl.timeline.model.event.canBeCopied
import io.element.android.features.messages.impl.timeline.model.event.canReact
import io.element.android.libraries.architecture.Presenter
import io.element.android.libraries.core.meta.BuildMeta
import kotlinx.collections.immutable.toImmutableList
@@ -48,7 +49,10 @@ class ActionListPresenter @Inject constructor(
}
val displayEmojiReactions by remember {
derivedStateOf { (target.value as? ActionListState.Target.Success)?.event?.isRemote == true }
derivedStateOf {
val event = (target.value as? ActionListState.Target.Success)?.event
event?.isRemote == true && event.content.canReact()
}
}
fun handleEvents(event: ActionListEvents) {

View File

@@ -33,3 +33,20 @@ fun TimelineItemEventContent.canBeCopied(): Boolean =
is TimelineItemRedactedContent -> true
else -> false
}
/**
* Return true if user can react (i.e. send a reaction) on the event content.
*/
fun TimelineItemEventContent.canReact(): Boolean =
when (this) {
is TimelineItemTextBasedContent,
is TimelineItemAudioContent,
is TimelineItemEncryptedContent,
is TimelineItemFileContent,
is TimelineItemImageContent,
is TimelineItemLocationContent,
is TimelineItemVideoContent -> true
is TimelineItemStateContent,
is TimelineItemRedactedContent,
TimelineItemUnknownContent -> false
}