[a11y] Ensure that video overlay with controls is never hidden when screen reader is enabled.

This commit is contained in:
Benoit Marty 2026-05-20 16:21:06 +02:00
parent 0725c16471
commit bd01b27517
2 changed files with 14 additions and 4 deletions

View file

@ -50,6 +50,7 @@ dependencies {
implementation(projects.libraries.matrix.api)
implementation(projects.libraries.matrixmedia.api)
implementation(projects.libraries.uiStrings)
implementation(projects.libraries.uiUtils)
implementation(projects.libraries.voiceplayer.api)
implementation(projects.services.toolbox.api)

View file

@ -57,6 +57,7 @@ import io.element.android.libraries.mediaviewer.impl.local.player.rememberExoPla
import io.element.android.libraries.mediaviewer.impl.local.player.seekToEnsurePlaying
import io.element.android.libraries.mediaviewer.impl.local.player.togglePlay
import io.element.android.libraries.mediaviewer.impl.local.rememberLocalMediaViewState
import io.element.android.libraries.ui.utils.a11y.isTalkbackActive
import kotlinx.coroutines.delay
import me.saket.telephoto.zoomable.zoomable
import timber.log.Timber
@ -162,12 +163,20 @@ private fun ExoPlayerMediaVideoView(
var autoHideController by remember { mutableIntStateOf(0) }
LaunchedEffect(autoHideController) {
delay(5.seconds)
if (exoPlayer.isPlaying) {
val isTalkbackActive = isTalkbackActive()
LaunchedEffect(autoHideController, isTalkbackActive) {
if (isTalkbackActive) {
// Ensure that the controller is always visible when talkback is active
mediaPlayerControllerState = mediaPlayerControllerState.copy(
isVisible = false,
isVisible = true,
)
} else {
delay(5.seconds)
if (exoPlayer.isPlaying) {
mediaPlayerControllerState = mediaPlayerControllerState.copy(
isVisible = false,
)
}
}
}