Minimizes Jittering when loading videos.

This commit is contained in:
Vitor Pamplona 2023-10-30 14:05:36 -04:00
parent 820def620c
commit ba1f2dc17d

View File

@ -209,7 +209,7 @@ fun VideoViewInner(
if (!automaticallyStartPlayback.value) { if (!automaticallyStartPlayback.value) {
ImageUrlWithDownloadButton(url = videoUri, showImage = automaticallyStartPlayback) ImageUrlWithDownloadButton(url = videoUri, showImage = automaticallyStartPlayback)
} else { } else {
VideoPlayerActiveMutex(videoUri) { activeOnScreen -> VideoPlayerActiveMutex(videoUri) { modifier, activeOnScreen ->
val mediaItem = remember(videoUri) { val mediaItem = remember(videoUri) {
mutableStateOf( mutableStateOf(
MediaItem.Builder() MediaItem.Builder()
@ -251,6 +251,7 @@ fun VideoViewInner(
keepPlaying = keepPlaying, keepPlaying = keepPlaying,
automaticallyStartPlayback = automaticallyStartPlayback, automaticallyStartPlayback = automaticallyStartPlayback,
activeOnScreen = activeOnScreen, activeOnScreen = activeOnScreen,
modifier = modifier,
onControllerVisibilityChanged = onControllerVisibilityChanged, onControllerVisibilityChanged = onControllerVisibilityChanged,
onDialog = onDialog onDialog = onDialog
) )
@ -450,7 +451,7 @@ class VisibilityData() {
* the screen wins the mutex. * the screen wins the mutex.
*/ */
@Composable @Composable
fun VideoPlayerActiveMutex(videoUri: String, inner: @Composable (MutableState<Boolean>) -> Unit) { fun VideoPlayerActiveMutex(videoUri: String, inner: @Composable (Modifier, MutableState<Boolean>) -> Unit) {
val myCache = remember(videoUri) { val myCache = remember(videoUri) {
VisibilityData() VisibilityData()
} }
@ -499,9 +500,7 @@ fun VideoPlayerActiveMutex(videoUri: String, inner: @Composable (MutableState<Bo
} }
} }
Box(modifier = myModifier) { inner(myModifier, active)
inner(active)
}
} }
@Stable @Stable
@ -520,6 +519,7 @@ private fun RenderVideoPlayer(
keepPlaying: MutableState<Boolean>, keepPlaying: MutableState<Boolean>,
automaticallyStartPlayback: State<Boolean>, automaticallyStartPlayback: State<Boolean>,
activeOnScreen: MutableState<Boolean>, activeOnScreen: MutableState<Boolean>,
modifier: Modifier,
onControllerVisibilityChanged: ((Boolean) -> Unit)? = null, onControllerVisibilityChanged: ((Boolean) -> Unit)? = null,
onDialog: ((Boolean) -> Unit)? onDialog: ((Boolean) -> Unit)?
) { ) {
@ -552,11 +552,13 @@ private fun RenderVideoPlayer(
val myModifier = remember { val myModifier = remember {
if (roundedCorner) { if (roundedCorner) {
borders modifier.then(
.defaultMinSize(minHeight = 100.dp) borders
.align(Alignment.Center) .defaultMinSize(minHeight = 100.dp)
.align(Alignment.Center)
)
} else { } else {
Modifier modifier
.fillMaxWidth() .fillMaxWidth()
.defaultMinSize(minHeight = 100.dp) .defaultMinSize(minHeight = 100.dp)
.align(Alignment.Center) .align(Alignment.Center)
@ -607,7 +609,7 @@ private fun RenderVideoPlayer(
controller.volume < 0.001 controller.volume < 0.001
} }
val spaceModifier = val spaceModifier = remember {
if (topPaddingForControllers.isSpecified && videoPlaybackSize.value.height > 0) { if (topPaddingForControllers.isSpecified && videoPlaybackSize.value.height > 0) {
val space = (abs(parentVideoPlaybackSize.value.height - videoPlaybackSize.value.height) / 2).dp val space = (abs(parentVideoPlaybackSize.value.height - videoPlaybackSize.value.height) / 2).dp
if (space > topPaddingForControllers) { if (space > topPaddingForControllers) {
@ -618,6 +620,7 @@ private fun RenderVideoPlayer(
} else { } else {
Modifier Modifier
} }
}
MuteButton( MuteButton(
controllerVisible, controllerVisible,