mirror of
https://github.com/bbara04/Purefin.git
synced 2026-03-31 17:10:08 +02:00
Add toggle play state functionality to seek bar onEnter pressed in TvUI
This commit is contained in:
@@ -68,17 +68,17 @@ import androidx.compose.ui.draw.clip
|
|||||||
import androidx.compose.ui.focus.FocusRequester
|
import androidx.compose.ui.focus.FocusRequester
|
||||||
import androidx.compose.ui.focus.focusRequester
|
import androidx.compose.ui.focus.focusRequester
|
||||||
import androidx.compose.ui.focus.onFocusChanged
|
import androidx.compose.ui.focus.onFocusChanged
|
||||||
import androidx.compose.ui.input.key.Key
|
|
||||||
import androidx.compose.ui.input.key.KeyEventType
|
|
||||||
import androidx.compose.ui.input.key.key
|
|
||||||
import androidx.compose.ui.input.key.onPreviewKeyEvent
|
|
||||||
import androidx.compose.ui.input.key.type
|
|
||||||
import androidx.compose.ui.geometry.Offset
|
import androidx.compose.ui.geometry.Offset
|
||||||
import androidx.compose.ui.geometry.Size
|
import androidx.compose.ui.geometry.Size
|
||||||
import androidx.compose.ui.graphics.Brush
|
import androidx.compose.ui.graphics.Brush
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.graphics.graphicsLayer
|
import androidx.compose.ui.graphics.graphicsLayer
|
||||||
import androidx.compose.ui.graphics.vector.ImageVector
|
import androidx.compose.ui.graphics.vector.ImageVector
|
||||||
|
import androidx.compose.ui.input.key.Key
|
||||||
|
import androidx.compose.ui.input.key.KeyEventType
|
||||||
|
import androidx.compose.ui.input.key.key
|
||||||
|
import androidx.compose.ui.input.key.onPreviewKeyEvent
|
||||||
|
import androidx.compose.ui.input.key.type
|
||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
@@ -134,16 +134,14 @@ fun TvPlayerScreen(
|
|||||||
if (uiState.isPlaying) showQueuePanel = false
|
if (uiState.isPlaying) showQueuePanel = false
|
||||||
}
|
}
|
||||||
|
|
||||||
val focusRequester = remember { FocusRequester() }
|
val hiddenControlFocusRequester = remember { FocusRequester() }
|
||||||
val seekBarFocusRequester = remember { FocusRequester() }
|
val controlsFocusRequester = remember { FocusRequester() }
|
||||||
LaunchedEffect(Unit) {
|
|
||||||
focusRequester.requestFocus()
|
|
||||||
}
|
|
||||||
LaunchedEffect(controlsVisible) {
|
LaunchedEffect(controlsVisible) {
|
||||||
if (controlsVisible) {
|
if (controlsVisible) {
|
||||||
seekBarFocusRequester.requestFocus()
|
controlsFocusRequester.requestFocus()
|
||||||
} else {
|
} else {
|
||||||
focusRequester.requestFocus()
|
hiddenControlFocusRequester.requestFocus()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -151,7 +149,7 @@ fun TvPlayerScreen(
|
|||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxSize()
|
.fillMaxSize()
|
||||||
.background(Color.Black)
|
.background(Color.Black)
|
||||||
.focusRequester(focusRequester)
|
.focusRequester(hiddenControlFocusRequester)
|
||||||
.onPreviewKeyEvent { event ->
|
.onPreviewKeyEvent { event ->
|
||||||
if (!controlsVisible && event.type == KeyEventType.KeyDown) {
|
if (!controlsVisible && event.type == KeyEventType.KeyDown) {
|
||||||
when (event.key) {
|
when (event.key) {
|
||||||
@@ -200,7 +198,7 @@ fun TvPlayerScreen(
|
|||||||
TvPlayerControlsOverlay(
|
TvPlayerControlsOverlay(
|
||||||
modifier = Modifier.fillMaxSize(),
|
modifier = Modifier.fillMaxSize(),
|
||||||
uiState = uiState,
|
uiState = uiState,
|
||||||
seekBarFocusRequester = seekBarFocusRequester,
|
focusRequester = controlsFocusRequester,
|
||||||
onBack = onBack,
|
onBack = onBack,
|
||||||
onPlayPause = { viewModel.togglePlayPause() },
|
onPlayPause = { viewModel.togglePlayPause() },
|
||||||
onSeek = { viewModel.seekTo(it) },
|
onSeek = { viewModel.seekTo(it) },
|
||||||
@@ -266,7 +264,7 @@ private enum class TrackPanelType { AUDIO, SUBTITLES, QUALITY }
|
|||||||
@Composable
|
@Composable
|
||||||
private fun TvPlayerControlsOverlay(
|
private fun TvPlayerControlsOverlay(
|
||||||
uiState: PlayerUiState,
|
uiState: PlayerUiState,
|
||||||
seekBarFocusRequester: FocusRequester,
|
focusRequester: FocusRequester,
|
||||||
onBack: () -> Unit,
|
onBack: () -> Unit,
|
||||||
onPlayPause: () -> Unit,
|
onPlayPause: () -> Unit,
|
||||||
onSeek: (Long) -> Unit,
|
onSeek: (Long) -> Unit,
|
||||||
@@ -305,7 +303,7 @@ private fun TvPlayerControlsOverlay(
|
|||||||
)
|
)
|
||||||
TvPlayerBottomSection(
|
TvPlayerBottomSection(
|
||||||
uiState = uiState,
|
uiState = uiState,
|
||||||
seekBarFocusRequester = seekBarFocusRequester,
|
focusRequester = focusRequester,
|
||||||
onPlayPause = onPlayPause,
|
onPlayPause = onPlayPause,
|
||||||
onSeek = onSeek,
|
onSeek = onSeek,
|
||||||
onSeekRelative = onSeekRelative,
|
onSeekRelative = onSeekRelative,
|
||||||
@@ -373,7 +371,7 @@ private fun TvPlayerTopBar(
|
|||||||
@Composable
|
@Composable
|
||||||
private fun TvPlayerBottomSection(
|
private fun TvPlayerBottomSection(
|
||||||
uiState: PlayerUiState,
|
uiState: PlayerUiState,
|
||||||
seekBarFocusRequester: FocusRequester,
|
focusRequester: FocusRequester,
|
||||||
onPlayPause: () -> Unit,
|
onPlayPause: () -> Unit,
|
||||||
onSeek: (Long) -> Unit,
|
onSeek: (Long) -> Unit,
|
||||||
onSeekRelative: (Long) -> Unit,
|
onSeekRelative: (Long) -> Unit,
|
||||||
@@ -427,7 +425,8 @@ private fun TvPlayerBottomSection(
|
|||||||
adMarkers = uiState.ads,
|
adMarkers = uiState.ads,
|
||||||
onSeek = onSeek,
|
onSeek = onSeek,
|
||||||
onSeekRelative = onSeekRelative,
|
onSeekRelative = onSeekRelative,
|
||||||
focusRequester = seekBarFocusRequester
|
togglePlayState = onPlayPause,
|
||||||
|
focusRequester = focusRequester
|
||||||
)
|
)
|
||||||
Spacer(modifier = Modifier.height(8.dp))
|
Spacer(modifier = Modifier.height(8.dp))
|
||||||
Box(
|
Box(
|
||||||
@@ -506,6 +505,7 @@ private fun TvPlayerSeekBar(
|
|||||||
adMarkers: List<TimedMarker>,
|
adMarkers: List<TimedMarker>,
|
||||||
onSeek: (Long) -> Unit,
|
onSeek: (Long) -> Unit,
|
||||||
onSeekRelative: (Long) -> Unit,
|
onSeekRelative: (Long) -> Unit,
|
||||||
|
togglePlayState: () -> Unit,
|
||||||
focusRequester: FocusRequester = remember { FocusRequester() },
|
focusRequester: FocusRequester = remember { FocusRequester() },
|
||||||
modifier: Modifier = Modifier
|
modifier: Modifier = Modifier
|
||||||
) {
|
) {
|
||||||
@@ -536,6 +536,10 @@ private fun TvPlayerSeekBar(
|
|||||||
onSeekRelative(10_000)
|
onSeekRelative(10_000)
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
Key.Enter -> {
|
||||||
|
togglePlayState()
|
||||||
|
true
|
||||||
|
}
|
||||||
else -> false
|
else -> false
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user