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
This commit is contained in:
parent
d17cfcde95
commit
2bb6cb9b14
5 changed files with 44 additions and 53 deletions
|
@ -72,29 +72,9 @@ class PlayerGestureHelper(
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
private val gestureDetector = GestureDetector(
|
private val seekGestureDetector = GestureDetector(
|
||||||
playerView.context,
|
playerView.context,
|
||||||
object : GestureDetector.SimpleOnGestureListener() {
|
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")
|
@SuppressLint("SetTextI18n")
|
||||||
override fun onScroll(
|
override fun onScroll(
|
||||||
firstEvent: MotionEvent,
|
firstEvent: MotionEvent,
|
||||||
|
@ -125,6 +105,25 @@ class PlayerGestureHelper(
|
||||||
true
|
true
|
||||||
} else false
|
} 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)
|
if (swipeGestureValueTrackerProgress > -1 || swipeGestureProgressOpen)
|
||||||
return false
|
return false
|
||||||
|
@ -273,36 +272,18 @@ class PlayerGestureHelper(
|
||||||
activity.window.attributes.screenBrightness = appPreferences.playerBrightness
|
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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
releaseAction(event)
|
|
||||||
true
|
|
||||||
}
|
|
||||||
} else if (!appPreferences.playerGesturesVB && appPreferences.playerGesturesZoom) {
|
|
||||||
@Suppress("ClickableViewAccessibility")
|
@Suppress("ClickableViewAccessibility")
|
||||||
playerView.setOnTouchListener { _, event ->
|
playerView.setOnTouchListener { _, event ->
|
||||||
if (playerView.useController) {
|
if (playerView.useController) {
|
||||||
when (event.pointerCount) {
|
when (event.pointerCount) {
|
||||||
1 -> tapGestureDetector.onTouchEvent(event)
|
1 -> {
|
||||||
2 -> zoomGestureDetector.onTouchEvent(event)
|
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 -> gestureDetector.onTouchEvent(event)
|
|
||||||
2 -> zoomGestureDetector.onTouchEvent(event)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
releaseAction(event)
|
releaseAction(event)
|
||||||
|
@ -310,4 +291,3 @@ class PlayerGestureHelper(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
|
@ -100,8 +100,10 @@
|
||||||
<string name="player_gestures">Player gestures</string>
|
<string name="player_gestures">Player gestures</string>
|
||||||
<string name="player_gestures_vb">Volume and brightness gestures</string>
|
<string name="player_gestures_vb">Volume and brightness gestures</string>
|
||||||
<string name="player_gestures_zoom">Zoom gesture</string>
|
<string name="player_gestures_zoom">Zoom gesture</string>
|
||||||
|
<string name="player_gestures_seek">Seek gesture</string>
|
||||||
<string name="player_gestures_vb_summary">Swipe up and down on the right side of the screen to change the volume and on the left side to change the brightness</string>
|
<string name="player_gestures_vb_summary">Swipe up and down on the right side of the screen to change the volume and on the left side to change the brightness</string>
|
||||||
<string name="player_gestures_zoom_summary">Pinch to fill the screen with the video</string>
|
<string name="player_gestures_zoom_summary">Pinch to fill the screen with the video</string>
|
||||||
|
<string name="player_gestures_seek_summary">Swipe horizontally to seek forwards or backwards</string>
|
||||||
<string name="player_brightness_remember">Remember brightness level</string>
|
<string name="player_brightness_remember">Remember brightness level</string>
|
||||||
<string name="sort_by_options_0">Title</string>
|
<string name="sort_by_options_0">Title</string>
|
||||||
<string name="sort_by_options_1">IMDB Rating</string>
|
<string name="sort_by_options_1">IMDB Rating</string>
|
||||||
|
|
|
@ -78,6 +78,13 @@
|
||||||
app:summary="@string/player_gestures_zoom_summary"
|
app:summary="@string/player_gestures_zoom_summary"
|
||||||
app:title="@string/player_gestures_zoom"
|
app:title="@string/player_gestures_zoom"
|
||||||
app:widgetLayout="@layout/preference_material3_switch" />
|
app:widgetLayout="@layout/preference_material3_switch" />
|
||||||
|
<SwitchPreferenceCompat
|
||||||
|
app:defaultValue="true"
|
||||||
|
app:dependency="pref_player_gestures"
|
||||||
|
app:key="pref_player_gestures_seek"
|
||||||
|
app:summary="@string/player_gestures_seek_summary"
|
||||||
|
app:title="@string/player_gestures_seek"
|
||||||
|
app:widgetLayout="@layout/preference_material3_switch" />
|
||||||
<SwitchPreferenceCompat
|
<SwitchPreferenceCompat
|
||||||
app:dependency="pref_player_gestures_vb"
|
app:dependency="pref_player_gestures_vb"
|
||||||
app:key="pref_player_brightness_remember"
|
app:key="pref_player_brightness_remember"
|
||||||
|
|
|
@ -31,6 +31,7 @@ constructor(
|
||||||
val playerGestures get() = sharedPreferences.getBoolean(Constants.PREF_PLAYER_GESTURES, true)
|
val playerGestures get() = sharedPreferences.getBoolean(Constants.PREF_PLAYER_GESTURES, true)
|
||||||
val playerGesturesVB get() = sharedPreferences.getBoolean(Constants.PREF_PLAYER_GESTURES_VB, true)
|
val playerGesturesVB get() = sharedPreferences.getBoolean(Constants.PREF_PLAYER_GESTURES_VB, true)
|
||||||
val playerGesturesZoom get() = sharedPreferences.getBoolean(Constants.PREF_PLAYER_GESTURES_ZOOM, true)
|
val playerGesturesZoom get() = sharedPreferences.getBoolean(Constants.PREF_PLAYER_GESTURES_ZOOM, true)
|
||||||
|
val playerGesturesSeek get() = sharedPreferences.getBoolean(Constants.PREF_PLAYER_GESTURES_SEEK, true)
|
||||||
|
|
||||||
val playerBrightnessRemember get() =
|
val playerBrightnessRemember get() =
|
||||||
sharedPreferences.getBoolean(Constants.PREF_PLAYER_BRIGHTNESS_REMEMBER, false)
|
sharedPreferences.getBoolean(Constants.PREF_PLAYER_BRIGHTNESS_REMEMBER, false)
|
||||||
|
|
|
@ -13,6 +13,7 @@ object Constants {
|
||||||
const val PREF_PLAYER_GESTURES = "pref_player_gestures"
|
const val PREF_PLAYER_GESTURES = "pref_player_gestures"
|
||||||
const val PREF_PLAYER_GESTURES_VB = "pref_player_gestures_vb"
|
const val PREF_PLAYER_GESTURES_VB = "pref_player_gestures_vb"
|
||||||
const val PREF_PLAYER_GESTURES_ZOOM = "pref_player_gestures_zoom"
|
const val PREF_PLAYER_GESTURES_ZOOM = "pref_player_gestures_zoom"
|
||||||
|
const val PREF_PLAYER_GESTURES_SEEK = "pref_player_gestures_seek"
|
||||||
const val PREF_PLAYER_BRIGHTNESS_REMEMBER = "pref_player_brightness_remember"
|
const val PREF_PLAYER_BRIGHTNESS_REMEMBER = "pref_player_brightness_remember"
|
||||||
const val PREF_PLAYER_BRIGHTNESS = "pref_player_brightness"
|
const val PREF_PLAYER_BRIGHTNESS = "pref_player_brightness"
|
||||||
const val PREF_PLAYER_SEEK_BACK_INC = "pref_player_seek_back_inc"
|
const val PREF_PLAYER_SEEK_BACK_INC = "pref_player_seek_back_inc"
|
||||||
|
|
Loading…
Reference in a new issue