Skip to content

Commit 67e70cc

Browse files
committed
Gallery: animate items.
1 parent 8bd34ed commit 67e70cc

File tree

1 file changed

+41
-26
lines changed
  • libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery

1 file changed

+41
-26
lines changed

libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/MediaGalleryView.kt

Lines changed: 41 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -264,33 +264,46 @@ private fun MediaGalleryFilesList(
264264
LazyColumn(
265265
modifier = Modifier.fillMaxSize(),
266266
) {
267-
items(files) { item ->
267+
items(
268+
items = files,
269+
key = { it.id() },
270+
contentType = { it::class.java },
271+
) { item ->
268272
when (item) {
269273
is MediaItem.File -> FileItemView(
274+
modifier = Modifier.animateItem(),
270275
file = item,
271276
onClick = { onItemClick(item) },
272277
)
273278
is MediaItem.Audio -> AudioItemView(
279+
modifier = Modifier.animateItem(),
274280
audio = item,
275281
onClick = { onItemClick(item) },
276282
)
277283
is MediaItem.Voice -> {
278284
val presenter: Presenter<VoiceMessageState> = presenterFactories.rememberPresenter(item)
279285
VoiceItemView(
286+
modifier = Modifier.animateItem(),
280287
state = presenter.present(),
281288
voice = item,
282289
onShareClick = { eventSink(MediaGalleryEvents.Share(item)) },
283290
onDownloadClick = { eventSink(MediaGalleryEvents.SaveOnDisk(item)) },
284291
onInfoClick = { eventSink(MediaGalleryEvents.OpenInfo(item)) },
285292
)
286293
}
287-
is MediaItem.DateSeparator -> DateItemView(item)
294+
is MediaItem.DateSeparator -> DateItemView(
295+
modifier = Modifier.animateItem(),
296+
item = item
297+
)
288298
is MediaItem.Image,
289299
is MediaItem.Video -> {
290300
// Should not happen
291301
}
292302
is MediaItem.LoadingIndicator -> {
293-
LoadingMoreIndicator(item.direction)
303+
LoadingMoreIndicator(
304+
modifier = Modifier.animateItem(),
305+
direction = item.direction,
306+
)
294307
val latestEventSink by rememberUpdatedState(eventSink)
295308
LaunchedEffect(item.timestamp) {
296309
latestEventSink(MediaGalleryEvents.LoadMore(item.direction))
@@ -316,7 +329,7 @@ private fun MediaGalleryImageGrid(
316329
verticalArrangement = Arrangement.spacedBy(4.dp),
317330
) {
318331
items(
319-
imagesAndVideos,
332+
items = imagesAndVideos,
320333
span = { item ->
321334
when (item) {
322335
is MediaItem.LoadingIndicator,
@@ -328,9 +341,10 @@ private fun MediaGalleryImageGrid(
328341
contentType = { it::class.java },
329342
) { item ->
330343
when (item) {
331-
is MediaItem.DateSeparator -> {
332-
DateItemView(item)
333-
}
344+
is MediaItem.DateSeparator -> DateItemView(
345+
modifier = Modifier.animateItem(),
346+
item = item,
347+
)
334348
is MediaItem.Audio -> {
335349
// Should not happen
336350
}
@@ -340,26 +354,27 @@ private fun MediaGalleryImageGrid(
340354
is MediaItem.File -> {
341355
// Should not happen
342356
}
343-
is MediaItem.Image -> {
344-
ImageItemView(
345-
image = item,
346-
onClick = { onItemClick(item) },
347-
onLongClick = {
348-
eventSink(MediaGalleryEvents.OpenInfo(item))
349-
},
350-
)
351-
}
352-
is MediaItem.Video -> {
353-
VideoItemView(
354-
video = item,
355-
onClick = { onItemClick(item) },
356-
onLongClick = {
357-
eventSink(MediaGalleryEvents.OpenInfo(item))
358-
},
359-
)
360-
}
357+
is MediaItem.Image -> ImageItemView(
358+
modifier = Modifier.animateItem(),
359+
image = item,
360+
onClick = { onItemClick(item) },
361+
onLongClick = {
362+
eventSink(MediaGalleryEvents.OpenInfo(item))
363+
},
364+
)
365+
is MediaItem.Video -> VideoItemView(
366+
modifier = Modifier.animateItem(),
367+
video = item,
368+
onClick = { onItemClick(item) },
369+
onLongClick = {
370+
eventSink(MediaGalleryEvents.OpenInfo(item))
371+
},
372+
)
361373
is MediaItem.LoadingIndicator -> {
362-
LoadingMoreIndicator(item.direction)
374+
LoadingMoreIndicator(
375+
modifier = Modifier.animateItem(),
376+
direction = item.direction,
377+
)
363378
val latestEventSink by rememberUpdatedState(eventSink)
364379
LaunchedEffect(item.timestamp) {
365380
latestEventSink(MediaGalleryEvents.LoadMore(item.direction))

0 commit comments

Comments
 (0)