From 0ecf6d4c0eade032644f0c41882a740fe437b584 Mon Sep 17 00:00:00 2001 From: peerless2012 Date: Mon, 22 Jan 2024 22:31:50 +0800 Subject: [PATCH] feat: add long press for 2x speed (#596) * Add long press for 2x speed. * Fix resource hard code warn. * Fix lint warn. * refactor: use `player.setPlaybackSpeed` * refactor: make playback speed increase easily adjustable later --------- Co-authored-by: jarnedemeulemeester --- .../jellyfin/utils/PlayerGestureHelper.kt | 20 ++++++++++++ .../src/main/res/layout/activity_player.xml | 31 +++++++++++++++++++ .../main/res/drawable/ic_speed_forward.xml | 27 ++++++++++++++++ 3 files changed, 78 insertions(+) create mode 100644 core/src/main/res/drawable/ic_speed_forward.xml 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 8c11ba3a..9591abef 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 @@ -55,6 +55,9 @@ class PlayerGestureHelper( private var lastScaleEvent: Long = 0 + private var playbackSpeedIncrease: Float = 2f + private var lastPlaybackSpeed: Float = 0f + private val screenWidth = Resources.getSystem().displayMetrics.widthPixels private val screenHeight = Resources.getSystem().displayMetrics.heightPixels @@ -69,6 +72,18 @@ class PlayerGestureHelper( return true } + @SuppressLint("SetTextI18n") + override fun onLongPress(e: MotionEvent) { + playerView.player?.let { + if (it.isPlaying) { + lastPlaybackSpeed = it.playbackParameters.speed + it.setPlaybackSpeed(playbackSpeedIncrease) + activity.binding.gestureSpeedText.text = playbackSpeedIncrease.toString() + "x" + activity.binding.gestureSpeedLayout.visibility = View.VISIBLE + } + } + } + override fun onDoubleTap(e: MotionEvent): Boolean { // Disables double tap gestures if view is locked if (isControlsLocked) return false @@ -362,6 +377,11 @@ class PlayerGestureHelper( } } } + if (lastPlaybackSpeed > 0 && (event.action == MotionEvent.ACTION_UP || event.action == MotionEvent.ACTION_CANCEL)) { + playerView.player?.setPlaybackSpeed(lastPlaybackSpeed) + lastPlaybackSpeed = 0f + activity.binding.gestureSpeedLayout.visibility = View.GONE + } } private fun longToTimestamp(duration: Long, noSign: Boolean = false): String { diff --git a/app/phone/src/main/res/layout/activity_player.xml b/app/phone/src/main/res/layout/activity_player.xml index ee2e8977..c2c1f5b7 100644 --- a/app/phone/src/main/res/layout/activity_player.xml +++ b/app/phone/src/main/res/layout/activity_player.xml @@ -113,6 +113,37 @@ tools:ignore="ContentDescription" /> + + + + + + + + + + +