@@ -47,23 +47,10 @@ import io.element.android.features.messages.impl.timeline.components.customreact
47
47
import io.element.android.features.messages.impl.timeline.components.reactionsummary.ReactionSummaryPresenter
48
48
import io.element.android.features.messages.impl.timeline.components.receipt.bottomsheet.ReadReceiptBottomSheetPresenter
49
49
import io.element.android.features.messages.impl.timeline.model.TimelineItem
50
- import io.element.android.features.messages.impl.timeline.model.event.TimelineItemAudioContent
51
- import io.element.android.features.messages.impl.timeline.model.event.TimelineItemCallNotifyContent
52
- import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEncryptedContent
53
- import io.element.android.features.messages.impl.timeline.model.event.TimelineItemFileContent
54
- import io.element.android.features.messages.impl.timeline.model.event.TimelineItemImageContent
55
- import io.element.android.features.messages.impl.timeline.model.event.TimelineItemLegacyCallInviteContent
56
- import io.element.android.features.messages.impl.timeline.model.event.TimelineItemLocationContent
57
50
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemPollContent
58
- import io.element.android.features.messages.impl.timeline.model.event.TimelineItemRedactedContent
59
51
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemStateContent
60
- import io.element.android.features.messages.impl.timeline.model.event.TimelineItemStickerContent
61
52
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemTextBasedContent
62
- import io.element.android.features.messages.impl.timeline.model.event.TimelineItemUnknownContent
63
- import io.element.android.features.messages.impl.timeline.model.event.TimelineItemVideoContent
64
- import io.element.android.features.messages.impl.timeline.model.event.TimelineItemVoiceContent
65
53
import io.element.android.features.messages.impl.typing.TypingNotificationPresenter
66
- import io.element.android.features.messages.impl.utils.messagesummary.MessageSummaryFormatter
67
54
import io.element.android.features.messages.impl.voicemessages.composer.VoiceMessageComposerPresenter
68
55
import io.element.android.features.networkmonitor.api.NetworkMonitor
69
56
import io.element.android.features.networkmonitor.api.NetworkStatus
@@ -80,12 +67,12 @@ import io.element.android.libraries.designsystem.utils.snackbar.collectSnackbarM
80
67
import io.element.android.libraries.featureflag.api.FeatureFlagService
81
68
import io.element.android.libraries.featureflag.api.FeatureFlags
82
69
import io.element.android.libraries.matrix.api.core.EventId
70
+ import io.element.android.libraries.matrix.api.permalink.PermalinkParser
83
71
import io.element.android.libraries.matrix.api.room.MatrixRoom
84
72
import io.element.android.libraries.matrix.api.room.MatrixRoomInfo
85
73
import io.element.android.libraries.matrix.api.room.MatrixRoomMembersState
86
74
import io.element.android.libraries.matrix.api.room.MessageEventType
87
- import io.element.android.libraries.matrix.ui.components.AttachmentThumbnailInfo
88
- import io.element.android.libraries.matrix.ui.components.AttachmentThumbnailType
75
+ import io.element.android.libraries.matrix.ui.messages.reply.map
89
76
import io.element.android.libraries.matrix.ui.model.getAvatarData
90
77
import io.element.android.libraries.matrix.ui.room.canCall
91
78
import io.element.android.libraries.matrix.ui.room.canRedactOtherAsState
@@ -100,6 +87,7 @@ import kotlinx.coroutines.withContext
100
87
import timber.log.Timber
101
88
102
89
class MessagesPresenter @AssistedInject constructor(
90
+ @Assisted private val navigator : MessagesNavigator ,
103
91
private val room : MatrixRoom ,
104
92
private val composerPresenter : MessageComposerPresenter ,
105
93
private val voiceMessageComposerPresenter : VoiceMessageComposerPresenter ,
@@ -111,14 +99,13 @@ class MessagesPresenter @AssistedInject constructor(
111
99
private val readReceiptBottomSheetPresenter : ReadReceiptBottomSheetPresenter ,
112
100
private val networkMonitor : NetworkMonitor ,
113
101
private val snackbarDispatcher : SnackbarDispatcher ,
114
- private val messageSummaryFormatter : MessageSummaryFormatter ,
115
102
private val dispatchers : CoroutineDispatchers ,
116
103
private val clipboardHelper : ClipboardHelper ,
117
104
private val featureFlagsService : FeatureFlagService ,
118
105
private val htmlConverterProvider : HtmlConverterProvider ,
119
- @Assisted private val navigator : MessagesNavigator ,
120
106
private val buildMeta : BuildMeta ,
121
107
private val timelineController : TimelineController ,
108
+ private val permalinkParser : PermalinkParser ,
122
109
) : Presenter<MessagesState> {
123
110
private val timelinePresenter = timelinePresenterFactory.create(navigator = navigator)
124
111
@@ -336,14 +323,14 @@ class MessagesPresenter @AssistedInject constructor(
336
323
else -> {
337
324
val composerMode = MessageComposerMode .Edit (
338
325
targetEvent.eventId,
326
+ targetEvent.transactionId,
339
327
(targetEvent.content as ? TimelineItemTextBasedContent )?.let {
340
328
if (enableTextFormatting) {
341
329
it.htmlBody ? : it.body
342
330
} else {
343
331
it.body
344
332
}
345
333
}.orEmpty(),
346
- targetEvent.transactionId,
347
334
)
348
335
composerState.eventSink(
349
336
MessageComposerEvents .SetMode (composerMode)
@@ -352,66 +339,15 @@ class MessagesPresenter @AssistedInject constructor(
352
339
}
353
340
}
354
341
355
- private fun handleActionReply (targetEvent : TimelineItem .Event , composerState : MessageComposerState ) {
342
+ private suspend fun handleActionReply (targetEvent : TimelineItem .Event , composerState : MessageComposerState ) {
356
343
if (targetEvent.eventId == null ) return
357
- val textContent = messageSummaryFormatter.format(targetEvent)
358
- val attachmentThumbnailInfo = when (targetEvent.content) {
359
- is TimelineItemImageContent -> AttachmentThumbnailInfo (
360
- thumbnailSource = targetEvent.content.thumbnailSource ? : targetEvent.content.mediaSource,
361
- textContent = targetEvent.content.body,
362
- type = AttachmentThumbnailType .Image ,
363
- blurHash = targetEvent.content.blurhash,
364
- )
365
- is TimelineItemStickerContent -> AttachmentThumbnailInfo (
366
- thumbnailSource = targetEvent.content.thumbnailSource ? : targetEvent.content.mediaSource,
367
- textContent = targetEvent.content.body,
368
- type = AttachmentThumbnailType .Image ,
369
- blurHash = targetEvent.content.blurhash,
370
- )
371
- is TimelineItemVideoContent -> AttachmentThumbnailInfo (
372
- thumbnailSource = targetEvent.content.thumbnailSource,
373
- textContent = targetEvent.content.body,
374
- type = AttachmentThumbnailType .Video ,
375
- blurHash = targetEvent.content.blurHash,
376
- )
377
- is TimelineItemFileContent -> AttachmentThumbnailInfo (
378
- thumbnailSource = targetEvent.content.thumbnailSource,
379
- textContent = targetEvent.content.body,
380
- type = AttachmentThumbnailType .File ,
381
- )
382
- is TimelineItemAudioContent -> AttachmentThumbnailInfo (
383
- textContent = targetEvent.content.body,
384
- type = AttachmentThumbnailType .Audio ,
385
- )
386
- is TimelineItemVoiceContent -> AttachmentThumbnailInfo (
387
- textContent = textContent,
388
- type = AttachmentThumbnailType .Voice ,
389
- )
390
- is TimelineItemLocationContent -> AttachmentThumbnailInfo (
391
- type = AttachmentThumbnailType .Location ,
392
- )
393
- is TimelineItemPollContent -> AttachmentThumbnailInfo (
394
- textContent = targetEvent.content.question,
395
- type = AttachmentThumbnailType .Poll ,
344
+ timelineController.invokeOnCurrentTimeline {
345
+ val replyToDetails = loadReplyDetails(targetEvent.eventId).map(permalinkParser)
346
+ val composerMode = MessageComposerMode .Reply (replyToDetails = replyToDetails)
347
+ composerState.eventSink(
348
+ MessageComposerEvents .SetMode (composerMode)
396
349
)
397
- is TimelineItemTextBasedContent ,
398
- is TimelineItemRedactedContent ,
399
- is TimelineItemStateContent ,
400
- is TimelineItemEncryptedContent ,
401
- is TimelineItemLegacyCallInviteContent ,
402
- is TimelineItemCallNotifyContent ,
403
- is TimelineItemUnknownContent -> null
404
350
}
405
- val composerMode = MessageComposerMode .Reply (
406
- isThreaded = targetEvent.isThreaded,
407
- senderName = targetEvent.safeSenderName,
408
- eventId = targetEvent.eventId,
409
- attachmentThumbnailInfo = attachmentThumbnailInfo,
410
- defaultContent = textContent,
411
- )
412
- composerState.eventSink(
413
- MessageComposerEvents .SetMode (composerMode)
414
- )
415
351
}
416
352
417
353
private fun handleShowDebugInfoAction (event : TimelineItem .Event ) {
0 commit comments