fix: back gesture doesn't work on some devices

This commit is contained in:
Bnyro 2024-03-20 12:59:35 +01:00
parent bd737539af
commit c3f28b7026
4 changed files with 30 additions and 14 deletions

View File

@ -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<PlayerFragment>()
private fun runOnPlayerFragment(action: PlayerFragment.() -> Boolean): Boolean {
return supportFragmentManager.fragments.filterIsInstance<PlayerFragment>()
.firstOrNull()
?.let(action)
?.run { return true }
return false
?: false
}
}

View File

@ -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)
}
}

View File

@ -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
}
}

View File

@ -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<PlayerFragment>().firstOrNull()
?.toggleFullscreen()
}
else -> super.onKeyUp(keyCode, event)
else -> return false
}
return true