MediaViewerEvents -> MediaViewerEvent
This commit is contained in:
parent
ce30a4ab23
commit
5d8b9ef56c
7 changed files with 97 additions and 97 deletions
|
|
@ -11,22 +11,22 @@ package io.element.android.libraries.mediaviewer.impl.viewer
|
||||||
import io.element.android.libraries.matrix.api.core.EventId
|
import io.element.android.libraries.matrix.api.core.EventId
|
||||||
import io.element.android.libraries.matrix.api.timeline.Timeline
|
import io.element.android.libraries.matrix.api.timeline.Timeline
|
||||||
|
|
||||||
sealed interface MediaViewerEvents {
|
sealed interface MediaViewerEvent {
|
||||||
data class LoadMedia(val data: MediaViewerPageData.MediaViewerData) : MediaViewerEvents
|
data class LoadMedia(val data: MediaViewerPageData.MediaViewerData) : MediaViewerEvent
|
||||||
data class SaveOnDisk(val data: MediaViewerPageData.MediaViewerData) : MediaViewerEvents
|
data class SaveOnDisk(val data: MediaViewerPageData.MediaViewerData) : MediaViewerEvent
|
||||||
data class Share(val data: MediaViewerPageData.MediaViewerData) : MediaViewerEvents
|
data class Share(val data: MediaViewerPageData.MediaViewerData) : MediaViewerEvent
|
||||||
data class OpenWith(val data: MediaViewerPageData.MediaViewerData) : MediaViewerEvents
|
data class OpenWith(val data: MediaViewerPageData.MediaViewerData) : MediaViewerEvent
|
||||||
data class ClearLoadingError(val data: MediaViewerPageData.MediaViewerData) : MediaViewerEvents
|
data class ClearLoadingError(val data: MediaViewerPageData.MediaViewerData) : MediaViewerEvent
|
||||||
data class ViewInTimeline(val eventId: EventId) : MediaViewerEvents
|
data class ViewInTimeline(val eventId: EventId) : MediaViewerEvent
|
||||||
data class Forward(val eventId: EventId) : MediaViewerEvents
|
data class Forward(val eventId: EventId) : MediaViewerEvent
|
||||||
data class OpenInfo(val data: MediaViewerPageData.MediaViewerData) : MediaViewerEvents
|
data class OpenInfo(val data: MediaViewerPageData.MediaViewerData) : MediaViewerEvent
|
||||||
data class ConfirmDelete(
|
data class ConfirmDelete(
|
||||||
val eventId: EventId,
|
val eventId: EventId,
|
||||||
val data: MediaViewerPageData.MediaViewerData,
|
val data: MediaViewerPageData.MediaViewerData,
|
||||||
) : MediaViewerEvents
|
) : MediaViewerEvent
|
||||||
|
|
||||||
data object CloseBottomSheet : MediaViewerEvents
|
data object CloseBottomSheet : MediaViewerEvent
|
||||||
data class Delete(val eventId: EventId) : MediaViewerEvents
|
data class Delete(val eventId: EventId) : MediaViewerEvent
|
||||||
data class OnNavigateTo(val index: Int) : MediaViewerEvents
|
data class OnNavigateTo(val index: Int) : MediaViewerEvent
|
||||||
data class LoadMore(val direction: Timeline.PaginationDirection) : MediaViewerEvents
|
data class LoadMore(val direction: Timeline.PaginationDirection) : MediaViewerEvent
|
||||||
}
|
}
|
||||||
|
|
@ -95,42 +95,42 @@ class MediaViewerPresenter(
|
||||||
}
|
}
|
||||||
localMediaActions.Configure()
|
localMediaActions.Configure()
|
||||||
|
|
||||||
fun handleEvent(event: MediaViewerEvents) {
|
fun handleEvent(event: MediaViewerEvent) {
|
||||||
when (event) {
|
when (event) {
|
||||||
is MediaViewerEvents.LoadMedia -> {
|
is MediaViewerEvent.LoadMedia -> {
|
||||||
coroutineScope.downloadMedia(data = event.data)
|
coroutineScope.downloadMedia(data = event.data)
|
||||||
}
|
}
|
||||||
is MediaViewerEvents.ClearLoadingError -> {
|
is MediaViewerEvent.ClearLoadingError -> {
|
||||||
dataSource.clearLoadingError(event.data)
|
dataSource.clearLoadingError(event.data)
|
||||||
}
|
}
|
||||||
is MediaViewerEvents.SaveOnDisk -> {
|
is MediaViewerEvent.SaveOnDisk -> {
|
||||||
mediaBottomSheetState = MediaBottomSheetState.Hidden
|
mediaBottomSheetState = MediaBottomSheetState.Hidden
|
||||||
coroutineScope.saveOnDisk(event.data.downloadedMedia.value)
|
coroutineScope.saveOnDisk(event.data.downloadedMedia.value)
|
||||||
}
|
}
|
||||||
is MediaViewerEvents.Share -> {
|
is MediaViewerEvent.Share -> {
|
||||||
mediaBottomSheetState = MediaBottomSheetState.Hidden
|
mediaBottomSheetState = MediaBottomSheetState.Hidden
|
||||||
coroutineScope.share(event.data.downloadedMedia.value)
|
coroutineScope.share(event.data.downloadedMedia.value)
|
||||||
}
|
}
|
||||||
is MediaViewerEvents.OpenWith -> {
|
is MediaViewerEvent.OpenWith -> {
|
||||||
mediaBottomSheetState = MediaBottomSheetState.Hidden
|
mediaBottomSheetState = MediaBottomSheetState.Hidden
|
||||||
coroutineScope.open(event.data.downloadedMedia.value)
|
coroutineScope.open(event.data.downloadedMedia.value)
|
||||||
}
|
}
|
||||||
is MediaViewerEvents.Delete -> {
|
is MediaViewerEvent.Delete -> {
|
||||||
mediaBottomSheetState = MediaBottomSheetState.Hidden
|
mediaBottomSheetState = MediaBottomSheetState.Hidden
|
||||||
coroutineScope.delete(event.eventId)
|
coroutineScope.delete(event.eventId)
|
||||||
}
|
}
|
||||||
is MediaViewerEvents.ViewInTimeline -> {
|
is MediaViewerEvent.ViewInTimeline -> {
|
||||||
mediaBottomSheetState = MediaBottomSheetState.Hidden
|
mediaBottomSheetState = MediaBottomSheetState.Hidden
|
||||||
navigator.onViewInTimelineClick(event.eventId)
|
navigator.onViewInTimelineClick(event.eventId)
|
||||||
}
|
}
|
||||||
is MediaViewerEvents.Forward -> {
|
is MediaViewerEvent.Forward -> {
|
||||||
mediaBottomSheetState = MediaBottomSheetState.Hidden
|
mediaBottomSheetState = MediaBottomSheetState.Hidden
|
||||||
navigator.onForwardClick(
|
navigator.onForwardClick(
|
||||||
eventId = event.eventId,
|
eventId = event.eventId,
|
||||||
fromPinnedEvents = inputs.mode.getTimelineMode() == Timeline.Mode.PinnedEvents,
|
fromPinnedEvents = inputs.mode.getTimelineMode() == Timeline.Mode.PinnedEvents,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
is MediaViewerEvents.OpenInfo -> coroutineScope.launch {
|
is MediaViewerEvent.OpenInfo -> coroutineScope.launch {
|
||||||
mediaBottomSheetState = MediaBottomSheetState.MediaDetailsBottomSheetState(
|
mediaBottomSheetState = MediaBottomSheetState.MediaDetailsBottomSheetState(
|
||||||
eventId = event.data.eventId,
|
eventId = event.data.eventId,
|
||||||
canDelete = when (event.data.mediaInfo.senderId) {
|
canDelete = when (event.data.mediaInfo.senderId) {
|
||||||
|
|
@ -142,20 +142,20 @@ class MediaViewerPresenter(
|
||||||
thumbnailSource = event.data.thumbnailSource,
|
thumbnailSource = event.data.thumbnailSource,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
is MediaViewerEvents.ConfirmDelete -> {
|
is MediaViewerEvent.ConfirmDelete -> {
|
||||||
mediaBottomSheetState = MediaBottomSheetState.MediaDeleteConfirmationState(
|
mediaBottomSheetState = MediaBottomSheetState.MediaDeleteConfirmationState(
|
||||||
eventId = event.eventId,
|
eventId = event.eventId,
|
||||||
mediaInfo = event.data.mediaInfo,
|
mediaInfo = event.data.mediaInfo,
|
||||||
thumbnailSource = event.data.thumbnailSource ?: event.data.mediaSource,
|
thumbnailSource = event.data.thumbnailSource ?: event.data.mediaSource,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
MediaViewerEvents.CloseBottomSheet -> {
|
MediaViewerEvent.CloseBottomSheet -> {
|
||||||
mediaBottomSheetState = MediaBottomSheetState.Hidden
|
mediaBottomSheetState = MediaBottomSheetState.Hidden
|
||||||
}
|
}
|
||||||
is MediaViewerEvents.OnNavigateTo -> {
|
is MediaViewerEvent.OnNavigateTo -> {
|
||||||
currentIndex.intValue = event.index
|
currentIndex.intValue = event.index
|
||||||
}
|
}
|
||||||
is MediaViewerEvents.LoadMore -> coroutineScope.launch {
|
is MediaViewerEvent.LoadMore -> coroutineScope.launch {
|
||||||
dataSource.loadMore(event.direction)
|
dataSource.loadMore(event.direction)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ data class MediaViewerState(
|
||||||
val snackbarMessage: SnackbarMessage?,
|
val snackbarMessage: SnackbarMessage?,
|
||||||
val canShowInfo: Boolean,
|
val canShowInfo: Boolean,
|
||||||
val mediaBottomSheetState: MediaBottomSheetState,
|
val mediaBottomSheetState: MediaBottomSheetState,
|
||||||
val eventSink: (MediaViewerEvents) -> Unit,
|
val eventSink: (MediaViewerEvent) -> Unit,
|
||||||
)
|
)
|
||||||
|
|
||||||
sealed interface MediaViewerPageData {
|
sealed interface MediaViewerPageData {
|
||||||
|
|
|
||||||
|
|
@ -226,7 +226,7 @@ fun aMediaViewerState(
|
||||||
currentIndex: Int = 0,
|
currentIndex: Int = 0,
|
||||||
canShowInfo: Boolean = true,
|
canShowInfo: Boolean = true,
|
||||||
mediaBottomSheetState: MediaBottomSheetState = MediaBottomSheetState.Hidden,
|
mediaBottomSheetState: MediaBottomSheetState = MediaBottomSheetState.Hidden,
|
||||||
eventSink: (MediaViewerEvents) -> Unit = {},
|
eventSink: (MediaViewerEvent) -> Unit = {},
|
||||||
) = MediaViewerState(
|
) = MediaViewerState(
|
||||||
initiallySelectedEventId = EventId("\$a:b"),
|
initiallySelectedEventId = EventId("\$a:b"),
|
||||||
listData = listData.toImmutableList(),
|
listData = listData.toImmutableList(),
|
||||||
|
|
|
||||||
|
|
@ -126,7 +126,7 @@ fun MediaViewerView(
|
||||||
}
|
}
|
||||||
LaunchedEffect(pagerState) {
|
LaunchedEffect(pagerState) {
|
||||||
snapshotFlow { pagerState.currentPage }.collect { page ->
|
snapshotFlow { pagerState.currentPage }.collect { page ->
|
||||||
state.eventSink(MediaViewerEvents.OnNavigateTo(page))
|
state.eventSink(MediaViewerEvent.OnNavigateTo(page))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
HorizontalPager(
|
HorizontalPager(
|
||||||
|
|
@ -145,7 +145,7 @@ fun MediaViewerView(
|
||||||
}
|
}
|
||||||
is MediaViewerPageData.Loading -> {
|
is MediaViewerPageData.Loading -> {
|
||||||
LaunchedEffect(dataForPage.timestamp) {
|
LaunchedEffect(dataForPage.timestamp) {
|
||||||
state.eventSink(MediaViewerEvents.LoadMore(dataForPage.direction))
|
state.eventSink(MediaViewerEvent.LoadMore(dataForPage.direction))
|
||||||
}
|
}
|
||||||
MediaViewerLoadingPage(
|
MediaViewerLoadingPage(
|
||||||
onDismiss = onBackClick,
|
onDismiss = onBackClick,
|
||||||
|
|
@ -154,7 +154,7 @@ fun MediaViewerView(
|
||||||
is MediaViewerPageData.MediaViewerData -> {
|
is MediaViewerPageData.MediaViewerData -> {
|
||||||
var bottomPaddingInPixels by remember { mutableIntStateOf(defaultBottomPaddingInPixels) }
|
var bottomPaddingInPixels by remember { mutableIntStateOf(defaultBottomPaddingInPixels) }
|
||||||
LaunchedEffect(Unit) {
|
LaunchedEffect(Unit) {
|
||||||
state.eventSink(MediaViewerEvents.LoadMedia(dataForPage))
|
state.eventSink(MediaViewerEvent.LoadMedia(dataForPage))
|
||||||
}
|
}
|
||||||
Box(
|
Box(
|
||||||
modifier = Modifier.fillMaxSize()
|
modifier = Modifier.fillMaxSize()
|
||||||
|
|
@ -173,10 +173,10 @@ fun MediaViewerView(
|
||||||
textFileViewer = textFileViewer,
|
textFileViewer = textFileViewer,
|
||||||
onDismiss = onBackClick,
|
onDismiss = onBackClick,
|
||||||
onRetry = {
|
onRetry = {
|
||||||
state.eventSink(MediaViewerEvents.LoadMedia(dataForPage))
|
state.eventSink(MediaViewerEvent.LoadMedia(dataForPage))
|
||||||
},
|
},
|
||||||
onDismissError = {
|
onDismissError = {
|
||||||
state.eventSink(MediaViewerEvents.ClearLoadingError(dataForPage))
|
state.eventSink(MediaViewerEvent.ClearLoadingError(dataForPage))
|
||||||
},
|
},
|
||||||
onShowOverlayChange = {
|
onShowOverlayChange = {
|
||||||
showOverlay = it
|
showOverlay = it
|
||||||
|
|
@ -215,7 +215,7 @@ fun MediaViewerView(
|
||||||
canShowInfo = state.canShowInfo,
|
canShowInfo = state.canShowInfo,
|
||||||
onBackClick = onBackClick,
|
onBackClick = onBackClick,
|
||||||
onInfoClick = {
|
onInfoClick = {
|
||||||
state.eventSink(MediaViewerEvents.OpenInfo(currentData))
|
state.eventSink(MediaViewerEvent.OpenInfo(currentData))
|
||||||
},
|
},
|
||||||
eventSink = state.eventSink
|
eventSink = state.eventSink
|
||||||
)
|
)
|
||||||
|
|
@ -251,25 +251,25 @@ fun MediaViewerView(
|
||||||
MediaDetailsBottomSheet(
|
MediaDetailsBottomSheet(
|
||||||
state = bottomSheetState,
|
state = bottomSheetState,
|
||||||
onViewInTimeline = {
|
onViewInTimeline = {
|
||||||
state.eventSink(MediaViewerEvents.ViewInTimeline(it))
|
state.eventSink(MediaViewerEvent.ViewInTimeline(it))
|
||||||
},
|
},
|
||||||
onShare = {
|
onShare = {
|
||||||
(currentData as? MediaViewerPageData.MediaViewerData)?.let {
|
(currentData as? MediaViewerPageData.MediaViewerData)?.let {
|
||||||
state.eventSink(MediaViewerEvents.Share(currentData))
|
state.eventSink(MediaViewerEvent.Share(currentData))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onForward = {
|
onForward = {
|
||||||
state.eventSink(MediaViewerEvents.Forward(it))
|
state.eventSink(MediaViewerEvent.Forward(it))
|
||||||
},
|
},
|
||||||
onDownload = {
|
onDownload = {
|
||||||
(currentData as? MediaViewerPageData.MediaViewerData)?.let {
|
(currentData as? MediaViewerPageData.MediaViewerData)?.let {
|
||||||
state.eventSink(MediaViewerEvents.SaveOnDisk(currentData))
|
state.eventSink(MediaViewerEvent.SaveOnDisk(currentData))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onDelete = { eventId ->
|
onDelete = { eventId ->
|
||||||
(currentData as? MediaViewerPageData.MediaViewerData)?.let {
|
(currentData as? MediaViewerPageData.MediaViewerData)?.let {
|
||||||
state.eventSink(
|
state.eventSink(
|
||||||
MediaViewerEvents.ConfirmDelete(
|
MediaViewerEvent.ConfirmDelete(
|
||||||
eventId,
|
eventId,
|
||||||
currentData,
|
currentData,
|
||||||
)
|
)
|
||||||
|
|
@ -277,7 +277,7 @@ fun MediaViewerView(
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onDismiss = {
|
onDismiss = {
|
||||||
state.eventSink(MediaViewerEvents.CloseBottomSheet)
|
state.eventSink(MediaViewerEvent.CloseBottomSheet)
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
@ -285,10 +285,10 @@ fun MediaViewerView(
|
||||||
MediaDeleteConfirmationBottomSheet(
|
MediaDeleteConfirmationBottomSheet(
|
||||||
state = bottomSheetState,
|
state = bottomSheetState,
|
||||||
onDelete = {
|
onDelete = {
|
||||||
state.eventSink(MediaViewerEvents.Delete(it))
|
state.eventSink(MediaViewerEvent.Delete(it))
|
||||||
},
|
},
|
||||||
onDismiss = {
|
onDismiss = {
|
||||||
state.eventSink(MediaViewerEvents.CloseBottomSheet)
|
state.eventSink(MediaViewerEvent.CloseBottomSheet)
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
@ -458,7 +458,7 @@ private fun MediaViewerTopBar(
|
||||||
canShowInfo: Boolean,
|
canShowInfo: Boolean,
|
||||||
onBackClick: () -> Unit,
|
onBackClick: () -> Unit,
|
||||||
onInfoClick: () -> Unit,
|
onInfoClick: () -> Unit,
|
||||||
eventSink: (MediaViewerEvents) -> Unit,
|
eventSink: (MediaViewerEvent) -> Unit,
|
||||||
) {
|
) {
|
||||||
val downloadedMedia by data.downloadedMedia
|
val downloadedMedia by data.downloadedMedia
|
||||||
val actionsEnabled = downloadedMedia.isSuccess()
|
val actionsEnabled = downloadedMedia.isSuccess()
|
||||||
|
|
@ -500,7 +500,7 @@ private fun MediaViewerTopBar(
|
||||||
IconButton(
|
IconButton(
|
||||||
enabled = actionsEnabled,
|
enabled = actionsEnabled,
|
||||||
onClick = {
|
onClick = {
|
||||||
eventSink(MediaViewerEvents.OpenWith(data))
|
eventSink(MediaViewerEvent.OpenWith(data))
|
||||||
},
|
},
|
||||||
) {
|
) {
|
||||||
when (mimeType) {
|
when (mimeType) {
|
||||||
|
|
|
||||||
|
|
@ -226,7 +226,7 @@ class MediaViewerPresenterTest {
|
||||||
)
|
)
|
||||||
val updatedState = awaitItem()
|
val updatedState = awaitItem()
|
||||||
updatedState.eventSink(
|
updatedState.eventSink(
|
||||||
MediaViewerEvents.LoadMedia(
|
MediaViewerEvent.LoadMedia(
|
||||||
aMediaViewerPageData(
|
aMediaViewerPageData(
|
||||||
mediaSource = MediaSource(aUrl)
|
mediaSource = MediaSource(aUrl)
|
||||||
)
|
)
|
||||||
|
|
@ -266,7 +266,7 @@ class MediaViewerPresenterTest {
|
||||||
)
|
)
|
||||||
val updatedState = awaitItem()
|
val updatedState = awaitItem()
|
||||||
updatedState.eventSink(
|
updatedState.eventSink(
|
||||||
MediaViewerEvents.OpenInfo(
|
MediaViewerEvent.OpenInfo(
|
||||||
aMediaViewerPageData(
|
aMediaViewerPageData(
|
||||||
mediaSource = MediaSource(aUrl)
|
mediaSource = MediaSource(aUrl)
|
||||||
)
|
)
|
||||||
|
|
@ -275,7 +275,7 @@ class MediaViewerPresenterTest {
|
||||||
val withInfoState = awaitItem()
|
val withInfoState = awaitItem()
|
||||||
assertThat(withInfoState.mediaBottomSheetState).isInstanceOf(MediaBottomSheetState.MediaDetailsBottomSheetState::class.java)
|
assertThat(withInfoState.mediaBottomSheetState).isInstanceOf(MediaBottomSheetState.MediaDetailsBottomSheetState::class.java)
|
||||||
withInfoState.eventSink(
|
withInfoState.eventSink(
|
||||||
MediaViewerEvents.CloseBottomSheet
|
MediaViewerEvent.CloseBottomSheet
|
||||||
)
|
)
|
||||||
val finalState = awaitItem()
|
val finalState = awaitItem()
|
||||||
assertThat(finalState.mediaBottomSheetState).isEqualTo(MediaBottomSheetState.Hidden)
|
assertThat(finalState.mediaBottomSheetState).isEqualTo(MediaBottomSheetState.Hidden)
|
||||||
|
|
@ -306,7 +306,7 @@ class MediaViewerPresenterTest {
|
||||||
)
|
)
|
||||||
val updatedState = awaitItem()
|
val updatedState = awaitItem()
|
||||||
updatedState.eventSink(
|
updatedState.eventSink(
|
||||||
MediaViewerEvents.ClearLoadingError(
|
MediaViewerEvent.ClearLoadingError(
|
||||||
aMediaViewerPageData(
|
aMediaViewerPageData(
|
||||||
mediaSource = MediaSource(aUrl)
|
mediaSource = MediaSource(aUrl)
|
||||||
)
|
)
|
||||||
|
|
@ -339,7 +339,7 @@ class MediaViewerPresenterTest {
|
||||||
)
|
)
|
||||||
val updatedState = awaitItem()
|
val updatedState = awaitItem()
|
||||||
updatedState.eventSink(
|
updatedState.eventSink(
|
||||||
MediaViewerEvents.Share(
|
MediaViewerEvent.Share(
|
||||||
aMediaViewerPageData(
|
aMediaViewerPageData(
|
||||||
mediaSource = MediaSource(aUrl)
|
mediaSource = MediaSource(aUrl)
|
||||||
)
|
)
|
||||||
|
|
@ -372,7 +372,7 @@ class MediaViewerPresenterTest {
|
||||||
)
|
)
|
||||||
val updatedState = awaitItem()
|
val updatedState = awaitItem()
|
||||||
updatedState.eventSink(
|
updatedState.eventSink(
|
||||||
MediaViewerEvents.SaveOnDisk(
|
MediaViewerEvent.SaveOnDisk(
|
||||||
aMediaViewerPageData(
|
aMediaViewerPageData(
|
||||||
mediaSource = MediaSource(aUrl)
|
mediaSource = MediaSource(aUrl)
|
||||||
)
|
)
|
||||||
|
|
@ -405,7 +405,7 @@ class MediaViewerPresenterTest {
|
||||||
)
|
)
|
||||||
val updatedState = awaitItem()
|
val updatedState = awaitItem()
|
||||||
updatedState.eventSink(
|
updatedState.eventSink(
|
||||||
MediaViewerEvents.OpenWith(
|
MediaViewerEvent.OpenWith(
|
||||||
aMediaViewerPageData(
|
aMediaViewerPageData(
|
||||||
mediaSource = MediaSource(aUrl)
|
mediaSource = MediaSource(aUrl)
|
||||||
)
|
)
|
||||||
|
|
@ -438,7 +438,7 @@ class MediaViewerPresenterTest {
|
||||||
)
|
)
|
||||||
val updatedState = awaitItem()
|
val updatedState = awaitItem()
|
||||||
updatedState.eventSink(
|
updatedState.eventSink(
|
||||||
MediaViewerEvents.ConfirmDelete(
|
MediaViewerEvent.ConfirmDelete(
|
||||||
eventId = AN_EVENT_ID,
|
eventId = AN_EVENT_ID,
|
||||||
data = aMediaViewerPageData(
|
data = aMediaViewerPageData(
|
||||||
mediaSource = MediaSource(aUrl)
|
mediaSource = MediaSource(aUrl)
|
||||||
|
|
@ -448,7 +448,7 @@ class MediaViewerPresenterTest {
|
||||||
val withBottomSheetState = awaitItem()
|
val withBottomSheetState = awaitItem()
|
||||||
assertThat(withBottomSheetState.mediaBottomSheetState).isInstanceOf(MediaBottomSheetState.MediaDeleteConfirmationState::class.java)
|
assertThat(withBottomSheetState.mediaBottomSheetState).isInstanceOf(MediaBottomSheetState.MediaDeleteConfirmationState::class.java)
|
||||||
withBottomSheetState.eventSink(
|
withBottomSheetState.eventSink(
|
||||||
MediaViewerEvents.CloseBottomSheet
|
MediaViewerEvent.CloseBottomSheet
|
||||||
)
|
)
|
||||||
val finalState = awaitItem()
|
val finalState = awaitItem()
|
||||||
assertThat(finalState.mediaBottomSheetState).isEqualTo(MediaBottomSheetState.Hidden)
|
assertThat(finalState.mediaBottomSheetState).isEqualTo(MediaBottomSheetState.Hidden)
|
||||||
|
|
@ -498,7 +498,7 @@ class MediaViewerPresenterTest {
|
||||||
)
|
)
|
||||||
val updatedState = awaitItem()
|
val updatedState = awaitItem()
|
||||||
updatedState.eventSink(
|
updatedState.eventSink(
|
||||||
MediaViewerEvents.ConfirmDelete(
|
MediaViewerEvent.ConfirmDelete(
|
||||||
eventId = AN_EVENT_ID,
|
eventId = AN_EVENT_ID,
|
||||||
data = aMediaViewerPageData(
|
data = aMediaViewerPageData(
|
||||||
mediaSource = MediaSource(aUrl)
|
mediaSource = MediaSource(aUrl)
|
||||||
|
|
@ -508,7 +508,7 @@ class MediaViewerPresenterTest {
|
||||||
val withBottomSheetState = awaitItem()
|
val withBottomSheetState = awaitItem()
|
||||||
assertThat(withBottomSheetState.mediaBottomSheetState).isInstanceOf(MediaBottomSheetState.MediaDeleteConfirmationState::class.java)
|
assertThat(withBottomSheetState.mediaBottomSheetState).isInstanceOf(MediaBottomSheetState.MediaDeleteConfirmationState::class.java)
|
||||||
updatedState.eventSink(
|
updatedState.eventSink(
|
||||||
MediaViewerEvents.Delete(
|
MediaViewerEvent.Delete(
|
||||||
eventId = AN_EVENT_ID,
|
eventId = AN_EVENT_ID,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
@ -551,7 +551,7 @@ class MediaViewerPresenterTest {
|
||||||
)
|
)
|
||||||
val updatedState = awaitItem()
|
val updatedState = awaitItem()
|
||||||
updatedState.eventSink(
|
updatedState.eventSink(
|
||||||
MediaViewerEvents.OnNavigateTo(1)
|
MediaViewerEvent.OnNavigateTo(1)
|
||||||
)
|
)
|
||||||
val finalState = awaitItem()
|
val finalState = awaitItem()
|
||||||
assertThat(finalState.currentIndex).isEqualTo(1)
|
assertThat(finalState.currentIndex).isEqualTo(1)
|
||||||
|
|
@ -606,7 +606,7 @@ class MediaViewerPresenterTest {
|
||||||
val updatedState = awaitItem()
|
val updatedState = awaitItem()
|
||||||
// User navigate to the last item (forward loading indicator)
|
// User navigate to the last item (forward loading indicator)
|
||||||
updatedState.eventSink(
|
updatedState.eventSink(
|
||||||
MediaViewerEvents.OnNavigateTo(2)
|
MediaViewerEvent.OnNavigateTo(2)
|
||||||
)
|
)
|
||||||
// data source claims that there is no more items to load forward
|
// data source claims that there is no more items to load forward
|
||||||
mediaGalleryDataSource.emitGroupedMediaItems(
|
mediaGalleryDataSource.emitGroupedMediaItems(
|
||||||
|
|
@ -680,7 +680,7 @@ class MediaViewerPresenterTest {
|
||||||
val updatedState = awaitItem()
|
val updatedState = awaitItem()
|
||||||
// User navigate to the first item (backward loading indicator)
|
// User navigate to the first item (backward loading indicator)
|
||||||
updatedState.eventSink(
|
updatedState.eventSink(
|
||||||
MediaViewerEvents.OnNavigateTo(0)
|
MediaViewerEvent.OnNavigateTo(0)
|
||||||
)
|
)
|
||||||
// data source claims that there is no more items to load backward
|
// data source claims that there is no more items to load backward
|
||||||
mediaGalleryDataSource.emitGroupedMediaItems(
|
mediaGalleryDataSource.emitGroupedMediaItems(
|
||||||
|
|
@ -728,7 +728,7 @@ class MediaViewerPresenterTest {
|
||||||
val updatedState = awaitItem()
|
val updatedState = awaitItem()
|
||||||
// User navigate to the media
|
// User navigate to the media
|
||||||
updatedState.eventSink(
|
updatedState.eventSink(
|
||||||
MediaViewerEvents.OnNavigateTo(1)
|
MediaViewerEvent.OnNavigateTo(1)
|
||||||
)
|
)
|
||||||
skipItems(1)
|
skipItems(1)
|
||||||
// data source claims that there is no more items to load at all
|
// data source claims that there is no more items to load at all
|
||||||
|
|
@ -771,7 +771,7 @@ class MediaViewerPresenterTest {
|
||||||
)
|
)
|
||||||
val updatedState = awaitItem()
|
val updatedState = awaitItem()
|
||||||
updatedState.eventSink(
|
updatedState.eventSink(
|
||||||
MediaViewerEvents.LoadMore(Timeline.PaginationDirection.BACKWARDS)
|
MediaViewerEvent.LoadMore(Timeline.PaginationDirection.BACKWARDS)
|
||||||
)
|
)
|
||||||
loadMoreLambda.assertions().isCalledOnce().with(value(Timeline.PaginationDirection.BACKWARDS))
|
loadMoreLambda.assertions().isCalledOnce().with(value(Timeline.PaginationDirection.BACKWARDS))
|
||||||
}
|
}
|
||||||
|
|
@ -796,10 +796,10 @@ class MediaViewerPresenterTest {
|
||||||
)
|
)
|
||||||
presenter.test {
|
presenter.test {
|
||||||
val initialState = awaitItem()
|
val initialState = awaitItem()
|
||||||
initialState.eventSink(MediaViewerEvents.OpenInfo(aMediaViewerPageData()))
|
initialState.eventSink(MediaViewerEvent.OpenInfo(aMediaViewerPageData()))
|
||||||
val withBottomSheetState = awaitItem()
|
val withBottomSheetState = awaitItem()
|
||||||
assertThat(withBottomSheetState.mediaBottomSheetState).isInstanceOf(MediaBottomSheetState.MediaDetailsBottomSheetState::class.java)
|
assertThat(withBottomSheetState.mediaBottomSheetState).isInstanceOf(MediaBottomSheetState.MediaDetailsBottomSheetState::class.java)
|
||||||
initialState.eventSink(MediaViewerEvents.ViewInTimeline(AN_EVENT_ID))
|
initialState.eventSink(MediaViewerEvent.ViewInTimeline(AN_EVENT_ID))
|
||||||
val finalState = awaitItem()
|
val finalState = awaitItem()
|
||||||
assertThat(finalState.mediaBottomSheetState).isEqualTo(MediaBottomSheetState.Hidden)
|
assertThat(finalState.mediaBottomSheetState).isEqualTo(MediaBottomSheetState.Hidden)
|
||||||
onViewInTimelineClickLambda.assertions().isCalledOnce().with(value(AN_EVENT_ID))
|
onViewInTimelineClickLambda.assertions().isCalledOnce().with(value(AN_EVENT_ID))
|
||||||
|
|
@ -825,10 +825,10 @@ class MediaViewerPresenterTest {
|
||||||
)
|
)
|
||||||
presenter.test {
|
presenter.test {
|
||||||
val initialState = awaitItem()
|
val initialState = awaitItem()
|
||||||
initialState.eventSink(MediaViewerEvents.OpenInfo(aMediaViewerPageData()))
|
initialState.eventSink(MediaViewerEvent.OpenInfo(aMediaViewerPageData()))
|
||||||
val withBottomSheetState = awaitItem()
|
val withBottomSheetState = awaitItem()
|
||||||
assertThat(withBottomSheetState.mediaBottomSheetState).isInstanceOf(MediaBottomSheetState.MediaDetailsBottomSheetState::class.java)
|
assertThat(withBottomSheetState.mediaBottomSheetState).isInstanceOf(MediaBottomSheetState.MediaDetailsBottomSheetState::class.java)
|
||||||
initialState.eventSink(MediaViewerEvents.Forward(AN_EVENT_ID))
|
initialState.eventSink(MediaViewerEvent.Forward(AN_EVENT_ID))
|
||||||
val finalState = awaitItem()
|
val finalState = awaitItem()
|
||||||
assertThat(finalState.mediaBottomSheetState).isEqualTo(MediaBottomSheetState.Hidden)
|
assertThat(finalState.mediaBottomSheetState).isEqualTo(MediaBottomSheetState.Hidden)
|
||||||
onForwardClickLambda.assertions().isCalledOnce()
|
onForwardClickLambda.assertions().isCalledOnce()
|
||||||
|
|
@ -856,10 +856,10 @@ class MediaViewerPresenterTest {
|
||||||
)
|
)
|
||||||
presenter.test {
|
presenter.test {
|
||||||
val initialState = awaitItem()
|
val initialState = awaitItem()
|
||||||
initialState.eventSink(MediaViewerEvents.OpenInfo(aMediaViewerPageData()))
|
initialState.eventSink(MediaViewerEvent.OpenInfo(aMediaViewerPageData()))
|
||||||
val withBottomSheetState = awaitItem()
|
val withBottomSheetState = awaitItem()
|
||||||
assertThat(withBottomSheetState.mediaBottomSheetState).isInstanceOf(MediaBottomSheetState.MediaDetailsBottomSheetState::class.java)
|
assertThat(withBottomSheetState.mediaBottomSheetState).isInstanceOf(MediaBottomSheetState.MediaDetailsBottomSheetState::class.java)
|
||||||
initialState.eventSink(MediaViewerEvents.Forward(AN_EVENT_ID))
|
initialState.eventSink(MediaViewerEvent.Forward(AN_EVENT_ID))
|
||||||
val finalState = awaitItem()
|
val finalState = awaitItem()
|
||||||
assertThat(finalState.mediaBottomSheetState).isEqualTo(MediaBottomSheetState.Hidden)
|
assertThat(finalState.mediaBottomSheetState).isEqualTo(MediaBottomSheetState.Hidden)
|
||||||
onForwardClickLambda.assertions().isCalledOnce()
|
onForwardClickLambda.assertions().isCalledOnce()
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ class MediaViewerViewTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `clicking on back invokes expected callback`() {
|
fun `clicking on back invokes expected callback`() {
|
||||||
val eventsRecorder = EventsRecorder<MediaViewerEvents>()
|
val eventsRecorder = EventsRecorder<MediaViewerEvent>()
|
||||||
val state = aMediaViewerState(
|
val state = aMediaViewerState(
|
||||||
eventSink = eventsRecorder
|
eventSink = eventsRecorder
|
||||||
)
|
)
|
||||||
|
|
@ -56,8 +56,8 @@ class MediaViewerViewTest {
|
||||||
}
|
}
|
||||||
eventsRecorder.assertList(
|
eventsRecorder.assertList(
|
||||||
listOf(
|
listOf(
|
||||||
MediaViewerEvents.OnNavigateTo(0),
|
MediaViewerEvent.OnNavigateTo(0),
|
||||||
MediaViewerEvents.LoadMedia(state.listData.first() as MediaViewerPageData.MediaViewerData),
|
MediaViewerEvent.LoadMedia(state.listData.first() as MediaViewerPageData.MediaViewerData),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
@ -70,7 +70,7 @@ class MediaViewerViewTest {
|
||||||
testMenuAction(
|
testMenuAction(
|
||||||
data,
|
data,
|
||||||
CommonStrings.action_open_with,
|
CommonStrings.action_open_with,
|
||||||
MediaViewerEvents.OpenWith(data),
|
MediaViewerEvent.OpenWith(data),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -82,16 +82,16 @@ class MediaViewerViewTest {
|
||||||
testMenuAction(
|
testMenuAction(
|
||||||
data,
|
data,
|
||||||
CommonStrings.a11y_view_details,
|
CommonStrings.a11y_view_details,
|
||||||
MediaViewerEvents.OpenInfo(data),
|
MediaViewerEvent.OpenInfo(data),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun testMenuAction(
|
private fun testMenuAction(
|
||||||
data: MediaViewerPageData.MediaViewerData,
|
data: MediaViewerPageData.MediaViewerData,
|
||||||
contentDescriptionRes: Int,
|
contentDescriptionRes: Int,
|
||||||
expectedEvent: MediaViewerEvents,
|
expectedEvent: MediaViewerEvent,
|
||||||
) {
|
) {
|
||||||
val eventsRecorder = EventsRecorder<MediaViewerEvents>()
|
val eventsRecorder = EventsRecorder<MediaViewerEvent>()
|
||||||
rule.setMediaViewerView(
|
rule.setMediaViewerView(
|
||||||
aMediaViewerState(
|
aMediaViewerState(
|
||||||
listData = listOf(data),
|
listData = listOf(data),
|
||||||
|
|
@ -102,8 +102,8 @@ class MediaViewerViewTest {
|
||||||
rule.onNodeWithContentDescription(contentDescription).performClick()
|
rule.onNodeWithContentDescription(contentDescription).performClick()
|
||||||
eventsRecorder.assertList(
|
eventsRecorder.assertList(
|
||||||
listOf(
|
listOf(
|
||||||
MediaViewerEvents.OnNavigateTo(0),
|
MediaViewerEvent.OnNavigateTo(0),
|
||||||
MediaViewerEvents.LoadMedia(data),
|
MediaViewerEvent.LoadMedia(data),
|
||||||
expectedEvent,
|
expectedEvent,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
@ -116,7 +116,7 @@ class MediaViewerViewTest {
|
||||||
testBottomSheetAction(
|
testBottomSheetAction(
|
||||||
data,
|
data,
|
||||||
CommonStrings.action_save,
|
CommonStrings.action_save,
|
||||||
MediaViewerEvents.SaveOnDisk(data),
|
MediaViewerEvent.SaveOnDisk(data),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -127,16 +127,16 @@ class MediaViewerViewTest {
|
||||||
testBottomSheetAction(
|
testBottomSheetAction(
|
||||||
data,
|
data,
|
||||||
CommonStrings.action_share,
|
CommonStrings.action_share,
|
||||||
MediaViewerEvents.Share(data),
|
MediaViewerEvent.Share(data),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun testBottomSheetAction(
|
private fun testBottomSheetAction(
|
||||||
data: MediaViewerPageData.MediaViewerData,
|
data: MediaViewerPageData.MediaViewerData,
|
||||||
contentDescriptionRes: Int,
|
contentDescriptionRes: Int,
|
||||||
expectedEvent: MediaViewerEvents,
|
expectedEvent: MediaViewerEvent,
|
||||||
) {
|
) {
|
||||||
val eventsRecorder = EventsRecorder<MediaViewerEvents>()
|
val eventsRecorder = EventsRecorder<MediaViewerEvent>()
|
||||||
rule.setMediaViewerView(
|
rule.setMediaViewerView(
|
||||||
aMediaViewerState(
|
aMediaViewerState(
|
||||||
listData = listOf(data),
|
listData = listOf(data),
|
||||||
|
|
@ -147,8 +147,8 @@ class MediaViewerViewTest {
|
||||||
rule.clickOn(contentDescriptionRes)
|
rule.clickOn(contentDescriptionRes)
|
||||||
eventsRecorder.assertList(
|
eventsRecorder.assertList(
|
||||||
listOf(
|
listOf(
|
||||||
MediaViewerEvents.OnNavigateTo(0),
|
MediaViewerEvent.OnNavigateTo(0),
|
||||||
MediaViewerEvents.LoadMedia(data),
|
MediaViewerEvent.LoadMedia(data),
|
||||||
expectedEvent,
|
expectedEvent,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
@ -156,7 +156,7 @@ class MediaViewerViewTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `clicking on image hides the overlay`() {
|
fun `clicking on image hides the overlay`() {
|
||||||
val eventsRecorder = EventsRecorder<MediaViewerEvents>()
|
val eventsRecorder = EventsRecorder<MediaViewerEvent>()
|
||||||
val state = aMediaViewerState(
|
val state = aMediaViewerState(
|
||||||
eventSink = eventsRecorder
|
eventSink = eventsRecorder
|
||||||
)
|
)
|
||||||
|
|
@ -176,15 +176,15 @@ class MediaViewerViewTest {
|
||||||
.assertDoesNotExist()
|
.assertDoesNotExist()
|
||||||
eventsRecorder.assertList(
|
eventsRecorder.assertList(
|
||||||
listOf(
|
listOf(
|
||||||
MediaViewerEvents.OnNavigateTo(0),
|
MediaViewerEvent.OnNavigateTo(0),
|
||||||
MediaViewerEvents.LoadMedia(state.listData.first() as MediaViewerPageData.MediaViewerData),
|
MediaViewerEvent.LoadMedia(state.listData.first() as MediaViewerPageData.MediaViewerData),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `clicking swipe on the image invokes the expected callback`() {
|
fun `clicking swipe on the image invokes the expected callback`() {
|
||||||
val eventsRecorder = EventsRecorder<MediaViewerEvents>()
|
val eventsRecorder = EventsRecorder<MediaViewerEvent>()
|
||||||
val state = aMediaViewerState(
|
val state = aMediaViewerState(
|
||||||
eventSink = eventsRecorder
|
eventSink = eventsRecorder
|
||||||
)
|
)
|
||||||
|
|
@ -199,15 +199,15 @@ class MediaViewerViewTest {
|
||||||
}
|
}
|
||||||
eventsRecorder.assertList(
|
eventsRecorder.assertList(
|
||||||
listOf(
|
listOf(
|
||||||
MediaViewerEvents.OnNavigateTo(0),
|
MediaViewerEvent.OnNavigateTo(0),
|
||||||
MediaViewerEvents.LoadMedia(state.listData.first() as MediaViewerPageData.MediaViewerData),
|
MediaViewerEvent.LoadMedia(state.listData.first() as MediaViewerPageData.MediaViewerData),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `error case, click on retry emits the expected Event`() {
|
fun `error case, click on retry emits the expected Event`() {
|
||||||
val eventsRecorder = EventsRecorder<MediaViewerEvents>()
|
val eventsRecorder = EventsRecorder<MediaViewerEvent>()
|
||||||
val data = aMediaViewerPageData(
|
val data = aMediaViewerPageData(
|
||||||
downloadedMedia = AsyncData.Failure(IllegalStateException("error")),
|
downloadedMedia = AsyncData.Failure(IllegalStateException("error")),
|
||||||
)
|
)
|
||||||
|
|
@ -220,16 +220,16 @@ class MediaViewerViewTest {
|
||||||
rule.clickOn(CommonStrings.action_retry)
|
rule.clickOn(CommonStrings.action_retry)
|
||||||
eventsRecorder.assertList(
|
eventsRecorder.assertList(
|
||||||
listOf(
|
listOf(
|
||||||
MediaViewerEvents.OnNavigateTo(0),
|
MediaViewerEvent.OnNavigateTo(0),
|
||||||
MediaViewerEvents.LoadMedia(data),
|
MediaViewerEvent.LoadMedia(data),
|
||||||
MediaViewerEvents.LoadMedia(data),
|
MediaViewerEvent.LoadMedia(data),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `error case, click on cancel emits the expected Event`() {
|
fun `error case, click on cancel emits the expected Event`() {
|
||||||
val eventsRecorder = EventsRecorder<MediaViewerEvents>()
|
val eventsRecorder = EventsRecorder<MediaViewerEvent>()
|
||||||
val data = aMediaViewerPageData(
|
val data = aMediaViewerPageData(
|
||||||
downloadedMedia = AsyncData.Failure(IllegalStateException("error")),
|
downloadedMedia = AsyncData.Failure(IllegalStateException("error")),
|
||||||
)
|
)
|
||||||
|
|
@ -242,9 +242,9 @@ class MediaViewerViewTest {
|
||||||
rule.clickOn(CommonStrings.action_cancel)
|
rule.clickOn(CommonStrings.action_cancel)
|
||||||
eventsRecorder.assertList(
|
eventsRecorder.assertList(
|
||||||
listOf(
|
listOf(
|
||||||
MediaViewerEvents.OnNavigateTo(0),
|
MediaViewerEvent.OnNavigateTo(0),
|
||||||
MediaViewerEvents.LoadMedia(data),
|
MediaViewerEvent.LoadMedia(data),
|
||||||
MediaViewerEvents.ClearLoadingError(data)
|
MediaViewerEvent.ClearLoadingError(data)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue