From c3f28b7026f32f6c5fd716896c9d23497e97fdf8 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Wed, 20 Mar 2024 12:59:35 +0100 Subject: [PATCH] fix: back gesture doesn't work on some devices --- .../libretube/ui/activities/MainActivity.kt | 24 ++++++++++++------- .../ui/activities/OfflinePlayerActivity.kt | 6 ++++- .../libretube/ui/fragments/PlayerFragment.kt | 10 +++++--- .../libretube/ui/views/CustomExoPlayerView.kt | 4 ++-- 4 files changed, 30 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/github/libretube/ui/activities/MainActivity.kt b/app/src/main/java/com/github/libretube/ui/activities/MainActivity.kt index ce6f8a226..c48b18794 100644 --- a/app/src/main/java/com/github/libretube/ui/activities/MainActivity.kt +++ b/app/src/main/java/com/github/libretube/ui/activities/MainActivity.kt @@ -150,7 +150,10 @@ class MainActivity : BaseActivity() { onBackPressedDispatcher.addCallback { if (playerViewModel.isFullscreen.value == true) { - val fullscreenUnsetSuccess = runOnPlayerFragment { unsetFullscreen() } + val fullscreenUnsetSuccess = runOnPlayerFragment { + unsetFullscreen() + true + } if (fullscreenUnsetSuccess) return@addCallback } @@ -508,7 +511,10 @@ class MainActivity : BaseActivity() { override fun onUserLeaveHint() { super.onUserLeaveHint() - runOnPlayerFragment { onUserLeaveHint() } + runOnPlayerFragment { + onUserLeaveHint() + true + } } override fun onNewIntent(intent: Intent?) { @@ -518,19 +524,21 @@ class MainActivity : BaseActivity() { } override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean { - return runOnPlayerFragment { onKeyUp(keyCode, event) } + if (runOnPlayerFragment { onKeyUp(keyCode) }) { + return true + } + + return super.onKeyUp(keyCode, event) } /** * Attempt to run code on the player fragment if running * Returns true if a running player fragment was found and the action got consumed, else false */ - private fun runOnPlayerFragment(action: PlayerFragment.() -> Unit): Boolean { - supportFragmentManager.fragments.filterIsInstance() + private fun runOnPlayerFragment(action: PlayerFragment.() -> Boolean): Boolean { + return supportFragmentManager.fragments.filterIsInstance() .firstOrNull() ?.let(action) - ?.run { return true } - - return false + ?: false } } diff --git a/app/src/main/java/com/github/libretube/ui/activities/OfflinePlayerActivity.kt b/app/src/main/java/com/github/libretube/ui/activities/OfflinePlayerActivity.kt index f934b8db9..416763cea 100644 --- a/app/src/main/java/com/github/libretube/ui/activities/OfflinePlayerActivity.kt +++ b/app/src/main/java/com/github/libretube/ui/activities/OfflinePlayerActivity.kt @@ -267,6 +267,10 @@ class OfflinePlayerActivity : BaseActivity() { } override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean { - return binding.player.onKeyBoardAction(keyCode, event) + if (binding.player.onKeyBoardAction(keyCode)) { + return true + } + + return super.onKeyUp(keyCode, event) } } diff --git a/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt index dd69763ee..3ded1b1b6 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt @@ -191,7 +191,11 @@ class PlayerFragment : Fragment(), OnlinePlayerOptions { } override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean { - return _binding?.player?.onKeyUp(keyCode, event) ?: true + if (_binding?.player?.onKeyUp(keyCode, event) == true) { + return true + } + + return super.onKeyUp(keyCode, event) } } } @@ -1701,7 +1705,7 @@ class PlayerFragment : Fragment(), OnlinePlayerOptions { binding.player.hideController() } - fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean { - return _binding?.player?.onKeyBoardAction(keyCode, event) ?: false + fun onKeyUp(keyCode: Int): Boolean { + return _binding?.player?.onKeyBoardAction(keyCode) ?: false } } diff --git a/app/src/main/java/com/github/libretube/ui/views/CustomExoPlayerView.kt b/app/src/main/java/com/github/libretube/ui/views/CustomExoPlayerView.kt index e4957b346..a4a289944 100644 --- a/app/src/main/java/com/github/libretube/ui/views/CustomExoPlayerView.kt +++ b/app/src/main/java/com/github/libretube/ui/views/CustomExoPlayerView.kt @@ -735,7 +735,7 @@ open class CustomExoPlayerView( return super.onInterceptTouchEvent(ev) } - fun onKeyBoardAction(keyCode: Int, event: KeyEvent?): Boolean { + fun onKeyBoardAction(keyCode: Int): Boolean { when (keyCode) { KeyEvent.KEYCODE_SPACE, KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE -> { player?.togglePlayPauseState() @@ -757,7 +757,7 @@ open class CustomExoPlayerView( fragmentManager.fragments.filterIsInstance().firstOrNull() ?.toggleFullscreen() } - else -> super.onKeyUp(keyCode, event) + else -> return false } return true