mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-02 21:32:34 +00:00
Fix media cover placeholder floating (#6484)
This commit is contained in:
+25
-10
@@ -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()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user