From ba1f2dc17d2d9f2065d6d84d57861631956b67a4 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Mon, 30 Oct 2023 14:05:36 -0400 Subject: [PATCH] Minimizes Jittering when loading videos. --- .../amethyst/ui/components/VideoView.kt | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) 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 21e90066b0..39ee695085 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 @@ -209,7 +209,7 @@ fun VideoViewInner( if (!automaticallyStartPlayback.value) { ImageUrlWithDownloadButton(url = videoUri, showImage = automaticallyStartPlayback) } else { - VideoPlayerActiveMutex(videoUri) { activeOnScreen -> + VideoPlayerActiveMutex(videoUri) { modifier, activeOnScreen -> val mediaItem = remember(videoUri) { mutableStateOf( MediaItem.Builder() @@ -251,6 +251,7 @@ fun VideoViewInner( keepPlaying = keepPlaying, automaticallyStartPlayback = automaticallyStartPlayback, activeOnScreen = activeOnScreen, + modifier = modifier, onControllerVisibilityChanged = onControllerVisibilityChanged, onDialog = onDialog ) @@ -450,7 +451,7 @@ class VisibilityData() { * the screen wins the mutex. */ @Composable -fun VideoPlayerActiveMutex(videoUri: String, inner: @Composable (MutableState) -> Unit) { +fun VideoPlayerActiveMutex(videoUri: String, inner: @Composable (Modifier, MutableState) -> Unit) { val myCache = remember(videoUri) { VisibilityData() } @@ -499,9 +500,7 @@ fun VideoPlayerActiveMutex(videoUri: String, inner: @Composable (MutableState, automaticallyStartPlayback: State, activeOnScreen: MutableState, + modifier: Modifier, onControllerVisibilityChanged: ((Boolean) -> Unit)? = null, onDialog: ((Boolean) -> Unit)? ) { @@ -552,11 +552,13 @@ private fun RenderVideoPlayer( val myModifier = remember { if (roundedCorner) { - borders - .defaultMinSize(minHeight = 100.dp) - .align(Alignment.Center) + modifier.then( + borders + .defaultMinSize(minHeight = 100.dp) + .align(Alignment.Center) + ) } else { - Modifier + modifier .fillMaxWidth() .defaultMinSize(minHeight = 100.dp) .align(Alignment.Center) @@ -607,7 +609,7 @@ private fun RenderVideoPlayer( controller.volume < 0.001 } - val spaceModifier = + val spaceModifier = remember { if (topPaddingForControllers.isSpecified && videoPlaybackSize.value.height > 0) { val space = (abs(parentVideoPlaybackSize.value.height - videoPlaybackSize.value.height) / 2).dp if (space > topPaddingForControllers) { @@ -618,6 +620,7 @@ private fun RenderVideoPlayer( } else { Modifier } + } MuteButton( controllerVisible,