mirror of
https://gitlab.futo.org/videostreaming/grayjay.git
synced 2025-08-13 11:39:49 +00:00
Implemented hold to play video at 2x speed gesture.
This commit is contained in:
parent
19c84475db
commit
9e7b936663
2 changed files with 38 additions and 1 deletions
|
@ -92,6 +92,7 @@ class GestureControlView : LinearLayout {
|
||||||
private var _surfaceView: View? = null
|
private var _surfaceView: View? = null
|
||||||
private var _layoutIndicatorFill: FrameLayout;
|
private var _layoutIndicatorFill: FrameLayout;
|
||||||
private var _layoutIndicatorFit: FrameLayout;
|
private var _layoutIndicatorFit: FrameLayout;
|
||||||
|
private var _speedHolding = false
|
||||||
|
|
||||||
private val _gestureController: GestureDetectorCompat;
|
private val _gestureController: GestureDetectorCompat;
|
||||||
|
|
||||||
|
@ -103,6 +104,8 @@ class GestureControlView : LinearLayout {
|
||||||
val onZoom = Event1<Float>();
|
val onZoom = Event1<Float>();
|
||||||
val onSoundAdjusted = Event1<Float>();
|
val onSoundAdjusted = Event1<Float>();
|
||||||
val onToggleFullscreen = Event0();
|
val onToggleFullscreen = Event0();
|
||||||
|
val onSpeedHoldStart = Event0()
|
||||||
|
val onSpeedHoldEnd = Event0()
|
||||||
|
|
||||||
var fullScreenGestureEnabled = true
|
var fullScreenGestureEnabled = true
|
||||||
|
|
||||||
|
@ -216,7 +219,19 @@ class GestureControlView : LinearLayout {
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
override fun onLongPress(p0: MotionEvent) = Unit
|
override fun onLongPress(p0: MotionEvent) {
|
||||||
|
if (!_isControlsLocked
|
||||||
|
&& !_skipping
|
||||||
|
&& !_adjustingBrightness
|
||||||
|
&& !_adjustingSound
|
||||||
|
&& !_adjustingFullscreenUp
|
||||||
|
&& !_adjustingFullscreenDown
|
||||||
|
&& !_isPanning
|
||||||
|
&& !_isZooming) {
|
||||||
|
_speedHolding = true
|
||||||
|
onSpeedHoldStart.emit()
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
_gestureController.setOnDoubleTapListener(object : GestureDetector.OnDoubleTapListener {
|
_gestureController.setOnDoubleTapListener(object : GestureDetector.OnDoubleTapListener {
|
||||||
|
@ -309,6 +324,11 @@ class GestureControlView : LinearLayout {
|
||||||
override fun onTouchEvent(event: MotionEvent?): Boolean {
|
override fun onTouchEvent(event: MotionEvent?): Boolean {
|
||||||
val ev = event ?: return super.onTouchEvent(event);
|
val ev = event ?: return super.onTouchEvent(event);
|
||||||
|
|
||||||
|
if (ev.action == MotionEvent.ACTION_UP && _speedHolding) {
|
||||||
|
_speedHolding = false
|
||||||
|
onSpeedHoldEnd.emit()
|
||||||
|
}
|
||||||
|
|
||||||
cancelHideJob();
|
cancelHideJob();
|
||||||
|
|
||||||
if (_skipping) {
|
if (_skipping) {
|
||||||
|
|
|
@ -117,6 +117,9 @@ class FutoVideoPlayer : FutoVideoPlayerBase {
|
||||||
|
|
||||||
private var _isControlsLocked: Boolean = false;
|
private var _isControlsLocked: Boolean = false;
|
||||||
|
|
||||||
|
private var _speedHoldPrevRate = 1f
|
||||||
|
private var _speedHoldWasPlaying = false
|
||||||
|
|
||||||
private val _time_bar_listener: TimeBar.OnScrubListener;
|
private val _time_bar_listener: TimeBar.OnScrubListener;
|
||||||
|
|
||||||
var isFitMode : Boolean = false
|
var isFitMode : Boolean = false
|
||||||
|
@ -254,6 +257,20 @@ class FutoVideoPlayer : FutoVideoPlayerBase {
|
||||||
gestureControl = findViewById(R.id.gesture_control);
|
gestureControl = findViewById(R.id.gesture_control);
|
||||||
|
|
||||||
gestureControl.setupTouchArea(_layoutControls, background);
|
gestureControl.setupTouchArea(_layoutControls, background);
|
||||||
|
gestureControl.onSpeedHoldStart.subscribe {
|
||||||
|
exoPlayer?.player?.let { player ->
|
||||||
|
_speedHoldWasPlaying = player.isPlaying
|
||||||
|
_speedHoldPrevRate = getPlaybackRate()
|
||||||
|
setPlaybackRate(2f)
|
||||||
|
player.play()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
gestureControl.onSpeedHoldEnd.subscribe {
|
||||||
|
exoPlayer?.player?.let { player ->
|
||||||
|
if (!_speedHoldWasPlaying) player.pause()
|
||||||
|
setPlaybackRate(_speedHoldPrevRate)
|
||||||
|
}
|
||||||
|
}
|
||||||
gestureControl.onSeek.subscribe { seekFromCurrent(it); };
|
gestureControl.onSeek.subscribe { seekFromCurrent(it); };
|
||||||
gestureControl.onSoundAdjusted.subscribe {
|
gestureControl.onSoundAdjusted.subscribe {
|
||||||
if (Settings.instance.gestureControls.useSystemVolume) {
|
if (Settings.instance.gestureControls.useSystemVolume) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue