From 2bb6cb9b14fb8e623cf3b62131e2cd2c22ee595c Mon Sep 17 00:00:00 2001
From: Jarne Demeulemeester
<32322857+jarnedemeulemeester@users.noreply.github.com>
Date: Sat, 4 Feb 2023 01:13:58 +0100
Subject: [PATCH] feat(settings): add option to toggle seek gesture (#269)
* feat(settings): add option to toggle seek gesture
* Simplify the seek setting summary
* Fix typo in summary
---
.../jellyfin/utils/PlayerGestureHelper.kt | 86 +++++++------------
core/src/main/res/values/strings.xml | 2 +
.../main/res/xml/fragment_settings_player.xml | 7 ++
.../dev/jdtech/jellyfin/AppPreferences.kt | 1 +
.../java/dev/jdtech/jellyfin/Constants.kt | 1 +
5 files changed, 44 insertions(+), 53 deletions(-)
diff --git a/app/phone/src/main/java/dev/jdtech/jellyfin/utils/PlayerGestureHelper.kt b/app/phone/src/main/java/dev/jdtech/jellyfin/utils/PlayerGestureHelper.kt
index 563b1bc5..6ca9aaaa 100644
--- a/app/phone/src/main/java/dev/jdtech/jellyfin/utils/PlayerGestureHelper.kt
+++ b/app/phone/src/main/java/dev/jdtech/jellyfin/utils/PlayerGestureHelper.kt
@@ -72,29 +72,9 @@ class PlayerGestureHelper(
}
)
- private val gestureDetector = GestureDetector(
+ private val seekGestureDetector = GestureDetector(
playerView.context,
object : GestureDetector.SimpleOnGestureListener() {
- override fun onSingleTapConfirmed(e: MotionEvent): Boolean {
- playerView.apply {
- if (!isControllerFullyVisible) showController() else hideController()
- }
-
- return true
- }
-
- override fun onDoubleTap(e: MotionEvent): Boolean {
- val viewCenterX = playerView.measuredWidth / 2
- val currentPos = playerView.player?.currentPosition ?: 0
-
- if (e.x.toInt() > viewCenterX) {
- playerView.player?.seekTo(currentPos + appPreferences.playerSeekForwardIncrement)
- } else {
- playerView.player?.seekTo((currentPos - appPreferences.playerSeekBackIncrement).coerceAtLeast(0))
- }
- return true
- }
-
@SuppressLint("SetTextI18n")
override fun onScroll(
firstEvent: MotionEvent,
@@ -125,6 +105,25 @@ class PlayerGestureHelper(
true
} else false
}
+ return true
+ }
+ }
+ )
+
+ private val vbGestureDetector = GestureDetector(
+ playerView.context,
+ object : GestureDetector.SimpleOnGestureListener() {
+ @SuppressLint("SetTextI18n")
+ override fun onScroll(
+ firstEvent: MotionEvent,
+ currentEvent: MotionEvent,
+ distanceX: Float,
+ distanceY: Float
+ ): Boolean {
+ if (firstEvent.y < playerView.resources.dip(Constants.GESTURE_EXCLUSION_AREA_TOP))
+ return false
+
+ if (abs(distanceY / distanceX) < 2) return false
if (swipeGestureValueTrackerProgress > -1 || swipeGestureProgressOpen)
return false
@@ -273,41 +272,22 @@ class PlayerGestureHelper(
activity.window.attributes.screenBrightness = appPreferences.playerBrightness
}
- if (appPreferences.playerGesturesVB && !appPreferences.playerGesturesZoom) {
- @Suppress("ClickableViewAccessibility")
- playerView.setOnTouchListener { _, event ->
- if (playerView.useController) {
- if (event.pointerCount == 1) {
- gestureDetector.onTouchEvent(event)
+ @Suppress("ClickableViewAccessibility")
+ playerView.setOnTouchListener { _, event ->
+ if (playerView.useController) {
+ when (event.pointerCount) {
+ 1 -> {
+ tapGestureDetector.onTouchEvent(event)
+ if (appPreferences.playerGesturesVB) vbGestureDetector.onTouchEvent(event)
+ if (appPreferences.playerGesturesSeek) seekGestureDetector.onTouchEvent(event)
+ }
+ 2 -> {
+ if (appPreferences.playerGesturesZoom) zoomGestureDetector.onTouchEvent(event)
}
}
- releaseAction(event)
- true
- }
- } else if (!appPreferences.playerGesturesVB && appPreferences.playerGesturesZoom) {
- @Suppress("ClickableViewAccessibility")
- playerView.setOnTouchListener { _, event ->
- if (playerView.useController) {
- when (event.pointerCount) {
- 1 -> tapGestureDetector.onTouchEvent(event)
- 2 -> zoomGestureDetector.onTouchEvent(event)
- }
- }
- releaseAction(event)
- true
- }
- } else if (appPreferences.playerGesturesVB && appPreferences.playerGesturesZoom) {
- @Suppress("ClickableViewAccessibility")
- playerView.setOnTouchListener { _, event ->
- if (playerView.useController) {
- when (event.pointerCount) {
- 1 -> gestureDetector.onTouchEvent(event)
- 2 -> zoomGestureDetector.onTouchEvent(event)
- }
- }
- releaseAction(event)
- true
}
+ releaseAction(event)
+ true
}
}
}
diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml
index eb357ae0..aff2c0b6 100644
--- a/core/src/main/res/values/strings.xml
+++ b/core/src/main/res/values/strings.xml
@@ -100,8 +100,10 @@
Player gestures
Volume and brightness gestures
Zoom gesture
+ Seek gesture
Swipe up and down on the right side of the screen to change the volume and on the left side to change the brightness
Pinch to fill the screen with the video
+ Swipe horizontally to seek forwards or backwards
Remember brightness level
Title
IMDB Rating
diff --git a/core/src/main/res/xml/fragment_settings_player.xml b/core/src/main/res/xml/fragment_settings_player.xml
index a3f2b4d2..d158b8ca 100644
--- a/core/src/main/res/xml/fragment_settings_player.xml
+++ b/core/src/main/res/xml/fragment_settings_player.xml
@@ -78,6 +78,13 @@
app:summary="@string/player_gestures_zoom_summary"
app:title="@string/player_gestures_zoom"
app:widgetLayout="@layout/preference_material3_switch" />
+