Pass around fromPinnedEvents so we can use it to decide whether to forward the event from the main timeline or the pinned events one

This commit is contained in:
Jorge Martín 2025-11-03 14:43:57 +01:00
parent 4df7841452
commit 753322d50e
18 changed files with 38 additions and 29 deletions

View file

@ -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)
}
}

View file

@ -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(

View file

@ -32,6 +32,7 @@ interface MediaGalleryDataSource {
fun start()
fun groupedMediaItemsFlow(): Flow<AsyncData<GroupedMediaItems>>
fun getLastData(): AsyncData<GroupedMediaItems>
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<AsyncData<GroupedMediaItems>>(replay = 1)
override fun groupedMediaItemsFlow(): Flow<AsyncData<GroupedMediaItems>> = groupedMediaItemsFlow

View file

@ -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(

View file

@ -61,6 +61,8 @@ class MediaViewerDataSource(
private val localMediaStates: MutableMap<String, MutableState<AsyncData<LocalMedia>>> =
mutableMapOf()
fun fromPinnedEvents(): Boolean = galleryDataSource.fromPinnedEvents()
fun setup() {
galleryDataSource.start()
}

View file

@ -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()
}

View file

@ -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() {

View file

@ -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(

View file

@ -27,6 +27,8 @@ class SingleMediaGalleryDataSource(
override fun start() = Unit
override fun groupedMediaItemsFlow() = flowOf(AsyncData.Success(data))
override fun getLastData(): AsyncData<GroupedMediaItems> = AsyncData.Success(data)
override fun fromPinnedEvents(): Boolean = false
override suspend fun loadMore(direction: Timeline.PaginationDirection) = Unit
override suspend fun deleteItem(eventId: EventId) = Unit