Fix media cover placeholder floating (#6484)
This commit is contained in:
parent
43e0d2d1ce
commit
69aeee67a5
1 changed files with 25 additions and 10 deletions
|
|
@ -25,6 +25,7 @@ import androidx.compose.foundation.layout.width
|
||||||
import androidx.compose.foundation.shape.CircleShape
|
import androidx.compose.foundation.shape.CircleShape
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.DisposableEffect
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
import androidx.compose.runtime.derivedStateOf
|
import androidx.compose.runtime.derivedStateOf
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
|
|
@ -51,6 +52,7 @@ import androidx.media3.common.Timeline
|
||||||
import androidx.media3.exoplayer.ExoPlayer
|
import androidx.media3.exoplayer.ExoPlayer
|
||||||
import androidx.media3.ui.AspectRatioFrameLayout
|
import androidx.media3.ui.AspectRatioFrameLayout
|
||||||
import androidx.media3.ui.PlayerView
|
import androidx.media3.ui.PlayerView
|
||||||
|
import com.bumble.appyx.core.node.LocalNodeTargetVisibility
|
||||||
import io.element.android.compound.theme.ElementTheme
|
import io.element.android.compound.theme.ElementTheme
|
||||||
import io.element.android.compound.tokens.generated.CompoundIcons
|
import io.element.android.compound.tokens.generated.CompoundIcons
|
||||||
import io.element.android.libraries.audio.api.AudioFocus
|
import io.element.android.libraries.audio.api.AudioFocus
|
||||||
|
|
@ -130,6 +132,8 @@ private fun ExoPlayerMediaAudioView(
|
||||||
mutableStateOf(null)
|
mutableStateOf(null)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val isTargetVisible = LocalNodeTargetVisibility.current
|
||||||
|
|
||||||
val playableState: PlayableState.Playable by remember {
|
val playableState: PlayableState.Playable by remember {
|
||||||
derivedStateOf {
|
derivedStateOf {
|
||||||
PlayableState.Playable(
|
PlayableState.Playable(
|
||||||
|
|
@ -196,13 +200,21 @@ private fun ExoPlayerMediaAudioView(
|
||||||
exoPlayer.pause()
|
exoPlayer.pause()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
LaunchedEffect(isTargetVisible) {
|
||||||
|
if (!isTargetVisible) {
|
||||||
|
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)
|
||||||
exoPlayer.setMediaItem(mediaItem)
|
exoPlayer.setMediaItem(mediaItem)
|
||||||
|
exoPlayer.prepare()
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
exoPlayer.setMediaItems(emptyList())
|
LaunchedEffect(Unit) {
|
||||||
|
exoPlayer.setMediaItems(emptyList())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
val waveform = info?.waveform
|
val waveform = info?.waveform
|
||||||
|
|
@ -247,7 +259,7 @@ private fun ExoPlayerMediaAudioView(
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
update = { playerView ->
|
update = { playerView ->
|
||||||
playerView.isVisible = metadata.hasArtwork()
|
playerView.isVisible = metadata.hasArtwork() && isTargetVisible
|
||||||
},
|
},
|
||||||
onRelease = { playerView ->
|
onRelease = { playerView ->
|
||||||
playerView.player = null
|
playerView.player = null
|
||||||
|
|
@ -317,16 +329,19 @@ private fun ExoPlayerMediaAudioView(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
OnLifecycleEvent { _, event ->
|
DisposableEffect(exoPlayer) {
|
||||||
when (event) {
|
exoPlayer.addListener(playerListener)
|
||||||
Lifecycle.Event.ON_CREATE -> exoPlayer.addListener(playerListener)
|
onDispose {
|
||||||
Lifecycle.Event.ON_RESUME -> exoPlayer.prepare()
|
if (!exoPlayer.isReleased) {
|
||||||
Lifecycle.Event.ON_PAUSE -> exoPlayer.pause()
|
|
||||||
Lifecycle.Event.ON_DESTROY -> {
|
|
||||||
exoPlayer.release()
|
|
||||||
exoPlayer.removeListener(playerListener)
|
exoPlayer.removeListener(playerListener)
|
||||||
|
exoPlayer.release()
|
||||||
}
|
}
|
||||||
else -> Unit
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
OnLifecycleEvent { _, event ->
|
||||||
|
if (event == Lifecycle.Event.ON_PAUSE) {
|
||||||
|
exoPlayer.pause()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue