switch to gesture listener

This commit is contained in:
Bnyro 2022-07-17 11:39:55 +02:00
parent 9cf86a7675
commit 506b97536a
2 changed files with 48 additions and 82 deletions

View File

@ -20,7 +20,10 @@ import android.support.v4.media.session.MediaSessionCompat
import android.text.Html
import android.text.TextUtils
import android.util.Log
import android.view.GestureDetector
import android.view.GestureDetector.SimpleOnGestureListener
import android.view.LayoutInflater
import android.view.MotionEvent
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
@ -62,7 +65,6 @@ import com.github.libretube.util.DescriptionAdapter
import com.github.libretube.util.PlayerHelper
import com.github.libretube.util.RetrofitInstance
import com.github.libretube.util.formatShort
import com.github.libretube.views.DoubleClickListener
import com.google.android.exoplayer2.C
import com.google.android.exoplayer2.DefaultLoadControl
import com.google.android.exoplayer2.ExoPlayer
@ -982,44 +984,59 @@ class PlayerFragment : Fragment() {
private fun enableDoubleTapToSeek() {
val seekIncrement =
PreferenceHelper.getString(requireContext(), "seek_increment", "5")?.toLong()!! * 1000
val hideDoubleTapOverlayDelay = 700L
// enable rewind button
binding.rewindFL.setOnClickListener(
DoubleClickListener(
callback = object : DoubleClickListener.Callback {
override fun doubleClicked() {
binding.rewindBTN.visibility = View.VISIBLE
exoPlayer.seekTo(exoPlayer.currentPosition - seekIncrement)
Handler(Looper.getMainLooper()).postDelayed({
binding.rewindBTN.visibility = View.INVISIBLE
}, 700)
}
override fun singleClicked() {
toggleController()
}
val rewindGestureDetector = GestureDetector(
context,
object : SimpleOnGestureListener() {
override fun onDoubleTap(e: MotionEvent): Boolean {
binding.rewindBTN.visibility = View.VISIBLE
exoPlayer.seekTo(exoPlayer.currentPosition - seekIncrement)
Handler(Looper.getMainLooper()).postDelayed({
binding.rewindBTN.visibility = View.INVISIBLE
}, hideDoubleTapOverlayDelay)
return super.onDoubleTap(e)
}
)
override fun onSingleTapConfirmed(e: MotionEvent?): Boolean {
toggleController()
return super.onSingleTapConfirmed(e)
}
}
)
// enable fast forward button
binding.forwardFL.setOnClickListener(
DoubleClickListener(
callback = object : DoubleClickListener.Callback {
override fun doubleClicked() {
binding.forwardBTN.visibility = View.VISIBLE
exoPlayer.seekTo(exoPlayer.currentPosition + seekIncrement)
Handler(Looper.getMainLooper()).postDelayed({
binding.forwardBTN.visibility = View.INVISIBLE
}, 700)
}
binding.rewindFL.setOnTouchListener { view, event ->
rewindGestureDetector.onTouchEvent(event)
view.performClick()
true
}
override fun singleClicked() {
toggleController()
}
// enable forward button
val forwardGestureDetector = GestureDetector(
context,
object : SimpleOnGestureListener() {
override fun onDoubleTap(e: MotionEvent): Boolean {
binding.forwardBTN.visibility = View.VISIBLE
exoPlayer.seekTo(exoPlayer.currentPosition + seekIncrement)
Handler(Looper.getMainLooper()).postDelayed({
binding.forwardBTN.visibility = View.INVISIBLE
}, hideDoubleTapOverlayDelay)
return super.onSingleTapConfirmed(e)
}
)
override fun onSingleTapConfirmed(e: MotionEvent?): Boolean {
toggleController()
return super.onSingleTapConfirmed(e)
}
}
)
binding.forwardFL.setOnTouchListener { view, event ->
forwardGestureDetector.onTouchEvent(event)
view.performClick()
true
}
}
private fun disableDoubleTapToSeek() {

View File

@ -1,51 +0,0 @@
package com.github.libretube.views
import android.os.Handler
import android.os.Looper
import android.view.View
class DoubleClickListener(
private val doubleClickTimeLimitMills: Long = 200,
private val callback: Callback
) : View.OnClickListener {
private var lastClicked: Long = -1L
override fun onClick(v: View?) {
lastClicked = when {
lastClicked == -1L -> {
checkForSingleClick()
System.currentTimeMillis()
}
isDoubleClicked() -> {
callback.doubleClicked()
-1L
}
else -> {
checkForSingleClick()
System.currentTimeMillis()
}
}
}
private fun checkForSingleClick() {
Handler(Looper.getMainLooper()).postDelayed({
if (lastClicked != -1L) callback.singleClicked()
}, doubleClickTimeLimitMills)
}
private fun getTimeDiff(from: Long, to: Long): Long {
return to - from
}
private fun isDoubleClicked(): Boolean {
return getTimeDiff(
lastClicked,
System.currentTimeMillis()
) <= doubleClickTimeLimitMills
}
interface Callback {
fun doubleClicked()
fun singleClicked()
}
}