Better fix to render all items in the gallery. Should be able to render mixed items.

This commit is contained in:
Benoit Marty
2026-06-26 16:21:16 +02:00
committed by Benoit Marty
parent e282212270
commit a7e6d8af6e
7 changed files with 13 additions and 13 deletions
@@ -812,7 +812,6 @@ class MessagesFlowNode(
mode = DateFormatterMode.Full, mode = DateFormatterMode.Full,
), ),
initialIndex = galleryItemIndex, initialIndex = galleryItemIndex,
isAttachment = false,
) )
val galleryItems = event.content.items.map { galleryItem -> val galleryItems = event.content.items.map { galleryItem ->
GalleryItemData( GalleryItemData(
@@ -845,7 +844,6 @@ class MessagesFlowNode(
mode = DateFormatterMode.Full, mode = DateFormatterMode.Full,
), ),
initialIndex = galleryItemIndex, initialIndex = galleryItemIndex,
isAttachment = true,
) )
val galleryItems = event.content.attachments.map { attachment -> val galleryItems = event.content.attachments.map { attachment ->
GalleryItemData( GalleryItemData(
@@ -23,7 +23,6 @@ data class GalleryInfo(
val dateSent: String?, val dateSent: String?,
val dateSentFull: String?, val dateSentFull: String?,
val initialIndex: Int, val initialIndex: Int,
val isAttachment: Boolean,
) : Parcelable ) : Parcelable
@Parcelize @Parcelize
@@ -58,6 +58,9 @@ interface MediaViewerEntryPoint : FeatureEntryPoint {
} }
sealed interface MediaViewerMode : Parcelable { sealed interface MediaViewerMode : Parcelable {
@Parcelize
data object EventGallery : MediaViewerMode
@Parcelize @Parcelize
data class TimelineImagesAndVideos(val timelineMode: Timeline.Mode) : MediaViewerMode data class TimelineImagesAndVideos(val timelineMode: Timeline.Mode) : MediaViewerMode
@@ -85,10 +85,8 @@ class GalleryMediaGalleryDataSource(
thumbnailSource = galleryItem.thumbnailSource, thumbnailSource = galleryItem.thumbnailSource,
) )
} }
when (mediaItem) { // Add all items to imageAndVideoItems (we can have mixed attachments)
is MediaItem.Image, is MediaItem.Video -> imageAndVideoItems.add(mediaItem) imageAndVideoItems.add(mediaItem)
is MediaItem.Audio, is MediaItem.File, is MediaItem.Voice -> fileItems.add(mediaItem)
}
} }
return GalleryMediaGalleryDataSource( return GalleryMediaGalleryDataSource(
@@ -64,6 +64,7 @@ class MediaViewerDataSource(
private val galleryMode = when (mode) { private val galleryMode = when (mode) {
is MediaViewerMode.TimelineImagesAndVideos -> MediaGalleryMode.Images is MediaViewerMode.TimelineImagesAndVideos -> MediaGalleryMode.Images
is MediaViewerMode.TimelineFilesAndAudios -> MediaGalleryMode.Files is MediaViewerMode.TimelineFilesAndAudios -> MediaGalleryMode.Files
MediaViewerMode.EventGallery -> MediaGalleryMode.Images
} }
// Map of sourceUrl to local media state // Map of sourceUrl to local media state
@@ -116,6 +116,8 @@ class MediaViewerNode(
) )
} }
Timeline.Mode.Media -> timelineMediaGalleryDataSource Timeline.Mode.Media -> timelineMediaGalleryDataSource
// null should not happen, input should be MediaViewerEntryPoint.Params.EventGallery in this case
null -> timelineMediaGalleryDataSource
} }
} }
} }
@@ -129,11 +131,7 @@ class MediaViewerNode(
is MediaViewerEntryPoint.Params.Avatar -> is MediaViewerEntryPoint.Params.Avatar ->
MediaViewerEntryPoint.MediaViewerMode.TimelineImagesAndVideos(Timeline.Mode.Media) MediaViewerEntryPoint.MediaViewerMode.TimelineImagesAndVideos(Timeline.Mode.Media)
is MediaViewerEntryPoint.Params.EventGallery -> is MediaViewerEntryPoint.Params.EventGallery ->
if (inputs.galleryInfo.isAttachment) { MediaViewerEntryPoint.MediaViewerMode.EventGallery
MediaViewerEntryPoint.MediaViewerMode.TimelineFilesAndAudios(Timeline.Mode.Media)
} else {
MediaViewerEntryPoint.MediaViewerMode.TimelineImagesAndVideos(Timeline.Mode.Media)
}
is MediaViewerEntryPoint.Params.RoomMedia -> is MediaViewerEntryPoint.Params.RoomMedia ->
inputs.mode inputs.mode
}, },
@@ -167,9 +165,10 @@ class MediaViewerNode(
} }
} }
internal fun MediaViewerEntryPoint.MediaViewerMode.getTimelineMode(): Timeline.Mode { internal fun MediaViewerEntryPoint.MediaViewerMode.getTimelineMode(): Timeline.Mode? {
return when (this) { return when (this) {
is MediaViewerEntryPoint.MediaViewerMode.TimelineImagesAndVideos -> timelineMode is MediaViewerEntryPoint.MediaViewerMode.TimelineImagesAndVideos -> timelineMode
is MediaViewerEntryPoint.MediaViewerMode.TimelineFilesAndAudios -> timelineMode is MediaViewerEntryPoint.MediaViewerMode.TimelineFilesAndAudios -> timelineMode
MediaViewerEntryPoint.MediaViewerMode.EventGallery -> null
} }
} }
@@ -240,6 +240,8 @@ class MediaViewerPresenter(
val messageResId = when (inputs.mode) { val messageResId = when (inputs.mode) {
is MediaViewerEntryPoint.MediaViewerMode.TimelineImagesAndVideos -> R.string.screen_media_details_no_more_media_to_show is MediaViewerEntryPoint.MediaViewerMode.TimelineImagesAndVideos -> R.string.screen_media_details_no_more_media_to_show
is MediaViewerEntryPoint.MediaViewerMode.TimelineFilesAndAudios -> R.string.screen_media_details_no_more_files_to_show is MediaViewerEntryPoint.MediaViewerMode.TimelineFilesAndAudios -> R.string.screen_media_details_no_more_files_to_show
// Should not happen
MediaViewerEntryPoint.MediaViewerMode.EventGallery -> R.string.screen_media_details_no_more_media_to_show
} }
val message = SnackbarMessage(messageResId) val message = SnackbarMessage(messageResId)
snackbarDispatcher.post(message) snackbarDispatcher.post(message)