OSDN Git Service

am 9ce01bc6: am 4389f14a: am 900c5aa9: am 93e01102: am feb07ea4: Merge "Stability...
authorSenpo Hu <senpo@google.com>
Fri, 26 Sep 2014 20:59:03 +0000 (20:59 +0000)
committerAndroid Git Automerger <android-git-automerger@android.com>
Fri, 26 Sep 2014 20:59:03 +0000 (20:59 +0000)
* commit '9ce01bc6cee4082a1330e1746e8b7aa4d81e805a':
  Stability: add null check for all CameraProxy obj references in VideoModule.

src/com/android/camera/ui/FilmstripGestureRecognizer.java
src/com/android/camera/widget/FilmstripLayout.java
src/com/android/camera/widget/FilmstripView.java

index 17e8e2f..8106361 100644 (file)
@@ -18,6 +18,8 @@ package com.android.camera.ui;
 
 import android.content.Context;
 import android.view.GestureDetector;
+import android.view.InputDevice;
+import android.view.KeyEvent;
 import android.view.MotionEvent;
 import android.view.ScaleGestureDetector;
 
@@ -33,6 +35,7 @@ public class FilmstripGestureRecognizer {
         boolean onSingleTapUp(float x, float y);
         boolean onDoubleTap(float x, float y);
         boolean onScroll(float x, float y, float dx, float dy);
+        boolean onMouseScroll(float hscroll, float vscroll);
         boolean onFling(float velocityX, float velocityY);
         boolean onScaleBegin(float focusX, float focusY);
         boolean onScale(float focusX, float focusY, float scale);
@@ -64,6 +67,23 @@ public class FilmstripGestureRecognizer {
         return (gestureProcessed | scaleProcessed);
     }
 
+    public boolean onGenericMotionEvent(MotionEvent event) {
+        if ((event.getSource() & InputDevice.SOURCE_CLASS_POINTER) != 0) {
+            switch (event.getAction()) {
+                case MotionEvent.ACTION_SCROLL: {
+                    final float hscroll = event.getAxisValue(MotionEvent.AXIS_HSCROLL);
+                    final float vscroll = -event.getAxisValue(MotionEvent.AXIS_VSCROLL);
+
+                    if (hscroll != 0.0f || vscroll != 0.0f) {
+                        mListener.onMouseScroll(hscroll, vscroll);
+                    }
+                }
+            }
+        }
+
+        return true;
+    }
+
     private class MyGestureListener
                 extends GestureDetector.SimpleOnGestureListener {
         @Override
index c943b7e..0dd1d37 100644 (file)
@@ -362,6 +362,14 @@ public class FilmstripLayout extends FrameLayout implements FilmstripContentPane
         }
 
         @Override
+        public boolean onMouseScroll(float hscroll, float vscroll) {
+            if (mFilmstripContentTranslationProgress == 0f) {
+                return mFilmstripGestureListener.onMouseScroll(hscroll, vscroll);
+            }
+            return false;
+        }
+
+        @Override
         public boolean onSingleTapUp(float x, float y) {
             if (mFilmstripContentTranslationProgress == 0f) {
                 return mFilmstripGestureListener.onSingleTapUp(x, y);
index 5774ab3..5b62de0 100644 (file)
@@ -34,6 +34,7 @@ import android.os.SystemClock;
 import android.util.AttributeSet;
 import android.util.DisplayMetrics;
 import android.util.SparseArray;
+import android.view.KeyEvent;
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewGroup;
@@ -85,6 +86,7 @@ public class FilmstripView extends ViewGroup {
     // Only check for intercepting touch events within first 500ms
     private static final int SWIPE_TIME_OUT = 500;
     private static final int DECELERATION_FACTOR = 4;
+    private static final float MOUSE_SCROLL_FACTOR = 128f;
 
     private CameraActivity mActivity;
     private FilmstripGestureRecognizer mGestureRecognizer;
@@ -1616,6 +1618,12 @@ public class FilmstripView extends ViewGroup {
         return mGestureRecognizer.onTouchEvent(ev);
     }
 
+    @Override
+    public boolean onGenericMotionEvent(MotionEvent ev) {
+        mGestureRecognizer.onGenericMotionEvent(ev);
+        return true;
+    }
+
     FilmstripGestureRecognizer.Listener getGestureListener() {
         return mGestureListener;
     }
@@ -2758,6 +2766,30 @@ public class FilmstripView extends ViewGroup {
         }
 
         @Override
+        public boolean onMouseScroll(float hscroll, float vscroll) {
+            final float scroll;
+
+            hscroll *= MOUSE_SCROLL_FACTOR;
+            vscroll *= MOUSE_SCROLL_FACTOR;
+
+            if (vscroll != 0f) {
+                scroll = vscroll;
+            } else {
+                scroll = hscroll;
+            }
+
+            if (inFullScreen()) {
+                onFling(-scroll, 0f);
+            } else if (inZoomView()) {
+                onScroll(0f, 0f, hscroll, vscroll);
+            } else {
+                onScroll(0f, 0f, scroll, 0f);
+            }
+
+            return true;
+        }
+
+        @Override
         public boolean onFling(float velocityX, float velocityY) {
             final ViewItem currItem = mViewItem[mCurrentItem];
             if (currItem == null) {