diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/music/NowPlayingPage.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/music/NowPlayingPage.kt index a9d43a27..5b571e4a 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/music/NowPlayingPage.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/music/NowPlayingPage.kt @@ -45,7 +45,9 @@ import androidx.compose.ui.input.key.KeyEventType 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.LocalLayoutDirection import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.media3.common.util.UnstableApi @@ -106,9 +108,11 @@ fun NowPlayingPage( ).value.appPreferences val musicPrefs = preferences.musicPreferences + val isLtr = LocalLayoutDirection.current == LayoutDirection.Ltr val keyHandler = - remember(preferences) { + remember(isLtr, preferences) { PlaybackKeyHandler( + isLtr = isLtr, player = player, controlsEnabled = true, skipWithLeftRight = false, diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/playback/PlaybackKeyHandler.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/playback/PlaybackKeyHandler.kt index a7cd4bb1..7209fbd9 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/playback/PlaybackKeyHandler.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/playback/PlaybackKeyHandler.kt @@ -15,6 +15,7 @@ import kotlin.time.Duration * Handles [KeyEvent]s during playback on [PlaybackPage] */ class PlaybackKeyHandler( + private val isLtr: Boolean, private val player: Player, private val controlsEnabled: Boolean, private val skipWithLeftRight: Boolean, @@ -47,11 +48,21 @@ class PlaybackKeyHandler( if (isDirectionalDpad(it) || isEnterKey(it) || isControllerMedia(it)) { if (!controllerViewState.controlsVisible) { if (skipWithLeftRight && isSkipBack(it)) { - updateSkipIndicator(-seekBack.inWholeMilliseconds) - player.seekBack(seekBack) + if (isLtr) { + updateSkipIndicator(-seekBack.inWholeMilliseconds) + player.seekBack(seekBack) + } else { + updateSkipIndicator(seekForward.inWholeMilliseconds) + player.seekForward(seekForward) + } } else if (skipWithLeftRight && isSkipForward(it)) { - player.seekForward(seekForward) - updateSkipIndicator(seekForward.inWholeMilliseconds) + if (isLtr) { + player.seekForward(seekForward) + updateSkipIndicator(seekForward.inWholeMilliseconds) + } else { + player.seekBack(seekBack) + updateSkipIndicator(seekBack.inWholeMilliseconds) + } } else if (oneClickPause && isEnterKey(it)) { val wasPlaying = player.isPlaying Util.handlePlayPauseButtonAction(player) @@ -127,7 +138,7 @@ class PlaybackKeyHandler( return false } - val isBack = isSkipBack(event) + val isBack = if (isLtr) isSkipBack(event) else isSkipForward(event) return when (event.type) { KeyEventType.KeyDown -> { val repeatCount = event.nativeKeyEvent.repeatCount diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/playback/PlaybackPage.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/playback/PlaybackPage.kt index 5e748396..4f0d74a9 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/playback/PlaybackPage.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/playback/PlaybackPage.kt @@ -1,7 +1,6 @@ package com.github.damontecres.wholphin.ui.playback import android.view.Gravity -import android.view.View import android.view.ViewGroup import android.widget.FrameLayout import androidx.activity.compose.BackHandler @@ -48,8 +47,10 @@ import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.onSizeChanged import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.text.intl.Locale import androidx.compose.ui.unit.IntSize +import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import androidx.compose.ui.viewinterop.AndroidView import androidx.compose.ui.window.Dialog @@ -240,26 +241,29 @@ fun PlaybackPageContent( skipIndicatorDuration += delta skipPosition = player.currentPosition } + val isLtr = LocalLayoutDirection.current == LayoutDirection.Ltr val keyHandler = - PlaybackKeyHandler( - player = player, - controlsEnabled = nextUp == null, - skipWithLeftRight = true, - seekForward = preferences.appPreferences.playbackPreferences.skipForwardMs.milliseconds, - seekBack = preferences.appPreferences.playbackPreferences.skipBackMs.milliseconds, - getDurationMs = { player.duration.coerceAtLeast(0L) }, - controllerViewState = controllerViewState, - updateSkipIndicator = updateSkipIndicator, - skipBackOnResume = preferences.appPreferences.playbackPreferences.skipBackOnResume, - onInteraction = viewModel::reportInteraction, - oneClickPause = preferences.appPreferences.playbackPreferences.oneClickPause, - onStop = { - player.stop() - viewModel.navigationManager.goBack() - }, - onPlaybackDialogTypeClick = { playbackDialog = it }, - ) - + remember(isLtr, preferences) { + PlaybackKeyHandler( + isLtr = isLtr, + player = player, + controlsEnabled = nextUp == null, + skipWithLeftRight = true, + seekForward = preferences.appPreferences.playbackPreferences.skipForwardMs.milliseconds, + seekBack = preferences.appPreferences.playbackPreferences.skipBackMs.milliseconds, + getDurationMs = { player.duration.coerceAtLeast(0L) }, + controllerViewState = controllerViewState, + updateSkipIndicator = updateSkipIndicator, + skipBackOnResume = preferences.appPreferences.playbackPreferences.skipBackOnResume, + onInteraction = viewModel::reportInteraction, + oneClickPause = preferences.appPreferences.playbackPreferences.oneClickPause, + onStop = { + player.stop() + viewModel.navigationManager.goBack() + }, + onPlaybackDialogTypeClick = { playbackDialog = it }, + ) + } val onPlaybackActionClick: (PlaybackAction) -> Unit = { when (it) { is PlaybackAction.PlaybackSpeed -> {