Restore fun interface for a sweeter code.
This commit is contained in:
parent
62f6791865
commit
d6407d6995
10 changed files with 31 additions and 53 deletions
|
|
@ -30,7 +30,6 @@ import io.element.android.libraries.matrix.api.core.TransactionId
|
||||||
import io.element.android.libraries.matrix.api.core.UniqueId
|
import io.element.android.libraries.matrix.api.core.UniqueId
|
||||||
import io.element.android.libraries.matrix.api.core.UserId
|
import io.element.android.libraries.matrix.api.core.UserId
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.TimelineItemDebugInfo
|
import io.element.android.libraries.matrix.api.timeline.item.TimelineItemDebugInfo
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.LazyTimelineItemProvider
|
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.LocalEventSendState
|
import io.element.android.libraries.matrix.api.timeline.item.event.LocalEventSendState
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.MessageShield
|
import io.element.android.libraries.matrix.api.timeline.item.event.MessageShield
|
||||||
import io.element.android.libraries.matrix.ui.messages.reply.InReplyToDetails
|
import io.element.android.libraries.matrix.ui.messages.reply.InReplyToDetails
|
||||||
|
|
@ -167,10 +166,8 @@ internal fun aTimelineItemEvent(
|
||||||
inReplyTo = inReplyTo,
|
inReplyTo = inReplyTo,
|
||||||
isThreaded = isThreaded,
|
isThreaded = isThreaded,
|
||||||
origin = null,
|
origin = null,
|
||||||
lazyTimelineItemProvider = object : LazyTimelineItemProvider {
|
timelineItemDebugInfoProvider = { debugInfo },
|
||||||
override fun getTimelineItemDebugInfo(): TimelineItemDebugInfo = debugInfo
|
messageShieldProvider = { messageShield },
|
||||||
override fun getShield(strict: Boolean): MessageShield? = messageShield
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,6 @@ import io.element.android.features.messages.impl.timeline.model.event.aTimelineI
|
||||||
import io.element.android.features.messages.impl.timeline.protection.aTimelineProtectionState
|
import io.element.android.features.messages.impl.timeline.protection.aTimelineProtectionState
|
||||||
import io.element.android.libraries.designsystem.preview.ElementPreview
|
import io.element.android.libraries.designsystem.preview.ElementPreview
|
||||||
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.LazyTimelineItemProvider
|
|
||||||
import kotlinx.collections.immutable.toImmutableList
|
import kotlinx.collections.immutable.toImmutableList
|
||||||
|
|
||||||
@PreviewsDayNight
|
@PreviewsDayNight
|
||||||
|
|
@ -28,10 +27,7 @@ internal fun TimelineViewMessageShieldPreview() = ElementPreview {
|
||||||
val messageShield = aCriticalShield()
|
val messageShield = aCriticalShield()
|
||||||
val items = listOf(
|
val items = listOf(
|
||||||
(timelineItems.first() as TimelineItem.Event).copy(
|
(timelineItems.first() as TimelineItem.Event).copy(
|
||||||
lazyTimelineItemProvider = object : LazyTimelineItemProvider {
|
messageShieldProvider = { messageShield },
|
||||||
override fun getTimelineItemDebugInfo() = aTimelineItemDebugInfo()
|
|
||||||
override fun getShield(strict: Boolean) = messageShield
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
) + timelineItems.drop(1)
|
) + timelineItems.drop(1)
|
||||||
CompositionLocalProvider(
|
CompositionLocalProvider(
|
||||||
|
|
|
||||||
|
|
@ -86,7 +86,8 @@ class TimelineItemEventFactory @AssistedInject constructor(
|
||||||
inReplyTo = currentTimelineItem.event.inReplyTo()?.map(permalinkParser = permalinkParser),
|
inReplyTo = currentTimelineItem.event.inReplyTo()?.map(permalinkParser = permalinkParser),
|
||||||
isThreaded = currentTimelineItem.event.isThreaded(),
|
isThreaded = currentTimelineItem.event.isThreaded(),
|
||||||
origin = currentTimelineItem.event.origin,
|
origin = currentTimelineItem.event.origin,
|
||||||
lazyTimelineItemProvider = currentTimelineItem.event.lazyTimelineItemProvider,
|
timelineItemDebugInfoProvider = currentTimelineItem.event.timelineItemDebugInfoProvider,
|
||||||
|
messageShieldProvider = currentTimelineItem.event.messageShieldProvider,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,10 +18,11 @@ import io.element.android.libraries.matrix.api.core.TransactionId
|
||||||
import io.element.android.libraries.matrix.api.core.UniqueId
|
import io.element.android.libraries.matrix.api.core.UniqueId
|
||||||
import io.element.android.libraries.matrix.api.core.UserId
|
import io.element.android.libraries.matrix.api.core.UserId
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.TimelineItemDebugInfo
|
import io.element.android.libraries.matrix.api.timeline.item.TimelineItemDebugInfo
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.LazyTimelineItemProvider
|
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.LocalEventSendState
|
import io.element.android.libraries.matrix.api.timeline.item.event.LocalEventSendState
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.MessageShield
|
import io.element.android.libraries.matrix.api.timeline.item.event.MessageShield
|
||||||
|
import io.element.android.libraries.matrix.api.timeline.item.event.MessageShieldProvider
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.ProfileTimelineDetails
|
import io.element.android.libraries.matrix.api.timeline.item.event.ProfileTimelineDetails
|
||||||
|
import io.element.android.libraries.matrix.api.timeline.item.event.TimelineItemDebugInfoProvider
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.TimelineItemEventOrigin
|
import io.element.android.libraries.matrix.api.timeline.item.event.TimelineItemEventOrigin
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.getDisambiguatedDisplayName
|
import io.element.android.libraries.matrix.api.timeline.item.event.getDisambiguatedDisplayName
|
||||||
import io.element.android.libraries.matrix.ui.messages.reply.InReplyToDetails
|
import io.element.android.libraries.matrix.ui.messages.reply.InReplyToDetails
|
||||||
|
|
@ -76,7 +77,8 @@ sealed interface TimelineItem {
|
||||||
val inReplyTo: InReplyToDetails?,
|
val inReplyTo: InReplyToDetails?,
|
||||||
val isThreaded: Boolean,
|
val isThreaded: Boolean,
|
||||||
val origin: TimelineItemEventOrigin?,
|
val origin: TimelineItemEventOrigin?,
|
||||||
val lazyTimelineItemProvider: LazyTimelineItemProvider,
|
val timelineItemDebugInfoProvider: TimelineItemDebugInfoProvider,
|
||||||
|
val messageShieldProvider: MessageShieldProvider,
|
||||||
) : TimelineItem {
|
) : TimelineItem {
|
||||||
val showSenderInformation = groupPosition.isNew() && !isMine
|
val showSenderInformation = groupPosition.isNew() && !isMine
|
||||||
|
|
||||||
|
|
@ -91,10 +93,10 @@ sealed interface TimelineItem {
|
||||||
val isRemote = eventId != null
|
val isRemote = eventId != null
|
||||||
|
|
||||||
// No need to be lazy here?
|
// No need to be lazy here?
|
||||||
val messageShield: MessageShield? = lazyTimelineItemProvider.getShield(strict = false)
|
val messageShield: MessageShield? = messageShieldProvider(strict = false)
|
||||||
|
|
||||||
val debugInfo: TimelineItemDebugInfo
|
val debugInfo: TimelineItemDebugInfo
|
||||||
get() = lazyTimelineItemProvider.getTimelineItemDebugInfo()
|
get() = timelineItemDebugInfoProvider()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Immutable
|
@Immutable
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,6 @@ import io.element.android.libraries.matrix.api.core.EventId
|
||||||
import io.element.android.libraries.matrix.api.core.TransactionId
|
import io.element.android.libraries.matrix.api.core.TransactionId
|
||||||
import io.element.android.libraries.matrix.api.core.UniqueId
|
import io.element.android.libraries.matrix.api.core.UniqueId
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.TimelineItemDebugInfo
|
import io.element.android.libraries.matrix.api.timeline.item.TimelineItemDebugInfo
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.LazyTimelineItemProvider
|
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.LocalEventSendState
|
import io.element.android.libraries.matrix.api.timeline.item.event.LocalEventSendState
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.MessageShield
|
import io.element.android.libraries.matrix.api.timeline.item.event.MessageShield
|
||||||
import io.element.android.libraries.matrix.test.AN_EVENT_ID
|
import io.element.android.libraries.matrix.test.AN_EVENT_ID
|
||||||
|
|
@ -61,8 +60,6 @@ internal fun aMessageEvent(
|
||||||
inReplyTo = inReplyTo,
|
inReplyTo = inReplyTo,
|
||||||
isThreaded = isThreaded,
|
isThreaded = isThreaded,
|
||||||
origin = null,
|
origin = null,
|
||||||
lazyTimelineItemProvider = object : LazyTimelineItemProvider {
|
timelineItemDebugInfoProvider = { debugInfo },
|
||||||
override fun getTimelineItemDebugInfo() = debugInfo
|
messageShieldProvider = { messageShield },
|
||||||
override fun getShield(strict: Boolean) = messageShield
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,6 @@ import io.element.android.features.messages.impl.timeline.model.event.TimelineIt
|
||||||
import io.element.android.features.messages.impl.timeline.model.virtual.aTimelineItemDaySeparatorModel
|
import io.element.android.features.messages.impl.timeline.model.virtual.aTimelineItemDaySeparatorModel
|
||||||
import io.element.android.libraries.designsystem.components.avatar.anAvatarData
|
import io.element.android.libraries.designsystem.components.avatar.anAvatarData
|
||||||
import io.element.android.libraries.matrix.api.core.UniqueId
|
import io.element.android.libraries.matrix.api.core.UniqueId
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.LazyTimelineItemProvider
|
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.LocalEventSendState
|
import io.element.android.libraries.matrix.api.timeline.item.event.LocalEventSendState
|
||||||
import io.element.android.libraries.matrix.test.AN_EVENT_ID
|
import io.element.android.libraries.matrix.test.AN_EVENT_ID
|
||||||
import io.element.android.libraries.matrix.test.A_USER_ID
|
import io.element.android.libraries.matrix.test.A_USER_ID
|
||||||
|
|
@ -43,10 +42,8 @@ class TimelineItemGrouperTest {
|
||||||
inReplyTo = null,
|
inReplyTo = null,
|
||||||
isThreaded = false,
|
isThreaded = false,
|
||||||
origin = null,
|
origin = null,
|
||||||
lazyTimelineItemProvider = object : LazyTimelineItemProvider {
|
timelineItemDebugInfoProvider = { aTimelineItemDebugInfo() },
|
||||||
override fun getTimelineItemDebugInfo() = aTimelineItemDebugInfo()
|
messageShieldProvider = { null },
|
||||||
override fun getShield(strict: Boolean) = null
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
private val aNonGroupableItem = aMessageEvent()
|
private val aNonGroupableItem = aMessageEvent()
|
||||||
private val aNonGroupableItemNoEvent = TimelineItem.Virtual(UniqueId("virtual"), aTimelineItemDaySeparatorModel("Today"))
|
private val aNonGroupableItemNoEvent = TimelineItem.Virtual(UniqueId("virtual"), aTimelineItemDaySeparatorModel("Today"))
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,6 @@ import io.element.android.libraries.matrix.api.core.UniqueId
|
||||||
import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem
|
import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.TimelineItemDebugInfo
|
import io.element.android.libraries.matrix.api.timeline.item.TimelineItemDebugInfo
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem
|
import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.LazyTimelineItemProvider
|
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.ProfileTimelineDetails
|
import io.element.android.libraries.matrix.api.timeline.item.event.ProfileTimelineDetails
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.RedactedContent
|
import io.element.android.libraries.matrix.api.timeline.item.event.RedactedContent
|
||||||
import io.element.android.libraries.matrix.test.AN_EVENT_ID
|
import io.element.android.libraries.matrix.test.AN_EVENT_ID
|
||||||
|
|
@ -89,15 +88,14 @@ fun aRedactedMatrixTimeline(eventId: EventId) = listOf<MatrixTimelineItem>(
|
||||||
timestamp = 9442,
|
timestamp = 9442,
|
||||||
content = RedactedContent,
|
content = RedactedContent,
|
||||||
origin = null,
|
origin = null,
|
||||||
lazyTimelineItemProvider = object : LazyTimelineItemProvider {
|
timelineItemDebugInfoProvider = {
|
||||||
override fun getTimelineItemDebugInfo() = TimelineItemDebugInfo(
|
TimelineItemDebugInfo(
|
||||||
model = "enim",
|
model = "enim",
|
||||||
originalJson = null,
|
originalJson = null,
|
||||||
latestEditedJson = null
|
latestEditedJson = null,
|
||||||
)
|
)
|
||||||
|
|
||||||
override fun getShield(strict: Boolean) = null
|
|
||||||
},
|
},
|
||||||
|
messageShieldProvider = { null },
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,8 @@ data class EventTimelineItem(
|
||||||
val timestamp: Long,
|
val timestamp: Long,
|
||||||
val content: EventContent,
|
val content: EventContent,
|
||||||
val origin: TimelineItemEventOrigin?,
|
val origin: TimelineItemEventOrigin?,
|
||||||
val lazyTimelineItemProvider: LazyTimelineItemProvider,
|
val timelineItemDebugInfoProvider: TimelineItemDebugInfoProvider,
|
||||||
|
val messageShieldProvider: MessageShieldProvider,
|
||||||
) {
|
) {
|
||||||
fun inReplyTo(): InReplyTo? {
|
fun inReplyTo(): InReplyTo? {
|
||||||
return (content as? MessageContent)?.inReplyTo
|
return (content as? MessageContent)?.inReplyTo
|
||||||
|
|
@ -44,7 +45,10 @@ data class EventTimelineItem(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
interface LazyTimelineItemProvider {
|
fun interface TimelineItemDebugInfoProvider {
|
||||||
fun getTimelineItemDebugInfo(): TimelineItemDebugInfo
|
operator fun invoke(): TimelineItemDebugInfo
|
||||||
fun getShield(strict: Boolean): MessageShield?
|
}
|
||||||
|
|
||||||
|
fun interface MessageShieldProvider {
|
||||||
|
operator fun invoke(strict: Boolean): MessageShield?
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,6 @@ import io.element.android.libraries.matrix.api.core.UserId
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.TimelineItemDebugInfo
|
import io.element.android.libraries.matrix.api.timeline.item.TimelineItemDebugInfo
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.EventReaction
|
import io.element.android.libraries.matrix.api.timeline.item.event.EventReaction
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem
|
import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.LazyTimelineItemProvider
|
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.LocalEventSendState
|
import io.element.android.libraries.matrix.api.timeline.item.event.LocalEventSendState
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.MessageShield
|
import io.element.android.libraries.matrix.api.timeline.item.event.MessageShield
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.ProfileTimelineDetails
|
import io.element.android.libraries.matrix.api.timeline.item.event.ProfileTimelineDetails
|
||||||
|
|
@ -32,7 +31,6 @@ import uniffi.matrix_sdk_common.ShieldStateCode
|
||||||
import org.matrix.rustcomponents.sdk.EventSendState as RustEventSendState
|
import org.matrix.rustcomponents.sdk.EventSendState as RustEventSendState
|
||||||
import org.matrix.rustcomponents.sdk.EventTimelineItem as RustEventTimelineItem
|
import org.matrix.rustcomponents.sdk.EventTimelineItem as RustEventTimelineItem
|
||||||
import org.matrix.rustcomponents.sdk.EventTimelineItemDebugInfo as RustEventTimelineItemDebugInfo
|
import org.matrix.rustcomponents.sdk.EventTimelineItemDebugInfo as RustEventTimelineItemDebugInfo
|
||||||
import org.matrix.rustcomponents.sdk.LazyTimelineItemProvider as RustLazyTimelineItemProvider
|
|
||||||
import org.matrix.rustcomponents.sdk.ProfileDetails as RustProfileDetails
|
import org.matrix.rustcomponents.sdk.ProfileDetails as RustProfileDetails
|
||||||
import org.matrix.rustcomponents.sdk.Receipt as RustReceipt
|
import org.matrix.rustcomponents.sdk.Receipt as RustReceipt
|
||||||
import uniffi.matrix_sdk_ui.EventItemOrigin as RustEventItemOrigin
|
import uniffi.matrix_sdk_ui.EventItemOrigin as RustEventItemOrigin
|
||||||
|
|
@ -56,7 +54,8 @@ class EventTimelineItemMapper(
|
||||||
timestamp = timestamp.toLong(),
|
timestamp = timestamp.toLong(),
|
||||||
content = contentMapper.map(content),
|
content = contentMapper.map(content),
|
||||||
origin = origin?.map(),
|
origin = origin?.map(),
|
||||||
lazyTimelineItemProvider = LazyTimelineItemProviderWrapper(lazyProvider)
|
timelineItemDebugInfoProvider = { lazyProvider.debugInfo().map() },
|
||||||
|
messageShieldProvider = { strict -> lazyProvider.getShields(strict)?.map() },
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -164,16 +163,6 @@ private fun ShieldState?.map(): MessageShield? {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class LazyTimelineItemProviderWrapper(private val provider: RustLazyTimelineItemProvider) : LazyTimelineItemProvider {
|
|
||||||
override fun getTimelineItemDebugInfo(): TimelineItemDebugInfo {
|
|
||||||
return provider.debugInfo().map()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getShield(strict: Boolean): MessageShield? {
|
|
||||||
return provider.getShields(strict)?.map()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun EventOrTransactionId.eventId(): EventId? {
|
private fun EventOrTransactionId.eventId(): EventId? {
|
||||||
return (this as? EventOrTransactionId.EventId)?.let { EventId(it.eventId) }
|
return (this as? EventOrTransactionId.EventId)?.let { EventId(it.eventId) }
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,6 @@ import io.element.android.libraries.matrix.api.timeline.item.event.EventContent
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.EventReaction
|
import io.element.android.libraries.matrix.api.timeline.item.event.EventReaction
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem
|
import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.InReplyTo
|
import io.element.android.libraries.matrix.api.timeline.item.event.InReplyTo
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.LazyTimelineItemProvider
|
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.LocalEventSendState
|
import io.element.android.libraries.matrix.api.timeline.item.event.LocalEventSendState
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.MessageContent
|
import io.element.android.libraries.matrix.api.timeline.item.event.MessageContent
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.MessageShield
|
import io.element.android.libraries.matrix.api.timeline.item.event.MessageShield
|
||||||
|
|
@ -69,10 +68,8 @@ fun anEventTimelineItem(
|
||||||
timestamp = timestamp,
|
timestamp = timestamp,
|
||||||
content = content,
|
content = content,
|
||||||
origin = null,
|
origin = null,
|
||||||
lazyTimelineItemProvider = object : LazyTimelineItemProvider {
|
timelineItemDebugInfoProvider = { debugInfo },
|
||||||
override fun getTimelineItemDebugInfo() = debugInfo
|
messageShieldProvider = { messageShield },
|
||||||
override fun getShield(strict: Boolean) = messageShield
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
fun aProfileTimelineDetails(
|
fun aProfileTimelineDetails(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue