[Android] [PATCH] Modulate seek speed with vertical movement

Geoffrey Métais geoffrey.metais at gmail.com
Tue Feb 24 19:50:11 CET 2015


Only available for seek on screen touch, not for seek from seekbar
---
 .../videolan/vlc/gui/video/VideoPlayerActivity.java | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

diff --git a/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java b/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java
index fe8a0fc..3272405 100644
--- a/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java
+++ b/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.java
@@ -244,7 +244,7 @@ public class VideoPlayerActivity extends ActionBarActivity implements IVideoPlay
     private static final int TOUCH_SEEK = 3;
     private int mTouchAction;
     private int mSurfaceYDisplayRange;
-    private float mTouchY, mTouchX;
+    private float mInitTouchY, mTouchY, mTouchX;
 
     //stick event
     private static final int JOYSTICK_INPUT_DELAY = 300;
@@ -1637,6 +1637,7 @@ public class VideoPlayerActivity extends ActionBarActivity implements IVideoPlay
         // coef is the gradient's move to determine a neutral zone
         float coef = Math.abs (y_changed / x_changed);
         float xgesturesize = ((x_changed / screen.xdpi) * 2.54f);
+        float delta_y = Math.max(1f,((mInitTouchY - event.getRawY()) / screen.xdpi + 0.5f)*2f);
 
         /* Offset for Mouse Events */
         int[] offset = new int[2];
@@ -1648,7 +1649,7 @@ public class VideoPlayerActivity extends ActionBarActivity implements IVideoPlay
 
         case MotionEvent.ACTION_DOWN:
             // Audio
-            mTouchY = event.getRawY();
+            mTouchY = mInitTouchY = event.getRawY();
             mVol = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
             mTouchAction = TOUCH_NONE;
             // Seek
@@ -1663,7 +1664,7 @@ public class VideoPlayerActivity extends ActionBarActivity implements IVideoPlay
 
             // No volume/brightness action if coef < 2 or a secondary display is connected
             //TODO : Volume action when a secondary display is connected
-            if (coef > 2 && mPresentation == null) {
+            if (mTouchAction != TOUCH_SEEK && coef > 2 && mPresentation == null) {
                 mTouchY = event.getRawY();
                 mTouchX = event.getRawX();
                 // Volume (Up or Down - Right side)
@@ -1676,7 +1677,7 @@ public class VideoPlayerActivity extends ActionBarActivity implements IVideoPlay
                 }
             } else {
                 // Seek (Right or Left move)
-                doSeekTouch(coef, xgesturesize, false);
+                doSeekTouch(Math.round(delta_y), xgesturesize, false);
             }
             if (mTouchAction != TOUCH_NONE && mOverlayTimeout != OVERLAY_INFINITE)
                 showOverlayTimeout(OVERLAY_INFINITE);
@@ -1698,7 +1699,7 @@ public class VideoPlayerActivity extends ActionBarActivity implements IVideoPlay
             }
             // Seek
             if (mTouchAction == TOUCH_SEEK)
-                doSeekTouch(coef, xgesturesize, true);
+                doSeekTouch(Math.round(delta_y), xgesturesize, true);
             mTouchX = -1f;
             mTouchY = -1f;
             break;
@@ -1706,9 +1707,9 @@ public class VideoPlayerActivity extends ActionBarActivity implements IVideoPlay
         return mTouchAction != TOUCH_NONE;
     }
 
-    private void doSeekTouch(float coef, float gesturesize, boolean seek) {
+    private void doSeekTouch(int coef, float gesturesize, boolean seek) {
         // No seek action if coef > 0.5 and gesturesize < 1cm
-        if (coef > 0.5 || Math.abs(gesturesize) < 1 || !mCanSeek)
+        if (Math.abs(gesturesize) < 1 || !mCanSeek)
             return;
 
         if (mTouchAction != TOUCH_NONE && mTouchAction != TOUCH_SEEK)
@@ -1719,7 +1720,7 @@ public class VideoPlayerActivity extends ActionBarActivity implements IVideoPlay
         long time = mLibVLC.getTime();
 
         // Size of the jump, 10 minutes max (600000), with a bi-cubic progression, for a 8cm gesture
-        int jump = (int) (Math.signum(gesturesize) * ((600000 * Math.pow((gesturesize / 8), 4)) + 3000));
+        int jump = (int) ((Math.signum(gesturesize) * ((600000 * Math.pow((gesturesize / 8), 4)) + 3000)) / coef);
 
         // Adjust the jump
         if ((jump > 0) && ((time + jump) > length))
@@ -1733,10 +1734,10 @@ public class VideoPlayerActivity extends ActionBarActivity implements IVideoPlay
 
         if (length > 0)
             //Show the jump's size
-            showInfo(String.format("%s%s (%s)",
+            showInfo(String.format("%s%s (%s) x%d",
                     jump >= 0 ? "+" : "",
                     Strings.millisToString(jump),
-                    Strings.millisToString(time + jump)), 1000);
+                    Strings.millisToString(time + jump), coef), 1000);
         else
             showInfo(R.string.unseekable_stream, 1000);
     }
-- 
2.1.0



More information about the Android mailing list