Transform MessageEventType and StateEventType into sealed interfaces to handle the Custom variant, also add missing variants

This commit is contained in:
Jorge Martín 2025-12-22 10:09:37 +01:00 committed by Jorge Martin Espinosa
parent 0ed40c562d
commit a8ffe46d99
16 changed files with 230 additions and 164 deletions

View file

@ -12,10 +12,21 @@ import androidx.compose.runtime.Immutable
@Immutable
sealed interface MessageEventType {
data object Audio : MessageEventType
data object Beacon : MessageEventType
data object CallAnswer : MessageEventType
data object CallCandidates : MessageEventType
data object CallInvite : MessageEventType
data object CallHangup : MessageEventType
data object CallCandidates : MessageEventType
data object CallNegotiate : MessageEventType
data object CallNotify : MessageEventType
data object CallReject : MessageEventType
data object CallSdpStreamMetadataChanged : MessageEventType
data object CallSelectAnswer : MessageEventType
data object Emote : MessageEventType
data object Encrypted : MessageEventType
data object File : MessageEventType
data object Image : MessageEventType
data object RtcNotification : MessageEventType
data object KeyVerificationReady : MessageEventType
data object KeyVerificationStart : MessageEventType
@ -24,10 +35,13 @@ sealed interface MessageEventType {
data object KeyVerificationKey : MessageEventType
data object KeyVerificationMac : MessageEventType
data object KeyVerificationDone : MessageEventType
data object Location : MessageEventType
data object Message : MessageEventType
data object Reaction : MessageEventType
data object RoomEncrypted : MessageEventType
data object RoomMessage : MessageEventType
data object RoomRedaction : MessageEventType
data object RtcDecline : MessageEventType
data object Sticker : MessageEventType
data object PollEnd : MessageEventType
data object PollResponse : MessageEventType
@ -35,5 +49,7 @@ sealed interface MessageEventType {
data object UnstablePollEnd : MessageEventType
data object UnstablePollResponse : MessageEventType
data object UnstablePollStart : MessageEventType
data object Video : MessageEventType
data object Voice : MessageEventType
data class Other(val type: String) : MessageEventType
}

View file

@ -8,27 +8,33 @@
package io.element.android.libraries.matrix.api.room
enum class StateEventType {
POLICY_RULE_ROOM,
POLICY_RULE_SERVER,
POLICY_RULE_USER,
CALL_MEMBER,
ROOM_ALIASES,
ROOM_AVATAR,
ROOM_CANONICAL_ALIAS,
ROOM_CREATE,
ROOM_ENCRYPTION,
ROOM_GUEST_ACCESS,
ROOM_HISTORY_VISIBILITY,
ROOM_JOIN_RULES,
ROOM_MEMBER_EVENT,
ROOM_NAME,
ROOM_PINNED_EVENTS,
ROOM_POWER_LEVELS,
ROOM_SERVER_ACL,
ROOM_THIRD_PARTY_INVITE,
ROOM_TOMBSTONE,
ROOM_TOPIC,
SPACE_CHILD,
SPACE_PARENT
sealed interface StateEventType {
data object PolicyRuleRoom : StateEventType
data object PolicyRuleServer : StateEventType
data object PolicyRuleUser : StateEventType
data object CallMember : StateEventType
data object RoomAliases : StateEventType
data object RoomAvatar : StateEventType
data object RoomCanonicalAlias : StateEventType
data object RoomCreate : StateEventType
data object RoomEncryption : StateEventType
data object RoomGuestAccess : StateEventType
data object RoomHistoryVisibility : StateEventType
data object RoomJoinRules : StateEventType
data object RoomMemberEvent : StateEventType
data object RoomName : StateEventType
data object RoomPinnedEvents : StateEventType
data object RoomPowerLevels : StateEventType
data object RoomServerAcl : StateEventType
data object RoomThirdPartyInvite : StateEventType
data object RoomTombstone : StateEventType
data object RoomTopic : StateEventType
data object SpaceChild : StateEventType
data object SpaceParent : StateEventType
data object BeaconInfo : StateEventType
data object MemberHints : StateEventType
data object RoomImagePack : StateEventType
data object RoomLanguage : StateEventType
data class Custom(val type: String) : StateEventType
}

View file

@ -136,7 +136,7 @@ interface RoomPermissions : AutoCloseable {
* a power levels state event.
*/
fun RoomPermissions.canEditRolesAndPermissions(): Boolean {
return canOwnUserSendState(StateEventType.ROOM_POWER_LEVELS)
return canOwnUserSendState(StateEventType.RoomPowerLevels)
}
/**
@ -144,7 +144,7 @@ fun RoomPermissions.canEditRolesAndPermissions(): Boolean {
* a call member state event.
*/
fun RoomPermissions.canCall(): Boolean {
return canOwnUserSendState(StateEventType.CALL_MEMBER)
return canOwnUserSendState(StateEventType.CallMember)
}
fun <T> Result<RoomPermissions>.use(default: T, block: (RoomPermissions) -> T): T {