Fix crash when removing callbacks

This commit is contained in:
Bnyro 2023-01-21 11:57:43 +01:00
parent ee0607fb07
commit ecabc7348c

View File

@ -218,9 +218,15 @@ internal class CustomExoPlayerView(
} }
} }
private fun cancelHideControllerTask() {
runCatching {
handler.removeCallbacks(hideControllerRunnable)
}
}
override fun hideController() { override fun hideController() {
// remove the callback to hide the controller // remove the callback to hide the controller
handler.removeCallbacks(hideControllerRunnable) cancelHideControllerTask()
super.hideController() super.hideController()
// hide system bars if in fullscreen // hide system bars if in fullscreen
@ -234,7 +240,7 @@ internal class CustomExoPlayerView(
override fun showController() { override fun showController() {
// remove the previous callback from the queue to prevent a flashing behavior // remove the previous callback from the queue to prevent a flashing behavior
handler.removeCallbacks(hideControllerRunnable) cancelHideControllerTask()
// automatically hide the controller after 2 seconds // automatically hide the controller after 2 seconds
handler.postDelayed(hideControllerRunnable, AUTO_HIDE_CONTROLLER_DELAY) handler.postDelayed(hideControllerRunnable, AUTO_HIDE_CONTROLLER_DELAY)
super.showController() super.showController()
@ -393,8 +399,8 @@ internal class CustomExoPlayerView(
doubleTapOverlayBinding?.apply { doubleTapOverlayBinding?.apply {
animateSeeking(rewindBTN, rewindIV, rewindTV, true) animateSeeking(rewindBTN, rewindIV, rewindTV, true)
runnableHandler.removeCallbacks(hideRewindButtonRunnable)
// start callback to hide the button // start callback to hide the button
runnableHandler.removeCallbacks(hideRewindButtonRunnable)
runnableHandler.postDelayed(hideRewindButtonRunnable, 700) runnableHandler.postDelayed(hideRewindButtonRunnable, 700)
} }
} }
@ -718,7 +724,7 @@ internal class CustomExoPlayerView(
override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean { override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean {
// when a control is clicked, restart the countdown to hide the controller // when a control is clicked, restart the countdown to hide the controller
if (isControllerFullyVisible) { if (isControllerFullyVisible) {
handler.removeCallbacks(hideControllerRunnable) cancelHideControllerTask()
handler.postDelayed(hideControllerRunnable, AUTO_HIDE_CONTROLLER_DELAY) handler.postDelayed(hideControllerRunnable, AUTO_HIDE_CONTROLLER_DELAY)
} }
return super.onInterceptTouchEvent(ev) return super.onInterceptTouchEvent(ev)