Merge pull request #1080 from Bnyro/master

improve double tap behavior and fixes
This commit is contained in:
Bnyro 2022-08-16 17:31:15 +02:00 committed by GitHub
commit 2bd16877bb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 25 additions and 29 deletions

View File

@ -942,21 +942,22 @@ class PlayerFragment : BaseFragment() {
.postDelayed(this@PlayerFragment::refreshLiveStatus, 100)
}
private fun seekToWatchPosition() {
// seek to saved watch position if available
private fun seekToWatchPosition() {
// support for time stamped links
val timeStamp: Long? = arguments?.getLong("timeStamp")
if (timeStamp != null && timeStamp != 0L) {
exoPlayer.seekTo(timeStamp * 1000)
return
}
// browse the watch positions
var position: Long? = null
Thread {
try {
position = DatabaseHolder.db.watchPositionDao().findById(videoId!!).position
} catch (e: Exception) {
position = null
}
if (position!! < streams.duration!! * 0.9) position = null
} catch (e: Exception) {}
}.await()
// support for time stamped links
val timeStamp: Long? = arguments?.getLong("timeStamp")
if (timeStamp != null && timeStamp != 0L) {
position = timeStamp * 1000
}
if (position != null) exoPlayer.seekTo(position!!)
}

View File

@ -7,39 +7,34 @@ import android.view.View
abstract class DoubleTapListener : View.OnClickListener {
private val maximumTimeDifference = 300L
private val handler = Handler(Looper.getMainLooper())
private var isSingleEvent = false
private val doubleClickQualificationSpanInMillis: Long
private var timestampLastClick: Long
private val handler: Handler
private val runnable: Runnable
private var timeStampLastClick = 0L
private var timeStampLastDoubleClick = 0L
override fun onClick(v: View?) {
if (SystemClock.elapsedRealtime() - timestampLastClick < doubleClickQualificationSpanInMillis) {
if (SystemClock.elapsedRealtime() - timeStampLastClick < maximumTimeDifference) {
isSingleEvent = false
handler.removeCallbacks(runnable)
timeStampLastDoubleClick = SystemClock.elapsedRealtime()
onDoubleClick()
return
}
isSingleEvent = true
handler.postDelayed(runnable, DEFAULT_QUALIFICATION_SPAN)
timestampLastClick = SystemClock.elapsedRealtime()
handler.removeCallbacks(runnable)
handler.postDelayed(runnable, maximumTimeDifference)
timeStampLastClick = SystemClock.elapsedRealtime()
}
abstract fun onDoubleClick()
abstract fun onSingleClick()
companion object {
private const val DEFAULT_QUALIFICATION_SPAN: Long = 200
}
init {
doubleClickQualificationSpanInMillis = DEFAULT_QUALIFICATION_SPAN
timestampLastClick = 0
handler = Handler(Looper.getMainLooper())
runnable = Runnable {
if (isSingleEvent) {
private val runnable = Runnable {
if (!isSingleEvent ||
SystemClock.elapsedRealtime() - timeStampLastDoubleClick < maximumTimeDifference
) return@Runnable
onSingleClick()
}
}
}
}