From d334c04c47cbb71dc25d3a9707c22e8fc94f42bf Mon Sep 17 00:00:00 2001 From: greenart7c3 <115044884+greenart7c3@users.noreply.github.com> Date: Mon, 3 Jul 2023 10:32:08 -0300 Subject: [PATCH] do not autoplay videos when on mobile data --- .../amethyst/ui/actions/NewMediaView.kt | 5 ++- .../amethyst/ui/actions/NewPostView.kt | 4 +-- .../amethyst/ui/components/VideoView.kt | 36 +++++++++++++------ .../ui/components/ZoomableContentView.kt | 8 ++--- .../amethyst/ui/note/NoteCompose.kt | 9 +++-- 5 files changed, 41 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewMediaView.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewMediaView.kt index dd3750337..e0203b0d7 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewMediaView.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewMediaView.kt @@ -179,8 +179,11 @@ fun ImageVideoPost(postViewModel: NewMediaModel, acc: Account) { ) } } else { + val showVideo = remember { + mutableStateOf(true) + } postViewModel.galleryUri?.let { - VideoView(it.toString()) + VideoView(it.toString(), showVideo = showVideo) } } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostView.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostView.kt index 89bb3d5a5..34c096888 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostView.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostView.kt @@ -330,7 +330,7 @@ fun NewPostView(onClose: () -> Unit, baseReplyTo: Note? = null, quote: Note? = n ) ) } else if (videoExtensions.any { removedParamsFromUrl.endsWith(it) }) { - VideoView(myUrlPreview) + VideoView(myUrlPreview, showVideo = remember { mutableStateOf(true) }) } else { UrlPreview(myUrlPreview, myUrlPreview) } @@ -966,7 +966,7 @@ fun ImageVideoDescription( ) } } else { - VideoView(uri.toString()) + VideoView(uri.toString(), showVideo = remember { mutableStateOf(true) }) } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/VideoView.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/VideoView.kt index 8859a32b9..25f44f746 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/VideoView.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/VideoView.kt @@ -25,6 +25,7 @@ import androidx.compose.material.icons.filled.VolumeUp import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.MutableState import androidx.compose.runtime.Stable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -68,7 +69,13 @@ import kotlin.time.measureTimedValue public var DefaultMutedSetting = mutableStateOf(true) @Composable -fun LoadThumbAndThenVideoView(videoUri: String, description: String? = null, thumbUri: String, onDialog: ((Boolean) -> Unit)? = null) { +fun LoadThumbAndThenVideoView( + videoUri: String, + description: String? = null, + thumbUri: String, + showVideo: MutableState, + onDialog: ((Boolean) -> Unit)? = null +) { var loadingFinished by remember { mutableStateOf>(Pair(false, null)) } val context = LocalContext.current @@ -92,9 +99,9 @@ fun LoadThumbAndThenVideoView(videoUri: String, description: String? = null, thu if (loadingFinished.first) { if (loadingFinished.second != null) { - VideoView(videoUri, description, VideoThumb(loadingFinished.second), onDialog) + VideoView(videoUri, description, VideoThumb(loadingFinished.second), showVideo, onDialog) } else { - VideoView(videoUri, description, null, onDialog) + VideoView(videoUri, description, null, showVideo, onDialog) } } } @@ -105,10 +112,11 @@ fun VideoView( videoUri: String, description: String? = null, thumb: VideoThumb? = null, + showVideo: MutableState, onDialog: ((Boolean) -> Unit)? = null ) { val (value, elapsed) = measureTimedValue { - VideoView1(videoUri, description, thumb, onDialog) + VideoView1(videoUri, description, thumb, onDialog, showVideo) } Log.d("Rendering Metrics", "VideoView $elapsed $videoUri") } @@ -118,7 +126,8 @@ fun VideoView1( videoUri: String, description: String? = null, thumb: VideoThumb? = null, - onDialog: ((Boolean) -> Unit)? = null + onDialog: ((Boolean) -> Unit)? = null, + showVideo: MutableState ) { var exoPlayerData by remember { mutableStateOf(null) } val defaultToStart by remember { mutableStateOf(DefaultMutedSetting.value) } @@ -133,7 +142,7 @@ fun VideoView1( } exoPlayerData?.let { - VideoView(videoUri, description, it, defaultToStart, thumb, onDialog) + VideoView(videoUri, description, it, defaultToStart, thumb, onDialog, showVideo = showVideo) } DisposableEffect(Unit) { @@ -151,10 +160,11 @@ fun VideoView( exoPlayerData: VideoPlayer, defaultToStart: Boolean = false, thumb: VideoThumb? = null, - onDialog: ((Boolean) -> Unit)? = null + onDialog: ((Boolean) -> Unit)? = null, + showVideo: MutableState ) { val (value, elapsed) = measureTimedValue { - VideoView1(videoUri, description, exoPlayerData, defaultToStart, thumb, onDialog) + VideoView1(videoUri, description, exoPlayerData, defaultToStart, thumb, onDialog, showVideo) } Log.d("Rendering Metrics", "VideoView $elapsed $videoUri") } @@ -166,7 +176,8 @@ fun VideoView1( exoPlayerData: VideoPlayer, defaultToStart: Boolean = false, thumb: VideoThumb? = null, - onDialog: ((Boolean) -> Unit)? = null + onDialog: ((Boolean) -> Unit)? = null, + showVideo: MutableState ) { val lifecycleOwner = rememberUpdatedState(LocalLifecycleOwner.current) @@ -196,7 +207,7 @@ fun VideoView1( prepare() } - RenderVideoPlayer(exoPlayerData, thumb, onDialog) + RenderVideoPlayer(exoPlayerData, thumb, showVideo, onDialog) DisposableEffect(Unit) { val observer = LifecycleEventObserver { _, event -> @@ -230,6 +241,7 @@ data class VideoThumb( private fun RenderVideoPlayer( playerData: VideoPlayer, thumbData: VideoThumb?, + showVideo: MutableState, onDialog: ((Boolean) -> Unit)? ) { val context = LocalContext.current @@ -241,7 +253,9 @@ private fun RenderVideoPlayer( .defaultMinSize(minHeight = 70.dp) .align(Alignment.Center) .onVisibilityChanges { visible -> - if (visible && !playerData.exoPlayer.isPlaying) { + if (!showVideo.value && visible && !playerData.exoPlayer.isPlaying) { + playerData.exoPlayer.pause() + } else if (visible && !playerData.exoPlayer.isPlaying) { playerData.exoPlayer.play() } else if (!visible && playerData.exoPlayer.isPlaying) { playerData.exoPlayer.pause() diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ZoomableContentView.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ZoomableContentView.kt index 7a259c1be..c5a1d3087 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ZoomableContentView.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ZoomableContentView.kt @@ -204,11 +204,11 @@ fun ZoomableContentView(content: ZoomableContent, images: ImmutableList UrlImageView(content, mainImageModifier, showImage) - is ZoomableUrlVideo -> VideoView(content.url, content.description) { dialogOpen = true } + is ZoomableUrlVideo -> VideoView(content.url, content.description, showVideo = showImage) { dialogOpen = true } is ZoomableLocalImage -> LocalImageView(content, mainImageModifier) is ZoomableLocalVideo -> content.localFile?.let { - VideoView(it.toUri().toString(), content.description) { dialogOpen = true } + VideoView(it.toUri().toString(), content.description, showVideo = showImage) { dialogOpen = true } } } @@ -578,14 +578,14 @@ fun RenderImageOrVideo(content: ZoomableContent) { UrlImageView(content = content, mainImageModifier = mainModifier, showImage) } else if (content is ZoomableUrlVideo) { Row(verticalAlignment = Alignment.CenterVertically, modifier = Modifier.fillMaxSize(1f)) { - VideoView(content.url, content.description) + VideoView(content.url, content.description, showVideo = showImage) } } else if (content is ZoomableLocalImage) { LocalImageView(content = content, mainImageModifier = mainModifier) } else if (content is ZoomableLocalVideo) { Row(verticalAlignment = Alignment.CenterVertically, modifier = Modifier.fillMaxSize(1f)) { content.localFile?.let { - VideoView(it.toUri().toString(), content.description) + VideoView(it.toUri().toString(), content.description, showVideo = showImage) } } } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt index 5d1f51c25..a669c4b91 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt @@ -3043,12 +3043,14 @@ fun AudioTrackHeader(noteEvent: AudioTrackEvent, accountViewModel: AccountViewMo LoadThumbAndThenVideoView( videoUri = media, description = noteEvent.subject(), - thumbUri = cover + thumbUri = cover, + showVideo = remember { mutableStateOf(true) } ) } ?: VideoView( videoUri = media, - noteEvent.subject() + description = noteEvent.subject(), + showVideo = remember { mutableStateOf(true) } ) } } @@ -3172,7 +3174,8 @@ fun RenderLiveActivityEventInner(baseNote: Note, accountViewModel: AccountViewMo ) { VideoView( videoUri = media, - description = subject + description = subject, + showVideo = remember { mutableStateOf(true) } ) } } else {