From f4effe7c1f3049ee4f948dcb7663074570d8285d Mon Sep 17 00:00:00 2001 From: Nikhil Parab Date: Sat, 1 Jun 2024 23:56:22 +0530 Subject: [PATCH 1/3] Fix #174: Selecting Seekbar to move video time freezes controls --- .../components/VideoPlayerIndicator.kt | 53 +++++++++---------- .../presentation/utils/ModifierUtils.kt | 3 +- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/JetStreamCompose/jetstream/src/main/java/com/google/jetstream/presentation/screens/videoPlayer/components/VideoPlayerIndicator.kt b/JetStreamCompose/jetstream/src/main/java/com/google/jetstream/presentation/screens/videoPlayer/components/VideoPlayerIndicator.kt index 8fc8393b..2ce2ed35 100644 --- a/JetStreamCompose/jetstream/src/main/java/com/google/jetstream/presentation/screens/videoPlayer/components/VideoPlayerIndicator.kt +++ b/JetStreamCompose/jetstream/src/main/java/com/google/jetstream/presentation/screens/videoPlayer/components/VideoPlayerIndicator.kt @@ -41,6 +41,7 @@ import androidx.compose.ui.unit.dp import androidx.tv.material3.ExperimentalTvMaterial3Api import androidx.tv.material3.MaterialTheme import com.google.jetstream.presentation.utils.handleDPadKeyEvents +import com.google.jetstream.presentation.utils.ifElse @OptIn(ExperimentalComposeUiApi::class, ExperimentalTvMaterial3Api::class) @Composable @@ -60,7 +61,6 @@ fun RowScope.VideoPlayerControllerIndicator( targetValue = 4.dp.times((if (isFocused) 2.5f else 1f)) ) var seekProgress by remember { mutableStateOf(0f) } - val focusManager = LocalFocusManager.current LaunchedEffect(isSelected) { if (isSelected) { @@ -70,37 +70,36 @@ fun RowScope.VideoPlayerControllerIndicator( } } + val handleSeekEventModifier = Modifier.handleDPadKeyEvents( + onEnter = { + isSelected = !isSelected + onSeek(seekProgress) + }, + onLeft = { + seekProgress = (seekProgress - 0.1f).coerceAtLeast(0f) + }, + onRight = { + seekProgress = (seekProgress + 0.1f).coerceAtMost(1f) + } + ) + + val handleDpadCenterClickModifier = Modifier.handleDPadKeyEvents( + onEnter = { + seekProgress = progress + isSelected = !isSelected + } + ) + Canvas( modifier = Modifier .weight(1f) .height(animatedIndicatorHeight) .padding(horizontal = 4.dp) - .handleDPadKeyEvents( - onEnter = { - if (isSelected) { - onSeek(seekProgress) - focusManager.moveFocus(FocusDirection.Exit) - } else { - seekProgress = progress - } - isSelected = !isSelected - }, - onLeft = { - if (isSelected) { - seekProgress = (seekProgress - 0.1f).coerceAtLeast(0f) - } else { - focusManager.moveFocus(FocusDirection.Left) - } - }, - onRight = { - if (isSelected) { - seekProgress = (seekProgress + 0.1f).coerceAtMost(1f) - } else { - focusManager.moveFocus(FocusDirection.Right) - } - } - ) - .focusable(interactionSource = interactionSource), + .ifElse( + condition = isSelected, + ifTrueModifier = handleSeekEventModifier, + ifFalseModifier = handleDpadCenterClickModifier + ).focusable(interactionSource = interactionSource), onDraw = { val yOffset = size.height.div(2) drawLine( diff --git a/JetStreamCompose/jetstream/src/main/java/com/google/jetstream/presentation/utils/ModifierUtils.kt b/JetStreamCompose/jetstream/src/main/java/com/google/jetstream/presentation/utils/ModifierUtils.kt index 8d89c66c..798714d8 100644 --- a/JetStreamCompose/jetstream/src/main/java/com/google/jetstream/presentation/utils/ModifierUtils.kt +++ b/JetStreamCompose/jetstream/src/main/java/com/google/jetstream/presentation/utils/ModifierUtils.kt @@ -60,7 +60,8 @@ fun Modifier.handleDPadKeyEvents( } KeyEvent.KEYCODE_DPAD_CENTER, KeyEvent.KEYCODE_ENTER, KeyEvent.KEYCODE_NUMPAD_ENTER -> { - onEnter?.invoke().also { + onEnter?.apply { + onActionUp(::invoke) return@onPreviewKeyEvent true } } From e87c9d42dcaeb8d5c2a500bb9e2c3a36141b5d3a Mon Sep 17 00:00:00 2001 From: Nikhil Parab Date: Sun, 2 Jun 2024 00:00:33 +0530 Subject: [PATCH 2/3] Revert "Fix #174: Selecting Seekbar to move video time freezes controls" This reverts commit f4effe7c1f3049ee4f948dcb7663074570d8285d. --- .../components/VideoPlayerIndicator.kt | 53 ++++++++++--------- .../presentation/utils/ModifierUtils.kt | 3 +- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/JetStreamCompose/jetstream/src/main/java/com/google/jetstream/presentation/screens/videoPlayer/components/VideoPlayerIndicator.kt b/JetStreamCompose/jetstream/src/main/java/com/google/jetstream/presentation/screens/videoPlayer/components/VideoPlayerIndicator.kt index 2ce2ed35..8fc8393b 100644 --- a/JetStreamCompose/jetstream/src/main/java/com/google/jetstream/presentation/screens/videoPlayer/components/VideoPlayerIndicator.kt +++ b/JetStreamCompose/jetstream/src/main/java/com/google/jetstream/presentation/screens/videoPlayer/components/VideoPlayerIndicator.kt @@ -41,7 +41,6 @@ import androidx.compose.ui.unit.dp import androidx.tv.material3.ExperimentalTvMaterial3Api import androidx.tv.material3.MaterialTheme import com.google.jetstream.presentation.utils.handleDPadKeyEvents -import com.google.jetstream.presentation.utils.ifElse @OptIn(ExperimentalComposeUiApi::class, ExperimentalTvMaterial3Api::class) @Composable @@ -61,6 +60,7 @@ fun RowScope.VideoPlayerControllerIndicator( targetValue = 4.dp.times((if (isFocused) 2.5f else 1f)) ) var seekProgress by remember { mutableStateOf(0f) } + val focusManager = LocalFocusManager.current LaunchedEffect(isSelected) { if (isSelected) { @@ -70,36 +70,37 @@ fun RowScope.VideoPlayerControllerIndicator( } } - val handleSeekEventModifier = Modifier.handleDPadKeyEvents( - onEnter = { - isSelected = !isSelected - onSeek(seekProgress) - }, - onLeft = { - seekProgress = (seekProgress - 0.1f).coerceAtLeast(0f) - }, - onRight = { - seekProgress = (seekProgress + 0.1f).coerceAtMost(1f) - } - ) - - val handleDpadCenterClickModifier = Modifier.handleDPadKeyEvents( - onEnter = { - seekProgress = progress - isSelected = !isSelected - } - ) - Canvas( modifier = Modifier .weight(1f) .height(animatedIndicatorHeight) .padding(horizontal = 4.dp) - .ifElse( - condition = isSelected, - ifTrueModifier = handleSeekEventModifier, - ifFalseModifier = handleDpadCenterClickModifier - ).focusable(interactionSource = interactionSource), + .handleDPadKeyEvents( + onEnter = { + if (isSelected) { + onSeek(seekProgress) + focusManager.moveFocus(FocusDirection.Exit) + } else { + seekProgress = progress + } + isSelected = !isSelected + }, + onLeft = { + if (isSelected) { + seekProgress = (seekProgress - 0.1f).coerceAtLeast(0f) + } else { + focusManager.moveFocus(FocusDirection.Left) + } + }, + onRight = { + if (isSelected) { + seekProgress = (seekProgress + 0.1f).coerceAtMost(1f) + } else { + focusManager.moveFocus(FocusDirection.Right) + } + } + ) + .focusable(interactionSource = interactionSource), onDraw = { val yOffset = size.height.div(2) drawLine( diff --git a/JetStreamCompose/jetstream/src/main/java/com/google/jetstream/presentation/utils/ModifierUtils.kt b/JetStreamCompose/jetstream/src/main/java/com/google/jetstream/presentation/utils/ModifierUtils.kt index 798714d8..8d89c66c 100644 --- a/JetStreamCompose/jetstream/src/main/java/com/google/jetstream/presentation/utils/ModifierUtils.kt +++ b/JetStreamCompose/jetstream/src/main/java/com/google/jetstream/presentation/utils/ModifierUtils.kt @@ -60,8 +60,7 @@ fun Modifier.handleDPadKeyEvents( } KeyEvent.KEYCODE_DPAD_CENTER, KeyEvent.KEYCODE_ENTER, KeyEvent.KEYCODE_NUMPAD_ENTER -> { - onEnter?.apply { - onActionUp(::invoke) + onEnter?.invoke().also { return@onPreviewKeyEvent true } } From 786fe16022555c5c012a4b97b4a862b81e173d66 Mon Sep 17 00:00:00 2001 From: Nikhil Date: Sun, 2 Jun 2024 00:07:45 +0530 Subject: [PATCH 3/3] Fix #174: Selecting Seekbar to move video time freezes controls --- .../components/VideoPlayerIndicator.kt | 49 ++++++++++--------- .../presentation/utils/ModifierUtils.kt | 3 +- 2 files changed, 27 insertions(+), 25 deletions(-) diff --git a/JetStreamCompose/jetstream/src/main/java/com/google/jetstream/presentation/screens/videoPlayer/components/VideoPlayerIndicator.kt b/JetStreamCompose/jetstream/src/main/java/com/google/jetstream/presentation/screens/videoPlayer/components/VideoPlayerIndicator.kt index 8fc8393b..9646b545 100644 --- a/JetStreamCompose/jetstream/src/main/java/com/google/jetstream/presentation/screens/videoPlayer/components/VideoPlayerIndicator.kt +++ b/JetStreamCompose/jetstream/src/main/java/com/google/jetstream/presentation/screens/videoPlayer/components/VideoPlayerIndicator.kt @@ -41,6 +41,7 @@ import androidx.compose.ui.unit.dp import androidx.tv.material3.ExperimentalTvMaterial3Api import androidx.tv.material3.MaterialTheme import com.google.jetstream.presentation.utils.handleDPadKeyEvents +import com.google.jetstream.presentation.utils.ifElse @OptIn(ExperimentalComposeUiApi::class, ExperimentalTvMaterial3Api::class) @Composable @@ -70,35 +71,35 @@ fun RowScope.VideoPlayerControllerIndicator( } } + val handleSeekEventModifier = Modifier.handleDPadKeyEvents( + onEnter = { + isSelected = !isSelected + onSeek(seekProgress) + }, + onLeft = { + seekProgress = (seekProgress - 0.1f).coerceAtLeast(0f) + }, + onRight = { + seekProgress = (seekProgress + 0.1f).coerceAtMost(1f) + } + ) + + val handleDpadCenterClickModifier = Modifier.handleDPadKeyEvents( + onEnter = { + seekProgress = progress + isSelected = !isSelected + } + ) + Canvas( modifier = Modifier .weight(1f) .height(animatedIndicatorHeight) .padding(horizontal = 4.dp) - .handleDPadKeyEvents( - onEnter = { - if (isSelected) { - onSeek(seekProgress) - focusManager.moveFocus(FocusDirection.Exit) - } else { - seekProgress = progress - } - isSelected = !isSelected - }, - onLeft = { - if (isSelected) { - seekProgress = (seekProgress - 0.1f).coerceAtLeast(0f) - } else { - focusManager.moveFocus(FocusDirection.Left) - } - }, - onRight = { - if (isSelected) { - seekProgress = (seekProgress + 0.1f).coerceAtMost(1f) - } else { - focusManager.moveFocus(FocusDirection.Right) - } - } + .ifElse( + condition = isSelected, + ifTrueModifier = handleSeekEventModifier, + ifFalseModifier = handleDpadCenterClickModifier ) .focusable(interactionSource = interactionSource), onDraw = { diff --git a/JetStreamCompose/jetstream/src/main/java/com/google/jetstream/presentation/utils/ModifierUtils.kt b/JetStreamCompose/jetstream/src/main/java/com/google/jetstream/presentation/utils/ModifierUtils.kt index 8d89c66c..798714d8 100644 --- a/JetStreamCompose/jetstream/src/main/java/com/google/jetstream/presentation/utils/ModifierUtils.kt +++ b/JetStreamCompose/jetstream/src/main/java/com/google/jetstream/presentation/utils/ModifierUtils.kt @@ -60,7 +60,8 @@ fun Modifier.handleDPadKeyEvents( } KeyEvent.KEYCODE_DPAD_CENTER, KeyEvent.KEYCODE_ENTER, KeyEvent.KEYCODE_NUMPAD_ENTER -> { - onEnter?.invoke().also { + onEnter?.apply { + onActionUp(::invoke) return@onPreviewKeyEvent true } }