Files
forkmessager/client-mobile/core/presentation/components/AppVideoPlayer.kt
Халимов Рустам 1fb1be47dd Приложение
2026-04-14 01:15:54 +03:00

62 lines
1.8 KiB
Kotlin

package core.presentation.components
import androidx.annotation.OptIn
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.viewinterop.AndroidView
import androidx.media3.common.MediaItem
import androidx.media3.common.Player
import androidx.media3.common.util.UnstableApi
import androidx.media3.exoplayer.ExoPlayer
import androidx.media3.ui.PlayerView
import androidx.media3.ui.AspectRatioFrameLayout
@OptIn(UnstableApi::class)
@Composable
fun AppVideoPlayer(
url: String,
modifier: Modifier = Modifier,
useController: Boolean = true,
autoPlay: Boolean = true,
onVideoFinished: () -> Unit = {}
) {
val context = LocalContext.current
val exoPlayer = remember {
ExoPlayer.Builder(context).build().apply {
val mediaItem = MediaItem.fromUri(url)
setMediaItem(mediaItem)
prepare()
playWhenReady = autoPlay
addListener(object : Player.Listener {
override fun onPlaybackStateChanged(state: Int) {
if (state == Player.STATE_ENDED) {
onVideoFinished()
}
}
})
}
}
// Очистка ресурсов при выходе
DisposableEffect(Unit) {
onDispose {
exoPlayer.release()
}
}
AndroidView(
factory = {
PlayerView(it).apply {
player = exoPlayer
this.useController = useController
// Для сторис используем заполнение экрана
resizeMode = AspectRatioFrameLayout.RESIZE_MODE_ZOOM
}
},
modifier = modifier
)
}