From 97ae775df58de642a5f0d27d4db4b984f7c7edfa Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 21 Apr 2026 16:14:07 +0200 Subject: [PATCH] MediaViewer: add Share action as a main action. --- .../mediaviewer/impl/viewer/MediaViewerView.kt | 13 +++++++++++++ .../mediaviewer/impl/viewer/MediaViewerViewTest.kt | 12 ++++++++++++ 2 files changed, 25 insertions(+) diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerView.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerView.kt index aa1d95f6e5..b2a7f3fdff 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerView.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerView.kt @@ -214,6 +214,9 @@ fun MediaViewerView( data = currentData, canShowInfo = state.canShowInfo, onBackClick = onBackClick, + onShareClick = { + state.eventSink(MediaViewerEvent.Share(currentData)) + }, onInfoClick = { state.eventSink(MediaViewerEvent.OpenInfo(currentData)) }, @@ -457,6 +460,7 @@ private fun MediaViewerTopBar( data: MediaViewerPageData.MediaViewerData, canShowInfo: Boolean, onBackClick: () -> Unit, + onShareClick: () -> Unit, onInfoClick: () -> Unit, eventSink: (MediaViewerEvent) -> Unit, ) { @@ -514,6 +518,15 @@ private fun MediaViewerTopBar( ) } } + IconButton( + onClick = onShareClick, + enabled = actionsEnabled, + ) { + Icon( + imageVector = CompoundIcons.ShareAndroid(), + contentDescription = stringResource(id = CommonStrings.action_share), + ) + } if (canShowInfo) { IconButton( onClick = onInfoClick, diff --git a/libraries/mediaviewer/impl/src/test/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerViewTest.kt b/libraries/mediaviewer/impl/src/test/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerViewTest.kt index d735497ece..34c67683cd 100644 --- a/libraries/mediaviewer/impl/src/test/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerViewTest.kt +++ b/libraries/mediaviewer/impl/src/test/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerViewTest.kt @@ -86,6 +86,18 @@ class MediaViewerViewTest { ) } + @Test + fun `clicking on top action share emits expected Event`() { + val data = aMediaViewerPageData( + downloadedMedia = AsyncData.Success(aLocalMedia(uri = mockMediaUrl)), + ) + testMenuAction( + data, + CommonStrings.action_share, + MediaViewerEvent.Share(data), + ) + } + private fun testMenuAction( data: MediaViewerPageData.MediaViewerData, contentDescriptionRes: Int,