Improve preview.

This commit is contained in:
Benoit Marty 2024-12-10 13:10:25 +01:00
parent c5568b430d
commit b3648c1d18
8 changed files with 53 additions and 32 deletions

View file

@ -13,9 +13,10 @@ import io.element.android.libraries.matrix.api.core.UniqueId
import io.element.android.libraries.mediaviewer.impl.details.MediaBottomSheetState import io.element.android.libraries.mediaviewer.impl.details.MediaBottomSheetState
import io.element.android.libraries.mediaviewer.impl.details.aMediaDetailsBottomSheetState import io.element.android.libraries.mediaviewer.impl.details.aMediaDetailsBottomSheetState
import io.element.android.libraries.mediaviewer.impl.gallery.ui.aDate import io.element.android.libraries.mediaviewer.impl.gallery.ui.aDate
import io.element.android.libraries.mediaviewer.impl.gallery.ui.aFile import io.element.android.libraries.mediaviewer.impl.gallery.ui.aMediaItemFile
import io.element.android.libraries.mediaviewer.impl.gallery.ui.aVideo import io.element.android.libraries.mediaviewer.impl.gallery.ui.aMediaItemVideo
import io.element.android.libraries.mediaviewer.impl.gallery.ui.anImage import io.element.android.libraries.mediaviewer.impl.gallery.ui.aMediaItemImage
import io.element.android.libraries.mediaviewer.impl.gallery.ui.aMediaItemLoadingIndicator
import kotlinx.collections.immutable.toImmutableList import kotlinx.collections.immutable.toImmutableList
open class MediaGalleryStateProvider : PreviewParameterProvider<MediaGalleryState> { open class MediaGalleryStateProvider : PreviewParameterProvider<MediaGalleryState> {
@ -29,18 +30,19 @@ open class MediaGalleryStateProvider : PreviewParameterProvider<MediaGalleryStat
aGroupedMediaItems( aGroupedMediaItems(
imageAndVideoItems = listOf( imageAndVideoItems = listOf(
aDate(id = UniqueId("0")), aDate(id = UniqueId("0")),
anImage(id = UniqueId("1")), aMediaItemImage(id = UniqueId("1")),
aDate( aDate(
id = UniqueId("2"), id = UniqueId("2"),
formattedDate = "September 2004", formattedDate = "September 2004",
), ),
anImage(id = UniqueId("3")), aMediaItemImage(id = UniqueId("3")),
aVideo(id = UniqueId("4")), aMediaItemVideo(id = UniqueId("4")),
anImage(id = UniqueId("5")), aMediaItemImage(id = UniqueId("5")),
anImage(id = UniqueId("6")), aMediaItemImage(id = UniqueId("6")),
anImage(id = UniqueId("7")), aMediaItemImage(id = UniqueId("7")),
anImage(id = UniqueId("8")), aMediaItemImage(id = UniqueId("8")),
anImage(id = UniqueId("9")), aMediaItemImage(id = UniqueId("9")),
aMediaItemLoadingIndicator(),
).toImmutableList() ).toImmutableList()
) )
), ),
@ -54,15 +56,14 @@ open class MediaGalleryStateProvider : PreviewParameterProvider<MediaGalleryStat
aGroupedMediaItems( aGroupedMediaItems(
fileItems = listOf( fileItems = listOf(
aDate(id = UniqueId("0")), aDate(id = UniqueId("0")),
aFile(id = UniqueId("1")), aMediaItemFile(id = UniqueId("1")),
aDate( aDate(
id = UniqueId("2"), id = UniqueId("2"),
formattedDate = "September 2004", formattedDate = "September 2004",
), ),
aFile(id = UniqueId("3")), aMediaItemFile(id = UniqueId("3")),
aFile(id = UniqueId("4")), aMediaItemFile(id = UniqueId("4")),
aFile(id = UniqueId("5")), aMediaItemLoadingIndicator(),
aFile(id = UniqueId("6")),
).toImmutableList() ).toImmutableList()
) )
), ),

View file

@ -302,9 +302,7 @@ private fun MediaGalleryImageGrid(
when (item) { when (item) {
is MediaItem.LoadingIndicator, is MediaItem.LoadingIndicator,
is MediaItem.DateSeparator -> GridItemSpan(columns) is MediaItem.DateSeparator -> GridItemSpan(columns)
is MediaItem.Image, is MediaItem.Event -> GridItemSpan(1)
is MediaItem.Video,
is MediaItem.File -> GridItemSpan(1)
} }
}, },
key = { it.id() }, key = { it.id() },

View file

@ -67,7 +67,7 @@ fun ImageItemView(
@Composable @Composable
internal fun ImageItemViewPreview() = ElementPreview { internal fun ImageItemViewPreview() = ElementPreview {
ImageItemView( ImageItemView(
image = anImage(), image = aMediaItemImage(),
onClick = {}, onClick = {},
onLongClick = {}, onLongClick = {},
) )

View file

@ -17,18 +17,18 @@ import io.element.android.libraries.mediaviewer.impl.gallery.MediaItem
class MediaItemFileProvider : PreviewParameterProvider<MediaItem.File> { class MediaItemFileProvider : PreviewParameterProvider<MediaItem.File> {
override val values: Sequence<MediaItem.File> override val values: Sequence<MediaItem.File>
get() = sequenceOf( get() = sequenceOf(
aFile(), aMediaItemFile(),
aFile( aMediaItemFile(
filename = "A long filename that should be truncated.jpg", filename = "A long filename that should be truncated.jpg",
caption = "A caption", caption = "A caption",
), ),
aFile( aMediaItemFile(
caption = loremIpsum, caption = loremIpsum,
), ),
) )
} }
fun aFile( fun aMediaItemFile(
id: UniqueId = UniqueId("fileId"), id: UniqueId = UniqueId("fileId"),
filename: String = "filename", filename: String = "filename",
caption: String? = null, caption: String? = null,

View file

@ -14,7 +14,7 @@ import io.element.android.libraries.matrix.api.media.MediaSource
import io.element.android.libraries.mediaviewer.api.anImageMediaInfo import io.element.android.libraries.mediaviewer.api.anImageMediaInfo
import io.element.android.libraries.mediaviewer.impl.gallery.MediaItem import io.element.android.libraries.mediaviewer.impl.gallery.MediaItem
fun anImage( fun aMediaItemImage(
id: UniqueId = UniqueId("imageId"), id: UniqueId = UniqueId("imageId"),
eventId: EventId? = null, eventId: EventId? = null,
senderId: UserId? = null, senderId: UserId? = null,

View file

@ -0,0 +1,22 @@
/*
* Copyright 2024 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only
* Please see LICENSE in the repository root for full details.
*/
package io.element.android.libraries.mediaviewer.impl.gallery.ui
import io.element.android.libraries.matrix.api.core.UniqueId
import io.element.android.libraries.matrix.api.timeline.Timeline
import io.element.android.libraries.mediaviewer.impl.gallery.MediaItem
fun aMediaItemLoadingIndicator(
id: UniqueId = UniqueId("loadingId"),
): MediaItem.LoadingIndicator {
return MediaItem.LoadingIndicator(
id = id,
direction = Timeline.PaginationDirection.BACKWARDS,
timestamp = 123,
)
}

View file

@ -16,14 +16,14 @@ import io.element.android.libraries.mediaviewer.impl.gallery.MediaItem
class MediaItemVideoProvider : PreviewParameterProvider<MediaItem.Video> { class MediaItemVideoProvider : PreviewParameterProvider<MediaItem.Video> {
override val values: Sequence<MediaItem.Video> override val values: Sequence<MediaItem.Video>
get() = sequenceOf( get() = sequenceOf(
aVideo(), aMediaItemVideo(),
aVideo( aMediaItemVideo(
duration = null, duration = null,
), ),
) )
} }
fun aVideo( fun aMediaItemVideo(
id: UniqueId = UniqueId("videoId"), id: UniqueId = UniqueId("videoId"),
mediaSource: MediaSource = MediaSource(""), mediaSource: MediaSource = MediaSource(""),
duration: String? = "1:23", duration: String? = "1:23",

View file

@ -21,7 +21,7 @@ import io.element.android.libraries.matrix.test.media.FakeMatrixMediaLoader
import io.element.android.libraries.matrix.test.room.FakeMatrixRoom import io.element.android.libraries.matrix.test.room.FakeMatrixRoom
import io.element.android.libraries.matrix.test.timeline.FakeTimeline import io.element.android.libraries.matrix.test.timeline.FakeTimeline
import io.element.android.libraries.mediaviewer.impl.details.MediaBottomSheetState import io.element.android.libraries.mediaviewer.impl.details.MediaBottomSheetState
import io.element.android.libraries.mediaviewer.impl.gallery.ui.anImage import io.element.android.libraries.mediaviewer.impl.gallery.ui.aMediaItemImage
import io.element.android.libraries.mediaviewer.test.FakeLocalMediaActions import io.element.android.libraries.mediaviewer.test.FakeLocalMediaActions
import io.element.android.libraries.mediaviewer.test.FakeLocalMediaFactory import io.element.android.libraries.mediaviewer.test.FakeLocalMediaFactory
import io.element.android.tests.testutils.WarmUpRule import io.element.android.tests.testutils.WarmUpRule
@ -119,7 +119,7 @@ class MediaGalleryPresenterTest {
skipItems(1) skipItems(1)
val initialState = awaitItem() val initialState = awaitItem()
assertThat(initialState.mediaBottomSheetState).isEqualTo(MediaBottomSheetState.Hidden) assertThat(initialState.mediaBottomSheetState).isEqualTo(MediaBottomSheetState.Hidden)
val item = anImage( val item = aMediaItemImage(
eventId = AN_EVENT_ID, eventId = AN_EVENT_ID,
senderId = A_USER_ID, senderId = A_USER_ID,
) )
@ -163,7 +163,7 @@ class MediaGalleryPresenterTest {
skipItems(1) skipItems(1)
val initialState = awaitItem() val initialState = awaitItem()
assertThat(initialState.mediaBottomSheetState).isEqualTo(MediaBottomSheetState.Hidden) assertThat(initialState.mediaBottomSheetState).isEqualTo(MediaBottomSheetState.Hidden)
val item = anImage( val item = aMediaItemImage(
eventId = AN_EVENT_ID, eventId = AN_EVENT_ID,
senderId = A_USER_ID_2, senderId = A_USER_ID_2,
) )
@ -196,7 +196,7 @@ class MediaGalleryPresenterTest {
skipItems(1) skipItems(1)
val initialState = awaitItem() val initialState = awaitItem()
// Delete bottom sheet // Delete bottom sheet
val item = anImage() val item = aMediaItemImage()
initialState.eventSink(MediaGalleryEvents.ConfirmDelete(AN_EVENT_ID, item.mediaInfo, item.thumbnailSource)) initialState.eventSink(MediaGalleryEvents.ConfirmDelete(AN_EVENT_ID, item.mediaInfo, item.thumbnailSource))
val deleteState = awaitItem() val deleteState = awaitItem()
assertThat(deleteState.mediaBottomSheetState).isEqualTo( assertThat(deleteState.mediaBottomSheetState).isEqualTo(