Browse Source

Merge branch 'develop' into feature/fga/pinned_message_banner_logic

pull/3275/head
ganfra 1 month ago
parent
commit
583625e4d4
  1. 1
      appconfig/src/main/kotlin/io/element/android/appconfig/TimelineConfig.kt
  2. 2
      build.gradle.kts
  3. 37
      libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/StateContentFormatter.kt
  4. 2
      libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatterTest.kt
  5. 9
      libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/OtherState.kt
  6. 11
      libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/TimelineEventContentMapper.kt

1
appconfig/src/main/kotlin/io/element/android/appconfig/TimelineConfig.kt

@ -31,7 +31,6 @@ object TimelineConfig {
StateEventType.ROOM_GUEST_ACCESS, StateEventType.ROOM_GUEST_ACCESS,
StateEventType.ROOM_HISTORY_VISIBILITY, StateEventType.ROOM_HISTORY_VISIBILITY,
StateEventType.ROOM_JOIN_RULES, StateEventType.ROOM_JOIN_RULES,
StateEventType.ROOM_PINNED_EVENTS,
StateEventType.ROOM_POWER_LEVELS, StateEventType.ROOM_POWER_LEVELS,
StateEventType.ROOM_SERVER_ACL, StateEventType.ROOM_SERVER_ACL,
StateEventType.ROOM_TOMBSTONE, StateEventType.ROOM_TOMBSTONE,

2
build.gradle.kts

@ -61,7 +61,7 @@ allprojects {
config.from(files("$rootDir/tools/detekt/detekt.yml")) config.from(files("$rootDir/tools/detekt/detekt.yml"))
} }
dependencies { dependencies {
detektPlugins("io.nlopez.compose.rules:detekt:0.4.8") detektPlugins("io.nlopez.compose.rules:detekt:0.4.9")
} }
// KtLint // KtLint

37
libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/StateContentFormatter.kt

@ -80,6 +80,15 @@ class StateContentFormatter @Inject constructor(
else -> sp.getString(R.string.state_event_room_topic_removed, senderDisambiguatedDisplayName) else -> sp.getString(R.string.state_event_room_topic_removed, senderDisambiguatedDisplayName)
} }
} }
is OtherState.RoomPinnedEvents -> when (renderingMode) {
RenderingMode.RoomList -> {
Timber.v("Filtering timeline item for room state change: $content")
null
}
RenderingMode.Timeline -> {
formatRoomPinnedEvents(content, senderIsYou, senderDisambiguatedDisplayName)
}
}
is OtherState.Custom -> when (renderingMode) { is OtherState.Custom -> when (renderingMode) {
RenderingMode.RoomList -> { RenderingMode.RoomList -> {
Timber.v("Filtering timeline item for room state change: $content") Timber.v("Filtering timeline item for room state change: $content")
@ -161,15 +170,6 @@ class StateContentFormatter @Inject constructor(
"RoomJoinRules" "RoomJoinRules"
} }
} }
OtherState.RoomPinnedEvents -> when (renderingMode) {
RenderingMode.RoomList -> {
Timber.v("Filtering timeline item for room state change: $content")
null
}
RenderingMode.Timeline -> {
"RoomPinnedEvents"
}
}
is OtherState.RoomUserPowerLevels -> when (renderingMode) { is OtherState.RoomUserPowerLevels -> when (renderingMode) {
RenderingMode.RoomList -> { RenderingMode.RoomList -> {
Timber.v("Filtering timeline item for room state change: $content") Timber.v("Filtering timeline item for room state change: $content")
@ -217,4 +217,23 @@ class StateContentFormatter @Inject constructor(
} }
} }
} }
private fun formatRoomPinnedEvents(
content: OtherState.RoomPinnedEvents,
senderIsYou: Boolean,
senderDisambiguatedDisplayName: String
) = when (content.change) {
OtherState.RoomPinnedEvents.Change.ADDED -> when {
senderIsYou -> sp.getString(R.string.state_event_room_pinned_events_pinned_by_you)
else -> sp.getString(R.string.state_event_room_pinned_events_pinned, senderDisambiguatedDisplayName)
}
OtherState.RoomPinnedEvents.Change.REMOVED -> when {
senderIsYou -> sp.getString(R.string.state_event_room_pinned_events_unpinned_by_you)
else -> sp.getString(R.string.state_event_room_pinned_events_unpinned, senderDisambiguatedDisplayName)
}
OtherState.RoomPinnedEvents.Change.CHANGED -> when {
senderIsYou -> sp.getString(R.string.state_event_room_pinned_events_changed_by_you)
else -> sp.getString(R.string.state_event_room_pinned_events_changed, senderDisambiguatedDisplayName)
}
}
} }

2
libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatterTest.kt

@ -660,7 +660,7 @@ class DefaultRoomLastMessageFormatterTest {
OtherState.RoomGuestAccess, OtherState.RoomGuestAccess,
OtherState.RoomHistoryVisibility, OtherState.RoomHistoryVisibility,
OtherState.RoomJoinRules, OtherState.RoomJoinRules,
OtherState.RoomPinnedEvents, OtherState.RoomPinnedEvents(OtherState.RoomPinnedEvents.Change.CHANGED),
OtherState.RoomUserPowerLevels(emptyMap()), OtherState.RoomUserPowerLevels(emptyMap()),
OtherState.RoomServerAcl, OtherState.RoomServerAcl,
OtherState.RoomTombstone, OtherState.RoomTombstone,

9
libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/timeline/item/event/OtherState.kt

@ -32,7 +32,14 @@ sealed interface OtherState {
data object RoomHistoryVisibility : OtherState data object RoomHistoryVisibility : OtherState
data object RoomJoinRules : OtherState data object RoomJoinRules : OtherState
data class RoomName(val name: String?) : OtherState data class RoomName(val name: String?) : OtherState
data object RoomPinnedEvents : OtherState data class RoomPinnedEvents(val change: Change) : OtherState {
enum class Change {
ADDED,
REMOVED,
CHANGED
}
}
data class RoomUserPowerLevels(val users: Map<String, Long>) : OtherState data class RoomUserPowerLevels(val users: Map<String, Long>) : OtherState
data object RoomServerAcl : OtherState data object RoomServerAcl : OtherState
data class RoomThirdPartyInvite(val displayName: String?) : OtherState data class RoomThirdPartyInvite(val displayName: String?) : OtherState

11
libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/item/event/TimelineEventContentMapper.kt

@ -40,6 +40,7 @@ import kotlinx.collections.immutable.toImmutableMap
import org.matrix.rustcomponents.sdk.TimelineItemContent import org.matrix.rustcomponents.sdk.TimelineItemContent
import org.matrix.rustcomponents.sdk.TimelineItemContentKind import org.matrix.rustcomponents.sdk.TimelineItemContentKind
import org.matrix.rustcomponents.sdk.use import org.matrix.rustcomponents.sdk.use
import uniffi.matrix_sdk_ui.RoomPinnedEventsChange
import org.matrix.rustcomponents.sdk.EncryptedMessage as RustEncryptedMessage import org.matrix.rustcomponents.sdk.EncryptedMessage as RustEncryptedMessage
import org.matrix.rustcomponents.sdk.MembershipChange as RustMembershipChange import org.matrix.rustcomponents.sdk.MembershipChange as RustMembershipChange
import org.matrix.rustcomponents.sdk.OtherState as RustOtherState import org.matrix.rustcomponents.sdk.OtherState as RustOtherState
@ -176,7 +177,7 @@ private fun RustOtherState.map(): OtherState {
RustOtherState.RoomHistoryVisibility -> OtherState.RoomHistoryVisibility RustOtherState.RoomHistoryVisibility -> OtherState.RoomHistoryVisibility
RustOtherState.RoomJoinRules -> OtherState.RoomJoinRules RustOtherState.RoomJoinRules -> OtherState.RoomJoinRules
is RustOtherState.RoomName -> OtherState.RoomName(name) is RustOtherState.RoomName -> OtherState.RoomName(name)
is RustOtherState.RoomPinnedEvents -> OtherState.RoomPinnedEvents is RustOtherState.RoomPinnedEvents -> OtherState.RoomPinnedEvents(change.map())
is RustOtherState.RoomPowerLevels -> OtherState.RoomUserPowerLevels(users) is RustOtherState.RoomPowerLevels -> OtherState.RoomUserPowerLevels(users)
RustOtherState.RoomServerAcl -> OtherState.RoomServerAcl RustOtherState.RoomServerAcl -> OtherState.RoomServerAcl
is RustOtherState.RoomThirdPartyInvite -> OtherState.RoomThirdPartyInvite(displayName) is RustOtherState.RoomThirdPartyInvite -> OtherState.RoomThirdPartyInvite(displayName)
@ -187,6 +188,14 @@ private fun RustOtherState.map(): OtherState {
} }
} }
private fun RoomPinnedEventsChange.map(): OtherState.RoomPinnedEvents.Change {
return when (this) {
RoomPinnedEventsChange.ADDED -> OtherState.RoomPinnedEvents.Change.ADDED
RoomPinnedEventsChange.REMOVED -> OtherState.RoomPinnedEvents.Change.REMOVED
RoomPinnedEventsChange.CHANGED -> OtherState.RoomPinnedEvents.Change.CHANGED
}
}
private fun RustEncryptedMessage.map(): UnableToDecryptContent.Data { private fun RustEncryptedMessage.map(): UnableToDecryptContent.Data {
return when (this) { return when (this) {
is RustEncryptedMessage.MegolmV1AesSha2 -> UnableToDecryptContent.Data.MegolmV1AesSha2(sessionId, cause.map()) is RustEncryptedMessage.MegolmV1AesSha2 -> UnableToDecryptContent.Data.MegolmV1AesSha2(sessionId, cause.map())

Loading…
Cancel
Save