From 753322d50ef1384b1dae1d8e4ae68b77362efdc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20Mart=C3=ADn?= Date: Mon, 3 Nov 2025 14:43:57 +0100 Subject: [PATCH] Pass around `fromPinnedEvents` so we can use it to decide whether to forward the event from the main timeline or the pinned events one --- .../features/messages/api/MessagesEntryPoint.kt | 2 +- .../android/features/messages/impl/MessagesFlowNode.kt | 8 ++++---- .../pinned/banner/PinnedMessagesBannerPresenter.kt | 4 ++-- .../impl/pinned/list/PinnedMessagesListPresenter.kt | 4 ++-- .../pinned/banner/PinnedMessagesBannerPresenterTest.kt | 4 ++-- .../pinned/list/PinnedMessagesListPresenterTest.kt | 4 ++-- .../features/roomdetails/api/RoomDetailsEntryPoint.kt | 2 +- .../features/roomdetails/impl/RoomDetailsFlowNode.kt | 10 +++++----- .../features/userprofile/impl/UserProfileFlowNode.kt | 2 +- .../mediaviewer/api/MediaGalleryEntryPoint.kt | 2 +- .../libraries/mediaviewer/api/MediaViewerEntryPoint.kt | 2 +- .../impl/datasource/MediaGalleryDataSource.kt | 5 +++++ .../impl/gallery/root/MediaGalleryFlowNode.kt | 6 +++--- .../mediaviewer/impl/viewer/MediaViewerDataSource.kt | 2 ++ .../mediaviewer/impl/viewer/MediaViewerNavigator.kt | 2 +- .../mediaviewer/impl/viewer/MediaViewerNode.kt | 4 ++-- .../mediaviewer/impl/viewer/MediaViewerPresenter.kt | 2 +- .../impl/viewer/SingleMediaGalleryDataSource.kt | 2 ++ 18 files changed, 38 insertions(+), 29 deletions(-) diff --git a/features/messages/api/src/main/kotlin/io/element/android/features/messages/api/MessagesEntryPoint.kt b/features/messages/api/src/main/kotlin/io/element/android/features/messages/api/MessagesEntryPoint.kt index 54df2b7fec..901a243945 100644 --- a/features/messages/api/src/main/kotlin/io/element/android/features/messages/api/MessagesEntryPoint.kt +++ b/features/messages/api/src/main/kotlin/io/element/android/features/messages/api/MessagesEntryPoint.kt @@ -35,7 +35,7 @@ interface MessagesEntryPoint : FeatureEntryPoint { fun navigateToRoomDetails() fun navigateToRoomMemberDetails(userId: UserId) fun handlePermalinkClick(data: PermalinkData, pushToBackstack: Boolean) - fun forwardEvent(eventId: EventId) + fun forwardEvent(eventId: EventId, fromPinnedEvents: Boolean) fun navigateToRoom(roomId: RoomId) } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesFlowNode.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesFlowNode.kt index 7d468354d8..b4320ab69e 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesFlowNode.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesFlowNode.kt @@ -35,7 +35,7 @@ import io.element.android.features.messages.api.MessagesEntryPoint import io.element.android.features.messages.api.MessagesEntryPointNode import io.element.android.features.messages.impl.attachments.Attachment import io.element.android.features.messages.impl.attachments.preview.AttachmentsPreviewNode -import io.element.android.features.messages.impl.pinned.PinnedEventsTimelineProvider +import io.element.android.features.messages.impl.pinned.DefaultPinnedEventsTimelineProvider import io.element.android.features.messages.impl.pinned.list.PinnedMessagesListNode import io.element.android.features.messages.impl.report.ReportMessageNode import io.element.android.features.messages.impl.threads.ThreadedMessagesNode @@ -115,7 +115,7 @@ class MessagesFlowNode( private val roomNamesCache: RoomNamesCache, private val mentionSpanUpdater: MentionSpanUpdater, private val mentionSpanTheme: MentionSpanTheme, - private val pinnedEventsTimelineProvider: PinnedEventsTimelineProvider, + private val pinnedEventsTimelineProvider: DefaultPinnedEventsTimelineProvider, private val timelineController: TimelineController, private val knockRequestsListEntryPoint: KnockRequestsListEntryPoint, private val dateFormatter: DateFormatter, @@ -315,9 +315,9 @@ class MessagesFlowNode( this@MessagesFlowNode.viewInTimeline(eventId) } - override fun forwardEvent(eventId: EventId) { + override fun forwardEvent(eventId: EventId, fromPinnedEvents: Boolean) { // Need to go to the parent because of the overlay - callback.forwardEvent(eventId) + callback.forwardEvent(eventId, fromPinnedEvents) } } mediaViewerEntryPoint.createNode( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/banner/PinnedMessagesBannerPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/banner/PinnedMessagesBannerPresenter.kt index 5833da56dc..c0f2cccb6f 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/banner/PinnedMessagesBannerPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/banner/PinnedMessagesBannerPresenter.kt @@ -18,7 +18,7 @@ import androidx.compose.runtime.rememberUpdatedState import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import dev.zacsweers.metro.Inject -import io.element.android.features.messages.impl.pinned.PinnedEventsTimelineProvider +import io.element.android.features.messages.impl.pinned.DefaultPinnedEventsTimelineProvider import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.matrix.api.room.BaseRoom @@ -35,7 +35,7 @@ import kotlinx.coroutines.flow.onEach class PinnedMessagesBannerPresenter( private val room: BaseRoom, private val itemFactory: PinnedMessagesBannerItemFactory, - private val pinnedEventsTimelineProvider: PinnedEventsTimelineProvider, + private val pinnedEventsTimelineProvider: DefaultPinnedEventsTimelineProvider, ) : Presenter { private val pinnedItems = mutableStateOf>>(AsyncData.Uninitialized) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/list/PinnedMessagesListPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/list/PinnedMessagesListPresenter.kt index 6d09e12447..764286ce2e 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/list/PinnedMessagesListPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/list/PinnedMessagesListPresenter.kt @@ -26,7 +26,7 @@ import io.element.android.features.messages.impl.UserEventPermissions import io.element.android.features.messages.impl.actionlist.ActionListState import io.element.android.features.messages.impl.actionlist.model.TimelineItemAction import io.element.android.features.messages.impl.link.LinkState -import io.element.android.features.messages.impl.pinned.PinnedEventsTimelineProvider +import io.element.android.features.messages.impl.pinned.DefaultPinnedEventsTimelineProvider import io.element.android.features.messages.impl.timeline.TimelineRoomInfo import io.element.android.features.messages.impl.timeline.factories.TimelineItemsFactory import io.element.android.features.messages.impl.timeline.factories.TimelineItemsFactoryConfig @@ -66,7 +66,7 @@ class PinnedMessagesListPresenter( @Assisted private val navigator: PinnedMessagesListNavigator, private val room: JoinedRoom, timelineItemsFactoryCreator: TimelineItemsFactory.Creator, - private val timelineProvider: PinnedEventsTimelineProvider, + private val timelineProvider: DefaultPinnedEventsTimelineProvider, private val timelineProtectionPresenter: Presenter, private val linkPresenter: Presenter, private val snackbarDispatcher: SnackbarDispatcher, diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/pinned/banner/PinnedMessagesBannerPresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/pinned/banner/PinnedMessagesBannerPresenterTest.kt index 38182dec1d..b1be33d928 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/pinned/banner/PinnedMessagesBannerPresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/pinned/banner/PinnedMessagesBannerPresenterTest.kt @@ -8,7 +8,7 @@ package io.element.android.features.messages.impl.pinned.banner import com.google.common.truth.Truth.assertThat -import io.element.android.features.messages.impl.pinned.PinnedEventsTimelineProvider +import io.element.android.features.messages.impl.pinned.DefaultPinnedEventsTimelineProvider import io.element.android.libraries.eventformatter.test.FakePinnedMessagesBannerFormatter import io.element.android.libraries.matrix.api.room.JoinedRoom import io.element.android.libraries.matrix.api.sync.SyncService @@ -195,7 +195,7 @@ class PinnedMessagesBannerPresenterTest { internal fun TestScope.createPinnedEventsTimelineProvider( room: JoinedRoom = FakeJoinedRoom(), syncService: SyncService = FakeSyncService(), -) = PinnedEventsTimelineProvider( +) = DefaultPinnedEventsTimelineProvider( room = room, syncService = syncService, dispatchers = testCoroutineDispatchers(), diff --git a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/pinned/list/PinnedMessagesListPresenterTest.kt b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/pinned/list/PinnedMessagesListPresenterTest.kt index 07778ab381..5087bd3558 100644 --- a/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/pinned/list/PinnedMessagesListPresenterTest.kt +++ b/features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/pinned/list/PinnedMessagesListPresenterTest.kt @@ -13,7 +13,7 @@ import io.element.android.features.messages.impl.actionlist.anActionListState import io.element.android.features.messages.impl.actionlist.model.TimelineItemAction import io.element.android.features.messages.impl.fixtures.aTimelineItemsFactoryCreator import io.element.android.features.messages.impl.link.aLinkState -import io.element.android.features.messages.impl.pinned.PinnedEventsTimelineProvider +import io.element.android.features.messages.impl.pinned.DefaultPinnedEventsTimelineProvider import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.features.messages.impl.timeline.protection.aTimelineProtectionState import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatcher @@ -300,7 +300,7 @@ class PinnedMessagesListPresenterTest { analyticsService: AnalyticsService = FakeAnalyticsService(), featureFlagService: FakeFeatureFlagService = FakeFeatureFlagService(), ): PinnedMessagesListPresenter { - val timelineProvider = PinnedEventsTimelineProvider( + val timelineProvider = DefaultPinnedEventsTimelineProvider( room = room, syncService = syncService, dispatchers = testCoroutineDispatchers(), diff --git a/features/roomdetails/api/src/main/kotlin/io/element/android/features/roomdetails/api/RoomDetailsEntryPoint.kt b/features/roomdetails/api/src/main/kotlin/io/element/android/features/roomdetails/api/RoomDetailsEntryPoint.kt index 3a690ddea6..96ff1ae96e 100644 --- a/features/roomdetails/api/src/main/kotlin/io/element/android/features/roomdetails/api/RoomDetailsEntryPoint.kt +++ b/features/roomdetails/api/src/main/kotlin/io/element/android/features/roomdetails/api/RoomDetailsEntryPoint.kt @@ -40,7 +40,7 @@ interface RoomDetailsEntryPoint : FeatureEntryPoint { fun navigateToGlobalNotificationSettings() fun navigateToRoom(roomId: RoomId, serverNames: List) fun handlePermalinkClick(data: PermalinkData, pushToBackstack: Boolean) - fun startForwardEventFlow(eventId: EventId) + fun startForwardEventFlow(eventId: EventId, fromPinnedEvents: Boolean) } fun createNode( diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsFlowNode.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsFlowNode.kt index d31adaae8d..5eee694786 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsFlowNode.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsFlowNode.kt @@ -299,7 +299,7 @@ class RoomDetailsFlowNode( // Cannot happen } - override fun forwardEvent(eventId: EventId) { + override fun forwardEvent(eventId: EventId, fromPinnedEvents: Boolean) { // Cannot happen } } @@ -331,8 +331,8 @@ class RoomDetailsFlowNode( callback.handlePermalinkClick(permalinkData, pushToBackstack = false) } - override fun forward(eventId: EventId) { - callback.startForwardEventFlow(eventId) + override fun forward(eventId: EventId, fromPinnedEvents: Boolean) { + callback.startForwardEventFlow(eventId, fromPinnedEvents) } } mediaGalleryEntryPoint.createNode( @@ -358,8 +358,8 @@ class RoomDetailsFlowNode( callback.handlePermalinkClick(data, pushToBackstack) } - override fun forwardEvent(eventId: EventId) { - callback.startForwardEventFlow(eventId) + override fun forwardEvent(eventId: EventId, fromPinnedEvents: Boolean) { + callback.startForwardEventFlow(eventId, fromPinnedEvents) } override fun navigateToRoom(roomId: RoomId) { diff --git a/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/UserProfileFlowNode.kt b/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/UserProfileFlowNode.kt index fd019c3587..0b36452b45 100644 --- a/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/UserProfileFlowNode.kt +++ b/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/UserProfileFlowNode.kt @@ -103,7 +103,7 @@ class UserProfileFlowNode( // Cannot happen } - override fun forwardEvent(eventId: EventId) { + override fun forwardEvent(eventId: EventId, fromPinnedEvents: Boolean) { // Cannot happen } } diff --git a/libraries/mediaviewer/api/src/main/kotlin/io/element/android/libraries/mediaviewer/api/MediaGalleryEntryPoint.kt b/libraries/mediaviewer/api/src/main/kotlin/io/element/android/libraries/mediaviewer/api/MediaGalleryEntryPoint.kt index dd71f302d4..2fdcaf1bd0 100644 --- a/libraries/mediaviewer/api/src/main/kotlin/io/element/android/libraries/mediaviewer/api/MediaGalleryEntryPoint.kt +++ b/libraries/mediaviewer/api/src/main/kotlin/io/element/android/libraries/mediaviewer/api/MediaGalleryEntryPoint.kt @@ -23,6 +23,6 @@ interface MediaGalleryEntryPoint : FeatureEntryPoint { interface Callback : Plugin { fun onBackClick() fun viewInTimeline(eventId: EventId) - fun forward(eventId: EventId) + fun forward(eventId: EventId, fromPinnedEvents: Boolean) } } diff --git a/libraries/mediaviewer/api/src/main/kotlin/io/element/android/libraries/mediaviewer/api/MediaViewerEntryPoint.kt b/libraries/mediaviewer/api/src/main/kotlin/io/element/android/libraries/mediaviewer/api/MediaViewerEntryPoint.kt index 201573dc70..ab1c78abea 100644 --- a/libraries/mediaviewer/api/src/main/kotlin/io/element/android/libraries/mediaviewer/api/MediaViewerEntryPoint.kt +++ b/libraries/mediaviewer/api/src/main/kotlin/io/element/android/libraries/mediaviewer/api/MediaViewerEntryPoint.kt @@ -31,7 +31,7 @@ interface MediaViewerEntryPoint : FeatureEntryPoint { interface Callback : Plugin { fun onDone() fun viewInTimeline(eventId: EventId) - fun forwardEvent(eventId: EventId) + fun forwardEvent(eventId: EventId, fromPinnedEvents: Boolean) } data class Params( diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/MediaGalleryDataSource.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/MediaGalleryDataSource.kt index eb822b4969..46bfedacb1 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/MediaGalleryDataSource.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/MediaGalleryDataSource.kt @@ -32,6 +32,7 @@ interface MediaGalleryDataSource { fun start() fun groupedMediaItemsFlow(): Flow> fun getLastData(): AsyncData + fun fromPinnedEvents(): Boolean suspend fun loadMore(direction: Timeline.PaginationDirection) suspend fun deleteItem(eventId: EventId) } @@ -46,6 +47,10 @@ class TimelineMediaGalleryDataSource( ) : MediaGalleryDataSource { private var timeline: Timeline? = null + override fun fromPinnedEvents(): Boolean { + return timeline?.mode == Timeline.Mode.PinnedEvents + } + private val groupedMediaItemsFlow = MutableSharedFlow>(replay = 1) override fun groupedMediaItemsFlow(): Flow> = groupedMediaItemsFlow diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/root/MediaGalleryFlowNode.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/root/MediaGalleryFlowNode.kt index cc71b49dac..e21da04586 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/root/MediaGalleryFlowNode.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/root/MediaGalleryFlowNode.kt @@ -85,7 +85,7 @@ class MediaGalleryFlowNode( } override fun forward(eventId: EventId) { - callback.forward(eventId) + callback.forward(eventId, fromPinnedEvents = false) } override fun showItem(item: MediaItem.Event) { @@ -119,9 +119,9 @@ class MediaGalleryFlowNode( callback.viewInTimeline(eventId) } - override fun forwardEvent(eventId: EventId) { + override fun forwardEvent(eventId: EventId, fromPinnedEvents: Boolean) { // Need to go to the parent because of the overlay - callback.forward(eventId) + callback.forward(eventId, fromPinnedEvents) } } mediaViewerEntryPoint.createNode( diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerDataSource.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerDataSource.kt index 1046a80fe3..62d87a770a 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerDataSource.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerDataSource.kt @@ -61,6 +61,8 @@ class MediaViewerDataSource( private val localMediaStates: MutableMap>> = mutableMapOf() + fun fromPinnedEvents(): Boolean = galleryDataSource.fromPinnedEvents() + fun setup() { galleryDataSource.start() } diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerNavigator.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerNavigator.kt index 77e253dfa5..b3fa321170 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerNavigator.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerNavigator.kt @@ -11,6 +11,6 @@ import io.element.android.libraries.matrix.api.core.EventId interface MediaViewerNavigator { fun onViewInTimelineClick(eventId: EventId) - fun onForwardClick(eventId: EventId) + fun onForwardClick(eventId: EventId, fromPinnedEvents: Boolean) fun onItemDeleted() } diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerNode.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerNode.kt index 79a95c4648..195f1589d6 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerNode.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerNode.kt @@ -64,8 +64,8 @@ class MediaViewerNode( callback.viewInTimeline(eventId) } - override fun onForwardClick(eventId: EventId) { - callback.forwardEvent(eventId) + override fun onForwardClick(eventId: EventId, fromPinnedEvents: Boolean) { + callback.forwardEvent(eventId, fromPinnedEvents) } override fun onItemDeleted() { diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerPresenter.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerPresenter.kt index 726e9989ce..be10af3f6d 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerPresenter.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerPresenter.kt @@ -119,7 +119,7 @@ class MediaViewerPresenter( } is MediaViewerEvents.Forward -> { mediaBottomSheetState = MediaBottomSheetState.Hidden - navigator.onForwardClick(event.eventId) + navigator.onForwardClick(event.eventId, fromPinnedEvents = dataSource.fromPinnedEvents()) } is MediaViewerEvents.OpenInfo -> coroutineScope.launch { mediaBottomSheetState = MediaBottomSheetState.MediaDetailsBottomSheetState( diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/SingleMediaGalleryDataSource.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/SingleMediaGalleryDataSource.kt index 94ac0fea21..1d683fd8da 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/SingleMediaGalleryDataSource.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/SingleMediaGalleryDataSource.kt @@ -27,6 +27,8 @@ class SingleMediaGalleryDataSource( override fun start() = Unit override fun groupedMediaItemsFlow() = flowOf(AsyncData.Success(data)) override fun getLastData(): AsyncData = AsyncData.Success(data) + override fun fromPinnedEvents(): Boolean = false + override suspend fun loadMore(direction: Timeline.PaginationDirection) = Unit override suspend fun deleteItem(eventId: EventId) = Unit