Revert "feat(player): enhance video aspect ratio handling and resize mode logic"

This reverts commit b7186be4
This commit is contained in:
2026-05-27 18:40:44 +02:00
parent dedd4f1da5
commit 8064367e7a

View File

@@ -12,6 +12,7 @@ import androidx.compose.animation.slideOutHorizontally
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
@@ -23,7 +24,6 @@ import androidx.compose.material.icons.outlined.VolumeUp
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
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.getValue import androidx.compose.runtime.getValue
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
@@ -39,8 +39,6 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.viewinterop.AndroidView import androidx.compose.ui.viewinterop.AndroidView
import androidx.lifecycle.Lifecycle import androidx.lifecycle.Lifecycle
import androidx.lifecycle.compose.LifecycleEventEffect import androidx.lifecycle.compose.LifecycleEventEffect
import androidx.media3.common.Player
import androidx.media3.common.VideoSize
import androidx.media3.common.util.UnstableApi import androidx.media3.common.util.UnstableApi
import androidx.media3.ui.AspectRatioFrameLayout import androidx.media3.ui.AspectRatioFrameLayout
import androidx.media3.ui.PlayerView import androidx.media3.ui.PlayerView
@@ -63,7 +61,6 @@ import kotlin.math.abs
import kotlin.math.roundToInt import kotlin.math.roundToInt
private const val CONTROLS_VISIBLE_SUBTITLE_BOTTOM_PADDING_FRACTION = 0.32f private const val CONTROLS_VISIBLE_SUBTITLE_BOTTOM_PADDING_FRACTION = 0.32f
private const val WIDE_VIDEO_ASPECT_RATIO = 16f / 9f
/** Small negative band below zero that represents adaptive/auto brightness mode. */ /** Small negative band below zero that represents adaptive/auto brightness mode. */
private const val AUTO_BRIGHTNESS_SENTINEL = -0.1f private const val AUTO_BRIGHTNESS_SENTINEL = -0.1f
@@ -85,25 +82,12 @@ fun PlayerScreen(
var showQueuePanel by remember { mutableStateOf(false) } var showQueuePanel by remember { mutableStateOf(false) }
var horizontalSeekFeedback by remember { mutableStateOf<Long?>(null) } var horizontalSeekFeedback by remember { mutableStateOf<Long?>(null) }
var horizontalSeekPreviewPositionMs by remember { mutableStateOf<Long?>(null) } var horizontalSeekPreviewPositionMs by remember { mutableStateOf<Long?>(null) }
var videoAspectRatio by remember { mutableStateOf(calculateVideoAspectRatio(viewModel.player.videoSize)) }
val overlayController = rememberPersistentOverlayController() val overlayController = rememberPersistentOverlayController()
LifecycleEventEffect(Lifecycle.Event.ON_STOP) { LifecycleEventEffect(Lifecycle.Event.ON_STOP) {
viewModel.pausePlayback() viewModel.pausePlayback()
} }
DisposableEffect(viewModel.player) {
val listener = object : Player.Listener {
override fun onVideoSizeChanged(videoSize: VideoSize) {
videoAspectRatio = calculateVideoAspectRatio(videoSize)
}
}
viewModel.player.addListener(listener)
onDispose {
viewModel.player.removeListener(listener)
}
}
LaunchedEffect(uiState.isPlaying) { LaunchedEffect(uiState.isPlaying) {
if (uiState.isPlaying) { if (uiState.isPlaying) {
showQueuePanel = false showQueuePanel = false
@@ -111,7 +95,6 @@ fun PlayerScreen(
} }
val playerControlsVisible = controlsVisible || uiState.isEnded || uiState.error != null val playerControlsVisible = controlsVisible || uiState.isEnded || uiState.error != null
val playerResizeMode = playerResizeMode(videoAspectRatio)
val subtitleBottomPaddingFraction = val subtitleBottomPaddingFraction =
if (playerControlsVisible) { if (playerControlsVisible) {
CONTROLS_VISIBLE_SUBTITLE_BOTTOM_PADDING_FRACTION CONTROLS_VISIBLE_SUBTITLE_BOTTOM_PADDING_FRACTION
@@ -128,18 +111,18 @@ fun PlayerScreen(
factory = { ctx -> factory = { ctx ->
PlayerView(ctx).apply { PlayerView(ctx).apply {
useController = false useController = false
resizeMode = playerResizeMode resizeMode = AspectRatioFrameLayout.RESIZE_MODE_FIT
player = viewModel.player player = viewModel.player
subtitleView?.setBottomPaddingFraction(subtitleBottomPaddingFraction) subtitleView?.setBottomPaddingFraction(subtitleBottomPaddingFraction)
} }
}, },
update = { update = {
it.player = viewModel.player it.player = viewModel.player
it.resizeMode = playerResizeMode
it.subtitleView?.setBottomPaddingFraction(subtitleBottomPaddingFraction) it.subtitleView?.setBottomPaddingFraction(subtitleBottomPaddingFraction)
}, },
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxHeight()
.align(Alignment.Center)
) )
PlayerGesturesLayer( PlayerGesturesLayer(
@@ -313,21 +296,6 @@ fun PlayerScreen(
} }
} }
@OptIn(UnstableApi::class)
private fun playerResizeMode(videoAspectRatio: Float): Int =
if (videoAspectRatio >= WIDE_VIDEO_ASPECT_RATIO) {
AspectRatioFrameLayout.RESIZE_MODE_ZOOM
} else {
AspectRatioFrameLayout.RESIZE_MODE_FIT
}
private fun calculateVideoAspectRatio(videoSize: VideoSize): Float {
if (videoSize.width <= 0 || videoSize.height <= 0) {
return 0f
}
return videoSize.width * videoSize.pixelWidthHeightRatio / videoSize.height
}
@Composable @Composable
private fun HiddenSeekTimeline( private fun HiddenSeekTimeline(
positionMs: Long, positionMs: Long,