If not displayed, make sure to pause the audio / video
This commit is contained in:
parent
3e9528fa93
commit
b02c12d92a
4 changed files with 25 additions and 0 deletions
|
|
@ -27,6 +27,7 @@ fun LocalMediaView(
|
||||||
bottomPaddingInPixels: Int,
|
bottomPaddingInPixels: Int,
|
||||||
onClick: () -> Unit,
|
onClick: () -> Unit,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
|
isDisplayed: Boolean = true,
|
||||||
localMediaViewState: LocalMediaViewState = rememberLocalMediaViewState(),
|
localMediaViewState: LocalMediaViewState = rememberLocalMediaViewState(),
|
||||||
mediaInfo: MediaInfo? = localMedia?.info,
|
mediaInfo: MediaInfo? = localMedia?.info,
|
||||||
) {
|
) {
|
||||||
|
|
@ -39,6 +40,7 @@ fun LocalMediaView(
|
||||||
onClick = onClick,
|
onClick = onClick,
|
||||||
)
|
)
|
||||||
mimeType.isMimeTypeVideo() -> MediaVideoView(
|
mimeType.isMimeTypeVideo() -> MediaVideoView(
|
||||||
|
isDisplayed = isDisplayed,
|
||||||
localMediaViewState = localMediaViewState,
|
localMediaViewState = localMediaViewState,
|
||||||
bottomPaddingInPixels = bottomPaddingInPixels,
|
bottomPaddingInPixels = bottomPaddingInPixels,
|
||||||
localMedia = localMedia,
|
localMedia = localMedia,
|
||||||
|
|
@ -51,6 +53,7 @@ fun LocalMediaView(
|
||||||
onClick = onClick,
|
onClick = onClick,
|
||||||
)
|
)
|
||||||
mimeType.isMimeTypeAudio() -> MediaAudioView(
|
mimeType.isMimeTypeAudio() -> MediaAudioView(
|
||||||
|
isDisplayed = isDisplayed,
|
||||||
localMediaViewState = localMediaViewState,
|
localMediaViewState = localMediaViewState,
|
||||||
bottomPaddingInPixels = bottomPaddingInPixels,
|
bottomPaddingInPixels = bottomPaddingInPixels,
|
||||||
localMedia = localMedia,
|
localMedia = localMedia,
|
||||||
|
|
|
||||||
|
|
@ -83,9 +83,11 @@ fun MediaAudioView(
|
||||||
localMedia: LocalMedia?,
|
localMedia: LocalMedia?,
|
||||||
info: MediaInfo?,
|
info: MediaInfo?,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
|
isDisplayed: Boolean = true,
|
||||||
) {
|
) {
|
||||||
val exoPlayer = rememberExoPlayer()
|
val exoPlayer = rememberExoPlayer()
|
||||||
ExoPlayerMediaAudioView(
|
ExoPlayerMediaAudioView(
|
||||||
|
isDisplayed = isDisplayed,
|
||||||
localMediaViewState = localMediaViewState,
|
localMediaViewState = localMediaViewState,
|
||||||
bottomPaddingInPixels = bottomPaddingInPixels,
|
bottomPaddingInPixels = bottomPaddingInPixels,
|
||||||
exoPlayer = exoPlayer,
|
exoPlayer = exoPlayer,
|
||||||
|
|
@ -98,6 +100,7 @@ fun MediaAudioView(
|
||||||
@SuppressLint("UnsafeOptInUsageError")
|
@SuppressLint("UnsafeOptInUsageError")
|
||||||
@Composable
|
@Composable
|
||||||
private fun ExoPlayerMediaAudioView(
|
private fun ExoPlayerMediaAudioView(
|
||||||
|
isDisplayed: Boolean,
|
||||||
localMediaViewState: LocalMediaViewState,
|
localMediaViewState: LocalMediaViewState,
|
||||||
bottomPaddingInPixels: Int,
|
bottomPaddingInPixels: Int,
|
||||||
exoPlayer: ExoPlayer,
|
exoPlayer: ExoPlayer,
|
||||||
|
|
@ -176,6 +179,12 @@ private fun ExoPlayerMediaAudioView(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
LaunchedEffect(isDisplayed) {
|
||||||
|
// If not displayed, make sure to pause the audio
|
||||||
|
if (!isDisplayed) {
|
||||||
|
exoPlayer.pause()
|
||||||
|
}
|
||||||
|
}
|
||||||
if (localMedia?.uri != null) {
|
if (localMedia?.uri != null) {
|
||||||
LaunchedEffect(localMedia.uri) {
|
LaunchedEffect(localMedia.uri) {
|
||||||
val mediaItem = MediaItem.fromUri(localMedia.uri)
|
val mediaItem = MediaItem.fromUri(localMedia.uri)
|
||||||
|
|
|
||||||
|
|
@ -57,6 +57,7 @@ import kotlin.time.Duration.Companion.seconds
|
||||||
@SuppressLint("UnsafeOptInUsageError")
|
@SuppressLint("UnsafeOptInUsageError")
|
||||||
@Composable
|
@Composable
|
||||||
fun MediaVideoView(
|
fun MediaVideoView(
|
||||||
|
isDisplayed: Boolean,
|
||||||
localMediaViewState: LocalMediaViewState,
|
localMediaViewState: LocalMediaViewState,
|
||||||
bottomPaddingInPixels: Int,
|
bottomPaddingInPixels: Int,
|
||||||
localMedia: LocalMedia?,
|
localMedia: LocalMedia?,
|
||||||
|
|
@ -64,6 +65,7 @@ fun MediaVideoView(
|
||||||
) {
|
) {
|
||||||
val exoPlayer = rememberExoPlayer()
|
val exoPlayer = rememberExoPlayer()
|
||||||
ExoPlayerMediaVideoView(
|
ExoPlayerMediaVideoView(
|
||||||
|
isDisplayed = isDisplayed,
|
||||||
localMediaViewState = localMediaViewState,
|
localMediaViewState = localMediaViewState,
|
||||||
bottomPaddingInPixels = bottomPaddingInPixels,
|
bottomPaddingInPixels = bottomPaddingInPixels,
|
||||||
exoPlayer = exoPlayer,
|
exoPlayer = exoPlayer,
|
||||||
|
|
@ -75,6 +77,7 @@ fun MediaVideoView(
|
||||||
@SuppressLint("UnsafeOptInUsageError")
|
@SuppressLint("UnsafeOptInUsageError")
|
||||||
@Composable
|
@Composable
|
||||||
private fun ExoPlayerMediaVideoView(
|
private fun ExoPlayerMediaVideoView(
|
||||||
|
isDisplayed: Boolean,
|
||||||
localMediaViewState: LocalMediaViewState,
|
localMediaViewState: LocalMediaViewState,
|
||||||
bottomPaddingInPixels: Int,
|
bottomPaddingInPixels: Int,
|
||||||
exoPlayer: ExoPlayer,
|
exoPlayer: ExoPlayer,
|
||||||
|
|
@ -161,6 +164,12 @@ private fun ExoPlayerMediaVideoView(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
LaunchedEffect(isDisplayed) {
|
||||||
|
// If not displayed, make sure to pause the video
|
||||||
|
if (!isDisplayed) {
|
||||||
|
exoPlayer.pause()
|
||||||
|
}
|
||||||
|
}
|
||||||
if (localMedia?.uri != null) {
|
if (localMedia?.uri != null) {
|
||||||
LaunchedEffect(localMedia.uri) {
|
LaunchedEffect(localMedia.uri) {
|
||||||
val mediaItem = MediaItem.fromUri(localMedia.uri)
|
val mediaItem = MediaItem.fromUri(localMedia.uri)
|
||||||
|
|
@ -245,6 +254,7 @@ private fun ExoPlayerMediaVideoView(
|
||||||
@Composable
|
@Composable
|
||||||
internal fun MediaVideoViewPreview() = ElementPreview {
|
internal fun MediaVideoViewPreview() = ElementPreview {
|
||||||
MediaVideoView(
|
MediaVideoView(
|
||||||
|
isDisplayed = true,
|
||||||
modifier = Modifier.fillMaxSize(),
|
modifier = Modifier.fillMaxSize(),
|
||||||
bottomPaddingInPixels = 0,
|
bottomPaddingInPixels = 0,
|
||||||
localMediaViewState = rememberLocalMediaViewState(),
|
localMediaViewState = rememberLocalMediaViewState(),
|
||||||
|
|
|
||||||
|
|
@ -135,6 +135,7 @@ fun MediaViewerView(
|
||||||
state.eventSink(MediaViewerEvents.LoadMedia(dataForPage))
|
state.eventSink(MediaViewerEvents.LoadMedia(dataForPage))
|
||||||
}
|
}
|
||||||
MediaViewerPage(
|
MediaViewerPage(
|
||||||
|
isDisplayed = page == pagerState.settledPage,
|
||||||
showOverlay = showOverlay,
|
showOverlay = showOverlay,
|
||||||
bottomPaddingInPixels = bottomPaddingInPixels,
|
bottomPaddingInPixels = bottomPaddingInPixels,
|
||||||
data = dataForPage,
|
data = dataForPage,
|
||||||
|
|
@ -246,6 +247,7 @@ fun MediaViewerView(
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun MediaViewerPage(
|
private fun MediaViewerPage(
|
||||||
|
isDisplayed: Boolean,
|
||||||
showOverlay: Boolean,
|
showOverlay: Boolean,
|
||||||
bottomPaddingInPixels: Int,
|
bottomPaddingInPixels: Int,
|
||||||
state: MediaViewerState,
|
state: MediaViewerState,
|
||||||
|
|
@ -307,6 +309,7 @@ private fun MediaViewerPage(
|
||||||
|
|
||||||
LocalMediaView(
|
LocalMediaView(
|
||||||
modifier = Modifier.fillMaxSize(),
|
modifier = Modifier.fillMaxSize(),
|
||||||
|
isDisplayed = isDisplayed,
|
||||||
bottomPaddingInPixels = bottomPaddingInPixels,
|
bottomPaddingInPixels = bottomPaddingInPixels,
|
||||||
localMediaViewState = localMediaViewState,
|
localMediaViewState = localMediaViewState,
|
||||||
localMedia = data.downloadedMedia.dataOrNull(),
|
localMedia = data.downloadedMedia.dataOrNull(),
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue