mirror of
https://github.com/bbara04/Purefin.git
synced 2026-07-24 03:36:51 +00:00
Focus play/pause button when player controls open
This commit is contained in:
@@ -48,6 +48,29 @@ class TvPlayerControlsOverlayTest {
|
||||
@get:Rule
|
||||
val composeRule = createAndroidComposeRule<ComponentActivity>()
|
||||
|
||||
@Test
|
||||
fun requestingControlsFocus_focusesPlayPauseInsteadOfSeekBar() {
|
||||
composeRule.setContent {
|
||||
AppTheme {
|
||||
OverlayHost(
|
||||
uiState = samplePlayerState(),
|
||||
requestFocus = true
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
composeRule.waitForIdle()
|
||||
|
||||
composeRule.onNodeWithTag(TvPlayerPlayPauseButtonTag).assertIsFocused()
|
||||
composeRule.onNodeWithTag(TvPlayerSeekBarTag)
|
||||
.assert(
|
||||
SemanticsMatcher.expectValue(
|
||||
SemanticsProperties.Focused,
|
||||
false
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun downFromSeekBar_movesFocusToControlButtonsBeforePlaylist() {
|
||||
composeRule.setContent {
|
||||
@@ -433,7 +456,8 @@ class TvPlayerControlsOverlayTest {
|
||||
@Composable
|
||||
private fun OverlayHost(
|
||||
uiState: PlayerUiState,
|
||||
initiallyExpanded: Boolean = false
|
||||
initiallyExpanded: Boolean = false,
|
||||
requestFocus: Boolean = false
|
||||
) {
|
||||
var isPlaylistExpanded by remember { mutableStateOf(initiallyExpanded) }
|
||||
val focusRequester = remember { FocusRequester() }
|
||||
@@ -441,6 +465,12 @@ private fun OverlayHost(
|
||||
val audioButtonFocusRequester = remember { FocusRequester() }
|
||||
val subtitlesButtonFocusRequester = remember { FocusRequester() }
|
||||
|
||||
LaunchedEffect(requestFocus) {
|
||||
if (requestFocus) {
|
||||
focusRequester.requestFocus()
|
||||
}
|
||||
}
|
||||
|
||||
Box(modifier = Modifier.size(width = 960.dp, height = 540.dp)) {
|
||||
TvPlayerControlsOverlay(
|
||||
uiState = uiState,
|
||||
|
||||
@@ -186,7 +186,6 @@ private fun TvPlayerBottomSection(
|
||||
modifier: Modifier = Modifier
|
||||
) {
|
||||
val scheme = MaterialTheme.colorScheme
|
||||
val playPauseFocusRequester = remember { FocusRequester() }
|
||||
val playlistFocusRequester = remember { FocusRequester() }
|
||||
var wasPlaylistExpanded by remember { mutableStateOf(isPlaylistExpanded) }
|
||||
|
||||
@@ -194,7 +193,7 @@ private fun TvPlayerBottomSection(
|
||||
if (isPlaylistExpanded && uiState.queue.isNotEmpty()) {
|
||||
playlistFocusRequester.requestFocus()
|
||||
} else if (wasPlaylistExpanded) {
|
||||
playPauseFocusRequester.requestFocus()
|
||||
focusRequester.requestFocus()
|
||||
}
|
||||
wasPlaylistExpanded = isPlaylistExpanded
|
||||
}
|
||||
@@ -255,10 +254,9 @@ private fun TvPlayerBottomSection(
|
||||
onSeekRelative = onSeekRelative,
|
||||
togglePlayState = onPlayPause,
|
||||
onMoveDown = {
|
||||
playPauseFocusRequester.requestFocus()
|
||||
focusRequester.requestFocus()
|
||||
true
|
||||
},
|
||||
focusRequester = focusRequester,
|
||||
modifier = Modifier.testTag(TvPlayerSeekBarTag)
|
||||
)
|
||||
Spacer(modifier = Modifier.height(8.dp))
|
||||
@@ -292,7 +290,7 @@ private fun TvPlayerBottomSection(
|
||||
onClick = onPlayPause,
|
||||
size = 72,
|
||||
modifier = expandPlaylistModifier
|
||||
.focusRequester(playPauseFocusRequester)
|
||||
.focusRequester(focusRequester)
|
||||
.testTag(TvPlayerPlayPauseButtonTag)
|
||||
)
|
||||
TvIconButton(
|
||||
|
||||
Reference in New Issue
Block a user