Making sure video does not restart when pressing the mute button

This commit is contained in:
Vitor Pamplona
2023-06-03 16:01:20 -04:00
parent 00e7add001
commit 2e5e546e7d
@@ -27,7 +27,6 @@ import androidx.compose.material.icons.filled.VolumeUp
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
@@ -120,9 +119,8 @@ fun VideoView(videoUri: Uri, description: String? = null, thumb: Drawable? = nul
val context = LocalContext.current val context = LocalContext.current
val lifecycleOwner = rememberUpdatedState(LocalLifecycleOwner.current) val lifecycleOwner = rememberUpdatedState(LocalLifecycleOwner.current)
val mutedInstance = remember { mutableStateOf(DefaultMutedSetting.value) }
var exoPlayer by remember { mutableStateOf<ExoPlayer?>(null) } var exoPlayer by remember { mutableStateOf<ExoPlayer?>(null) }
val defaultVolume = remember { if (DefaultMutedSetting.value) 0f else 1f }
LaunchedEffect(key1 = videoUri) { LaunchedEffect(key1 = videoUri) {
if (exoPlayer == null) { if (exoPlayer == null) {
@@ -138,7 +136,7 @@ fun VideoView(videoUri: Uri, description: String? = null, thumb: Drawable? = nul
it.apply { it.apply {
repeatMode = Player.REPEAT_MODE_ALL repeatMode = Player.REPEAT_MODE_ALL
videoScalingMode = C.VIDEO_SCALING_MODE_SCALE_TO_FIT videoScalingMode = C.VIDEO_SCALING_MODE_SCALE_TO_FIT
volume = if (mutedInstance.value) 0f else 1f volume = defaultVolume
if (videoUri.scheme?.startsWith("file") == true) { if (videoUri.scheme?.startsWith("file") == true) {
setMediaItem(media) setMediaItem(media)
} else { } else {
@@ -151,7 +149,7 @@ fun VideoView(videoUri: Uri, description: String? = null, thumb: Drawable? = nul
prepare() prepare()
} }
RenderVideoPlayer(it, context, thumb, onDialog, mutedInstance) RenderVideoPlayer(it, context, thumb, onDialog)
} }
DisposableEffect(Unit) { DisposableEffect(Unit) {
@@ -178,8 +176,7 @@ private fun RenderVideoPlayer(
exoPlayer: ExoPlayer, exoPlayer: ExoPlayer,
context: Context, context: Context,
thumb: Drawable?, thumb: Drawable?,
onDialog: ((Boolean) -> Unit)?, onDialog: ((Boolean) -> Unit)?
mutedInstance: MutableState<Boolean>
) { ) {
BoxWithConstraints() { BoxWithConstraints() {
AndroidView( AndroidView(
@@ -216,11 +213,10 @@ private fun RenderVideoPlayer(
} }
) )
MuteButton(mutedInstance) { MuteButton() { mute: Boolean ->
mutedInstance.value = !mutedInstance.value DefaultMutedSetting.value = mute
DefaultMutedSetting.value = mutedInstance.value
exoPlayer.volume = if (mutedInstance.value) 0f else 1f exoPlayer.volume = if (mute) 0f else 1f
} }
} }
} }
@@ -255,7 +251,7 @@ fun LayoutCoordinates.isCompletelyVisible(view: View): Boolean {
} }
@Composable @Composable
private fun MuteButton(muted: MutableState<Boolean>, toggle: () -> Unit) { private fun MuteButton(toggle: (Boolean) -> Unit) {
Box( Box(
remember { remember {
Modifier Modifier
@@ -272,11 +268,16 @@ private fun MuteButton(muted: MutableState<Boolean>, toggle: () -> Unit) {
.background(MaterialTheme.colors.background) .background(MaterialTheme.colors.background)
) )
val mutedInstance = remember { mutableStateOf(DefaultMutedSetting.value) }
IconButton( IconButton(
onClick = toggle, onClick = {
mutedInstance.value = !mutedInstance.value
toggle(mutedInstance.value)
},
modifier = Modifier.size(50.dp) modifier = Modifier.size(50.dp)
) { ) {
if (muted.value) { if (mutedInstance.value) {
Icon( Icon(
imageVector = Icons.Default.VolumeOff, imageVector = Icons.Default.VolumeOff,
"Hash Verified", "Hash Verified",