mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-04 00:48:40 +00:00
Ensure gallery is paginating to get new items.
This commit is contained in:
+7
@@ -198,6 +198,13 @@ private fun MediaGalleryPage(
|
|||||||
) {
|
) {
|
||||||
val groupedMediaItems = state.groupedMediaItems
|
val groupedMediaItems = state.groupedMediaItems
|
||||||
if (groupedMediaItems.isLoadingItems(mode)) {
|
if (groupedMediaItems.isLoadingItems(mode)) {
|
||||||
|
// Need to trigger a pagination now if there is only one LoadingIndicator.
|
||||||
|
(groupedMediaItems.dataOrNull()
|
||||||
|
?.getItems(mode)?.singleOrNull() as? MediaItem.LoadingIndicator)?.let { item ->
|
||||||
|
LaunchedEffect(item.timestamp) {
|
||||||
|
state.eventSink(MediaGalleryEvents.LoadMore(item.direction))
|
||||||
|
}
|
||||||
|
}
|
||||||
LoadingContent(mode)
|
LoadingContent(mode)
|
||||||
} else {
|
} else {
|
||||||
when (groupedMediaItems) {
|
when (groupedMediaItems) {
|
||||||
|
|||||||
+20
-16
@@ -71,14 +71,26 @@ class MediaViewerDataSource(
|
|||||||
fun dataFlow(): Flow<PersistentList<MediaViewerPageData>> {
|
fun dataFlow(): Flow<PersistentList<MediaViewerPageData>> {
|
||||||
return galleryDataSource.groupedMediaItemsFlow()
|
return galleryDataSource.groupedMediaItemsFlow()
|
||||||
.map { groupedItems ->
|
.map { groupedItems ->
|
||||||
if (groupedItems is AsyncData.Failure) {
|
when (groupedItems) {
|
||||||
persistentListOf(
|
AsyncData.Uninitialized,
|
||||||
MediaViewerPageData.Failure(groupedItems.error),
|
is AsyncData.Loading -> {
|
||||||
)
|
persistentListOf(
|
||||||
} else {
|
MediaViewerPageData.Loading(
|
||||||
val mediaItems = groupedItems.dataOrNull()?.getItems(galleryMode).orEmpty()
|
direction = Timeline.PaginationDirection.BACKWARDS,
|
||||||
withContext(dispatcher) {
|
timestamp = systemClock.epochMillis(),
|
||||||
buildMediaViewerPageList(mediaItems)
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
is AsyncData.Failure -> {
|
||||||
|
persistentListOf(
|
||||||
|
MediaViewerPageData.Failure(groupedItems.error),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
is AsyncData.Success -> {
|
||||||
|
withContext(dispatcher) {
|
||||||
|
val mediaItems = groupedItems.data.getItems(galleryMode)
|
||||||
|
buildMediaViewerPageList(mediaItems)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -117,14 +129,6 @@ class MediaViewerDataSource(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (isEmpty()) {
|
|
||||||
add(
|
|
||||||
MediaViewerPageData.Loading(
|
|
||||||
direction = Timeline.PaginationDirection.BACKWARDS,
|
|
||||||
timestamp = systemClock.epochMillis(),
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}.toPersistentList()
|
}.toPersistentList()
|
||||||
|
|
||||||
fun clearLoadingError(data: MediaViewerPageData.MediaViewerData) {
|
fun clearLoadingError(data: MediaViewerPageData.MediaViewerData) {
|
||||||
|
|||||||
+1
-7
@@ -91,13 +91,7 @@ class MediaViewerDataSourceTest {
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
val result = awaitItem()
|
val result = awaitItem()
|
||||||
assertThat(result).hasSize(1)
|
assertThat(result).isEmpty()
|
||||||
assertThat(result.first()).isEqualTo(
|
|
||||||
MediaViewerPageData.Loading(
|
|
||||||
direction = Timeline.PaginationDirection.BACKWARDS,
|
|
||||||
timestamp = A_FAKE_TIMESTAMP,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+5
-5
@@ -72,7 +72,7 @@ class MediaViewerPresenterTest {
|
|||||||
)
|
)
|
||||||
presenter.test {
|
presenter.test {
|
||||||
val initialState = awaitFirstItem()
|
val initialState = awaitFirstItem()
|
||||||
assertThat(initialState.listData.singleOrNull()).isInstanceOf(MediaViewerPageData.Loading::class.java)
|
assertThat(initialState.listData).isEmpty()
|
||||||
assertThat(initialState.currentIndex).isEqualTo(0)
|
assertThat(initialState.currentIndex).isEqualTo(0)
|
||||||
assertThat(initialState.snackbarMessage).isNull()
|
assertThat(initialState.snackbarMessage).isNull()
|
||||||
assertThat(initialState.canShowInfo).isTrue()
|
assertThat(initialState.canShowInfo).isTrue()
|
||||||
@@ -90,7 +90,7 @@ class MediaViewerPresenterTest {
|
|||||||
)
|
)
|
||||||
presenter.test {
|
presenter.test {
|
||||||
val initialState = awaitFirstItem()
|
val initialState = awaitFirstItem()
|
||||||
assertThat(initialState.listData.singleOrNull()).isInstanceOf(MediaViewerPageData.Loading::class.java)
|
assertThat(initialState.listData).isEmpty()
|
||||||
assertThat(initialState.currentIndex).isEqualTo(0)
|
assertThat(initialState.currentIndex).isEqualTo(0)
|
||||||
assertThat(initialState.snackbarMessage).isNull()
|
assertThat(initialState.snackbarMessage).isNull()
|
||||||
assertThat(initialState.canShowInfo).isFalse()
|
assertThat(initialState.canShowInfo).isFalse()
|
||||||
@@ -108,7 +108,7 @@ class MediaViewerPresenterTest {
|
|||||||
)
|
)
|
||||||
presenter.test {
|
presenter.test {
|
||||||
val initialState = awaitFirstItem()
|
val initialState = awaitFirstItem()
|
||||||
assertThat(initialState.listData.singleOrNull()).isInstanceOf(MediaViewerPageData.Loading::class.java)
|
assertThat(initialState.listData).isEmpty()
|
||||||
assertThat(initialState.currentIndex).isEqualTo(0)
|
assertThat(initialState.currentIndex).isEqualTo(0)
|
||||||
assertThat(initialState.snackbarMessage).isNull()
|
assertThat(initialState.snackbarMessage).isNull()
|
||||||
assertThat(initialState.canShowInfo).isTrue()
|
assertThat(initialState.canShowInfo).isTrue()
|
||||||
@@ -127,7 +127,7 @@ class MediaViewerPresenterTest {
|
|||||||
)
|
)
|
||||||
presenter.test {
|
presenter.test {
|
||||||
val initialState = awaitFirstItem()
|
val initialState = awaitFirstItem()
|
||||||
assertThat(initialState.listData.singleOrNull()).isInstanceOf(MediaViewerPageData.Loading::class.java)
|
assertThat(initialState.listData).isEmpty()
|
||||||
assertThat(initialState.currentIndex).isEqualTo(0)
|
assertThat(initialState.currentIndex).isEqualTo(0)
|
||||||
assertThat(initialState.snackbarMessage).isNull()
|
assertThat(initialState.snackbarMessage).isNull()
|
||||||
assertThat(initialState.canShowInfo).isTrue()
|
assertThat(initialState.canShowInfo).isTrue()
|
||||||
@@ -146,7 +146,7 @@ class MediaViewerPresenterTest {
|
|||||||
val anImage = aMediaItemImage()
|
val anImage = aMediaItemImage()
|
||||||
presenter.test {
|
presenter.test {
|
||||||
val initialState = awaitFirstItem()
|
val initialState = awaitFirstItem()
|
||||||
assertThat(initialState.listData.singleOrNull()).isInstanceOf(MediaViewerPageData.Loading::class.java)
|
assertThat(initialState.listData).isEmpty()
|
||||||
mediaGalleryDataSource.emitGroupedMediaItems(
|
mediaGalleryDataSource.emitGroupedMediaItems(
|
||||||
AsyncData.Success(
|
AsyncData.Success(
|
||||||
GroupedMediaItems(
|
GroupedMediaItems(
|
||||||
|
|||||||
Reference in New Issue
Block a user