Restore fun interface for a sweeter code.
This commit is contained in:
parent
70c643be5e
commit
0db54df877
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.UserId
|
||||
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.MessageShield
|
||||
import io.element.android.libraries.matrix.ui.messages.reply.InReplyToDetails
|
||||
|
|
@ -167,10 +166,8 @@ internal fun aTimelineItemEvent(
|
|||
inReplyTo = inReplyTo,
|
||||
isThreaded = isThreaded,
|
||||
origin = null,
|
||||
lazyTimelineItemProvider = object : LazyTimelineItemProvider {
|
||||
override fun getTimelineItemDebugInfo(): TimelineItemDebugInfo = debugInfo
|
||||
override fun getShield(strict: Boolean): MessageShield? = messageShield
|
||||
}
|
||||
timelineItemDebugInfoProvider = { debugInfo },
|
||||
messageShieldProvider = { 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.libraries.designsystem.preview.ElementPreview
|
||||
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.LazyTimelineItemProvider
|
||||
import kotlinx.collections.immutable.toImmutableList
|
||||
|
||||
@PreviewsDayNight
|
||||
|
|
@ -28,10 +27,7 @@ internal fun TimelineViewMessageShieldPreview() = ElementPreview {
|
|||
val messageShield = aCriticalShield()
|
||||
val items = listOf(
|
||||
(timelineItems.first() as TimelineItem.Event).copy(
|
||||
lazyTimelineItemProvider = object : LazyTimelineItemProvider {
|
||||
override fun getTimelineItemDebugInfo() = aTimelineItemDebugInfo()
|
||||
override fun getShield(strict: Boolean) = messageShield
|
||||
}
|
||||
messageShieldProvider = { messageShield },
|
||||
)
|
||||
) + timelineItems.drop(1)
|
||||
CompositionLocalProvider(
|
||||
|
|
|
|||
|
|
@ -86,7 +86,8 @@ class TimelineItemEventFactory @AssistedInject constructor(
|
|||
inReplyTo = currentTimelineItem.event.inReplyTo()?.map(permalinkParser = permalinkParser),
|
||||
isThreaded = currentTimelineItem.event.isThreaded(),
|
||||
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.UserId
|
||||
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.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.TimelineItemDebugInfoProvider
|
||||
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.ui.messages.reply.InReplyToDetails
|
||||
|
|
@ -76,7 +77,8 @@ sealed interface TimelineItem {
|
|||
val inReplyTo: InReplyToDetails?,
|
||||
val isThreaded: Boolean,
|
||||
val origin: TimelineItemEventOrigin?,
|
||||
val lazyTimelineItemProvider: LazyTimelineItemProvider,
|
||||
val timelineItemDebugInfoProvider: TimelineItemDebugInfoProvider,
|
||||
val messageShieldProvider: MessageShieldProvider,
|
||||
) : TimelineItem {
|
||||
val showSenderInformation = groupPosition.isNew() && !isMine
|
||||
|
||||
|
|
@ -91,10 +93,10 @@ sealed interface TimelineItem {
|
|||
val isRemote = eventId != null
|
||||
|
||||
// No need to be lazy here?
|
||||
val messageShield: MessageShield? = lazyTimelineItemProvider.getShield(strict = false)
|
||||
val messageShield: MessageShield? = messageShieldProvider(strict = false)
|
||||
|
||||
val debugInfo: TimelineItemDebugInfo
|
||||
get() = lazyTimelineItemProvider.getTimelineItemDebugInfo()
|
||||
get() = timelineItemDebugInfoProvider()
|
||||
}
|
||||
|
||||
@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.UniqueId
|
||||
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.MessageShield
|
||||
import io.element.android.libraries.matrix.test.AN_EVENT_ID
|
||||
|
|
@ -61,8 +60,6 @@ internal fun aMessageEvent(
|
|||
inReplyTo = inReplyTo,
|
||||
isThreaded = isThreaded,
|
||||
origin = null,
|
||||
lazyTimelineItemProvider = object : LazyTimelineItemProvider {
|
||||
override fun getTimelineItemDebugInfo() = debugInfo
|
||||
override fun getShield(strict: Boolean) = messageShield
|
||||
},
|
||||
timelineItemDebugInfoProvider = { debugInfo },
|
||||
messageShieldProvider = { 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.libraries.designsystem.components.avatar.anAvatarData
|
||||
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.test.AN_EVENT_ID
|
||||
import io.element.android.libraries.matrix.test.A_USER_ID
|
||||
|
|
@ -43,10 +42,8 @@ class TimelineItemGrouperTest {
|
|||
inReplyTo = null,
|
||||
isThreaded = false,
|
||||
origin = null,
|
||||
lazyTimelineItemProvider = object : LazyTimelineItemProvider {
|
||||
override fun getTimelineItemDebugInfo() = aTimelineItemDebugInfo()
|
||||
override fun getShield(strict: Boolean) = null
|
||||
},
|
||||
timelineItemDebugInfoProvider = { aTimelineItemDebugInfo() },
|
||||
messageShieldProvider = { null },
|
||||
)
|
||||
private val aNonGroupableItem = aMessageEvent()
|
||||
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.item.TimelineItemDebugInfo
|
||||
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.RedactedContent
|
||||
import io.element.android.libraries.matrix.test.AN_EVENT_ID
|
||||
|
|
@ -89,15 +88,14 @@ fun aRedactedMatrixTimeline(eventId: EventId) = listOf<MatrixTimelineItem>(
|
|||
timestamp = 9442,
|
||||
content = RedactedContent,
|
||||
origin = null,
|
||||
lazyTimelineItemProvider = object : LazyTimelineItemProvider {
|
||||
override fun getTimelineItemDebugInfo() = TimelineItemDebugInfo(
|
||||
timelineItemDebugInfoProvider = {
|
||||
TimelineItemDebugInfo(
|
||||
model = "enim",
|
||||
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 content: EventContent,
|
||||
val origin: TimelineItemEventOrigin?,
|
||||
val lazyTimelineItemProvider: LazyTimelineItemProvider,
|
||||
val timelineItemDebugInfoProvider: TimelineItemDebugInfoProvider,
|
||||
val messageShieldProvider: MessageShieldProvider,
|
||||
) {
|
||||
fun inReplyTo(): InReplyTo? {
|
||||
return (content as? MessageContent)?.inReplyTo
|
||||
|
|
@ -44,7 +45,10 @@ data class EventTimelineItem(
|
|||
}
|
||||
}
|
||||
|
||||
interface LazyTimelineItemProvider {
|
||||
fun getTimelineItemDebugInfo(): TimelineItemDebugInfo
|
||||
fun getShield(strict: Boolean): MessageShield?
|
||||
fun interface TimelineItemDebugInfoProvider {
|
||||
operator fun invoke(): TimelineItemDebugInfo
|
||||
}
|
||||
|
||||
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.event.EventReaction
|
||||
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.MessageShield
|
||||
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.EventTimelineItem as RustEventTimelineItem
|
||||
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.Receipt as RustReceipt
|
||||
import uniffi.matrix_sdk_ui.EventItemOrigin as RustEventItemOrigin
|
||||
|
|
@ -56,7 +54,8 @@ class EventTimelineItemMapper(
|
|||
timestamp = timestamp.toLong(),
|
||||
content = contentMapper.map(content),
|
||||
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? {
|
||||
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.EventTimelineItem
|
||||
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.MessageContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.MessageShield
|
||||
|
|
@ -69,10 +68,8 @@ fun anEventTimelineItem(
|
|||
timestamp = timestamp,
|
||||
content = content,
|
||||
origin = null,
|
||||
lazyTimelineItemProvider = object : LazyTimelineItemProvider {
|
||||
override fun getTimelineItemDebugInfo() = debugInfo
|
||||
override fun getShield(strict: Boolean) = messageShield
|
||||
},
|
||||
timelineItemDebugInfoProvider = { debugInfo },
|
||||
messageShieldProvider = { messageShield },
|
||||
)
|
||||
|
||||
fun aProfileTimelineDetails(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue