MediaViewerEvents -> MediaViewerEvent

This commit is contained in:
Benoit Marty 2026-04-21 15:50:59 +02:00
parent ce30a4ab23
commit 5d8b9ef56c
7 changed files with 97 additions and 97 deletions

View file

@ -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.timeline.Timeline
sealed interface MediaViewerEvents {
data class LoadMedia(val data: MediaViewerPageData.MediaViewerData) : MediaViewerEvents
data class SaveOnDisk(val data: MediaViewerPageData.MediaViewerData) : MediaViewerEvents
data class Share(val data: MediaViewerPageData.MediaViewerData) : MediaViewerEvents
data class OpenWith(val data: MediaViewerPageData.MediaViewerData) : MediaViewerEvents
data class ClearLoadingError(val data: MediaViewerPageData.MediaViewerData) : MediaViewerEvents
data class ViewInTimeline(val eventId: EventId) : MediaViewerEvents
data class Forward(val eventId: EventId) : MediaViewerEvents
data class OpenInfo(val data: MediaViewerPageData.MediaViewerData) : MediaViewerEvents
sealed interface MediaViewerEvent {
data class LoadMedia(val data: MediaViewerPageData.MediaViewerData) : MediaViewerEvent
data class SaveOnDisk(val data: MediaViewerPageData.MediaViewerData) : MediaViewerEvent
data class Share(val data: MediaViewerPageData.MediaViewerData) : MediaViewerEvent
data class OpenWith(val data: MediaViewerPageData.MediaViewerData) : MediaViewerEvent
data class ClearLoadingError(val data: MediaViewerPageData.MediaViewerData) : MediaViewerEvent
data class ViewInTimeline(val eventId: EventId) : MediaViewerEvent
data class Forward(val eventId: EventId) : MediaViewerEvent
data class OpenInfo(val data: MediaViewerPageData.MediaViewerData) : MediaViewerEvent
data class ConfirmDelete(
val eventId: EventId,
val data: MediaViewerPageData.MediaViewerData,
) : MediaViewerEvents
) : MediaViewerEvent
data object CloseBottomSheet : MediaViewerEvents
data class Delete(val eventId: EventId) : MediaViewerEvents
data class OnNavigateTo(val index: Int) : MediaViewerEvents
data class LoadMore(val direction: Timeline.PaginationDirection) : MediaViewerEvents
data object CloseBottomSheet : MediaViewerEvent
data class Delete(val eventId: EventId) : MediaViewerEvent
data class OnNavigateTo(val index: Int) : MediaViewerEvent
data class LoadMore(val direction: Timeline.PaginationDirection) : MediaViewerEvent
}

View file

@ -95,42 +95,42 @@ class MediaViewerPresenter(
}
localMediaActions.Configure()
fun handleEvent(event: MediaViewerEvents) {
fun handleEvent(event: MediaViewerEvent) {
when (event) {
is MediaViewerEvents.LoadMedia -> {
is MediaViewerEvent.LoadMedia -> {
coroutineScope.downloadMedia(data = event.data)
}
is MediaViewerEvents.ClearLoadingError -> {
is MediaViewerEvent.ClearLoadingError -> {
dataSource.clearLoadingError(event.data)
}
is MediaViewerEvents.SaveOnDisk -> {
is MediaViewerEvent.SaveOnDisk -> {
mediaBottomSheetState = MediaBottomSheetState.Hidden
coroutineScope.saveOnDisk(event.data.downloadedMedia.value)
}
is MediaViewerEvents.Share -> {
is MediaViewerEvent.Share -> {
mediaBottomSheetState = MediaBottomSheetState.Hidden
coroutineScope.share(event.data.downloadedMedia.value)
}
is MediaViewerEvents.OpenWith -> {
is MediaViewerEvent.OpenWith -> {
mediaBottomSheetState = MediaBottomSheetState.Hidden
coroutineScope.open(event.data.downloadedMedia.value)
}
is MediaViewerEvents.Delete -> {
is MediaViewerEvent.Delete -> {
mediaBottomSheetState = MediaBottomSheetState.Hidden
coroutineScope.delete(event.eventId)
}
is MediaViewerEvents.ViewInTimeline -> {
is MediaViewerEvent.ViewInTimeline -> {
mediaBottomSheetState = MediaBottomSheetState.Hidden
navigator.onViewInTimelineClick(event.eventId)
}
is MediaViewerEvents.Forward -> {
is MediaViewerEvent.Forward -> {
mediaBottomSheetState = MediaBottomSheetState.Hidden
navigator.onForwardClick(
eventId = event.eventId,
fromPinnedEvents = inputs.mode.getTimelineMode() == Timeline.Mode.PinnedEvents,
)
}
is MediaViewerEvents.OpenInfo -> coroutineScope.launch {
is MediaViewerEvent.OpenInfo -> coroutineScope.launch {
mediaBottomSheetState = MediaBottomSheetState.MediaDetailsBottomSheetState(
eventId = event.data.eventId,
canDelete = when (event.data.mediaInfo.senderId) {
@ -142,20 +142,20 @@ class MediaViewerPresenter(
thumbnailSource = event.data.thumbnailSource,
)
}
is MediaViewerEvents.ConfirmDelete -> {
is MediaViewerEvent.ConfirmDelete -> {
mediaBottomSheetState = MediaBottomSheetState.MediaDeleteConfirmationState(
eventId = event.eventId,
mediaInfo = event.data.mediaInfo,
thumbnailSource = event.data.thumbnailSource ?: event.data.mediaSource,
)
}
MediaViewerEvents.CloseBottomSheet -> {
MediaViewerEvent.CloseBottomSheet -> {
mediaBottomSheetState = MediaBottomSheetState.Hidden
}
is MediaViewerEvents.OnNavigateTo -> {
is MediaViewerEvent.OnNavigateTo -> {
currentIndex.intValue = event.index
}
is MediaViewerEvents.LoadMore -> coroutineScope.launch {
is MediaViewerEvent.LoadMore -> coroutineScope.launch {
dataSource.loadMore(event.direction)
}
}

View file

@ -26,7 +26,7 @@ data class MediaViewerState(
val snackbarMessage: SnackbarMessage?,
val canShowInfo: Boolean,
val mediaBottomSheetState: MediaBottomSheetState,
val eventSink: (MediaViewerEvents) -> Unit,
val eventSink: (MediaViewerEvent) -> Unit,
)
sealed interface MediaViewerPageData {

View file

@ -226,7 +226,7 @@ fun aMediaViewerState(
currentIndex: Int = 0,
canShowInfo: Boolean = true,
mediaBottomSheetState: MediaBottomSheetState = MediaBottomSheetState.Hidden,
eventSink: (MediaViewerEvents) -> Unit = {},
eventSink: (MediaViewerEvent) -> Unit = {},
) = MediaViewerState(
initiallySelectedEventId = EventId("\$a:b"),
listData = listData.toImmutableList(),

View file

@ -126,7 +126,7 @@ fun MediaViewerView(
}
LaunchedEffect(pagerState) {
snapshotFlow { pagerState.currentPage }.collect { page ->
state.eventSink(MediaViewerEvents.OnNavigateTo(page))
state.eventSink(MediaViewerEvent.OnNavigateTo(page))
}
}
HorizontalPager(
@ -145,7 +145,7 @@ fun MediaViewerView(
}
is MediaViewerPageData.Loading -> {
LaunchedEffect(dataForPage.timestamp) {
state.eventSink(MediaViewerEvents.LoadMore(dataForPage.direction))
state.eventSink(MediaViewerEvent.LoadMore(dataForPage.direction))
}
MediaViewerLoadingPage(
onDismiss = onBackClick,
@ -154,7 +154,7 @@ fun MediaViewerView(
is MediaViewerPageData.MediaViewerData -> {
var bottomPaddingInPixels by remember { mutableIntStateOf(defaultBottomPaddingInPixels) }
LaunchedEffect(Unit) {
state.eventSink(MediaViewerEvents.LoadMedia(dataForPage))
state.eventSink(MediaViewerEvent.LoadMedia(dataForPage))
}
Box(
modifier = Modifier.fillMaxSize()
@ -173,10 +173,10 @@ fun MediaViewerView(
textFileViewer = textFileViewer,
onDismiss = onBackClick,
onRetry = {
state.eventSink(MediaViewerEvents.LoadMedia(dataForPage))
state.eventSink(MediaViewerEvent.LoadMedia(dataForPage))
},
onDismissError = {
state.eventSink(MediaViewerEvents.ClearLoadingError(dataForPage))
state.eventSink(MediaViewerEvent.ClearLoadingError(dataForPage))
},
onShowOverlayChange = {
showOverlay = it
@ -215,7 +215,7 @@ fun MediaViewerView(
canShowInfo = state.canShowInfo,
onBackClick = onBackClick,
onInfoClick = {
state.eventSink(MediaViewerEvents.OpenInfo(currentData))
state.eventSink(MediaViewerEvent.OpenInfo(currentData))
},
eventSink = state.eventSink
)
@ -251,25 +251,25 @@ fun MediaViewerView(
MediaDetailsBottomSheet(
state = bottomSheetState,
onViewInTimeline = {
state.eventSink(MediaViewerEvents.ViewInTimeline(it))
state.eventSink(MediaViewerEvent.ViewInTimeline(it))
},
onShare = {
(currentData as? MediaViewerPageData.MediaViewerData)?.let {
state.eventSink(MediaViewerEvents.Share(currentData))
state.eventSink(MediaViewerEvent.Share(currentData))
}
},
onForward = {
state.eventSink(MediaViewerEvents.Forward(it))
state.eventSink(MediaViewerEvent.Forward(it))
},
onDownload = {
(currentData as? MediaViewerPageData.MediaViewerData)?.let {
state.eventSink(MediaViewerEvents.SaveOnDisk(currentData))
state.eventSink(MediaViewerEvent.SaveOnDisk(currentData))
}
},
onDelete = { eventId ->
(currentData as? MediaViewerPageData.MediaViewerData)?.let {
state.eventSink(
MediaViewerEvents.ConfirmDelete(
MediaViewerEvent.ConfirmDelete(
eventId,
currentData,
)
@ -277,7 +277,7 @@ fun MediaViewerView(
}
},
onDismiss = {
state.eventSink(MediaViewerEvents.CloseBottomSheet)
state.eventSink(MediaViewerEvent.CloseBottomSheet)
},
)
}
@ -285,10 +285,10 @@ fun MediaViewerView(
MediaDeleteConfirmationBottomSheet(
state = bottomSheetState,
onDelete = {
state.eventSink(MediaViewerEvents.Delete(it))
state.eventSink(MediaViewerEvent.Delete(it))
},
onDismiss = {
state.eventSink(MediaViewerEvents.CloseBottomSheet)
state.eventSink(MediaViewerEvent.CloseBottomSheet)
},
)
}
@ -458,7 +458,7 @@ private fun MediaViewerTopBar(
canShowInfo: Boolean,
onBackClick: () -> Unit,
onInfoClick: () -> Unit,
eventSink: (MediaViewerEvents) -> Unit,
eventSink: (MediaViewerEvent) -> Unit,
) {
val downloadedMedia by data.downloadedMedia
val actionsEnabled = downloadedMedia.isSuccess()
@ -500,7 +500,7 @@ private fun MediaViewerTopBar(
IconButton(
enabled = actionsEnabled,
onClick = {
eventSink(MediaViewerEvents.OpenWith(data))
eventSink(MediaViewerEvent.OpenWith(data))
},
) {
when (mimeType) {