Index: blimp/client/android/java/src/org/chromium/blimp/BlimpView.java |
diff --git a/blimp/client/android/java/src/org/chromium/blimp/BlimpView.java b/blimp/client/android/java/src/org/chromium/blimp/BlimpView.java |
index 191b415d5c0e36fba8b9cb0d7f8a7e41d6d403b8..5ea7ab9433cbe4b2d5aeb209ccfda1a16eb1d6cf 100644 |
--- a/blimp/client/android/java/src/org/chromium/blimp/BlimpView.java |
+++ b/blimp/client/android/java/src/org/chromium/blimp/BlimpView.java |
@@ -8,6 +8,7 @@ import android.content.Context; |
import android.graphics.Point; |
import android.os.Build; |
import android.util.AttributeSet; |
+import android.view.MotionEvent; |
import android.view.Surface; |
import android.view.SurfaceHolder; |
import android.view.SurfaceView; |
@@ -84,6 +85,47 @@ public class BlimpView extends SurfaceView implements SurfaceHolder.Callback2 { |
nativeSetVisibility(mNativeBlimpViewPtr, visible); |
} |
+ private static boolean isValidTouchEventActionForNative(int eventAction) { |
David Trainor- moved to gerrit
2015/11/02 16:55:30
Maybe just inline this or put it down right above
Khushal
2015/12/01 08:22:25
Done.
|
+ // Only these actions have any effect on gesture detection. Other |
+ // actions have no corresponding WebTouchEvent type and may confuse the |
+ // touch pipline, so we ignore them entirely. |
+ return eventAction == MotionEvent.ACTION_DOWN |
+ || eventAction == MotionEvent.ACTION_UP |
+ || eventAction == MotionEvent.ACTION_CANCEL |
+ || eventAction == MotionEvent.ACTION_MOVE |
+ || eventAction == MotionEvent.ACTION_POINTER_DOWN |
+ || eventAction == MotionEvent.ACTION_POINTER_UP; |
+ } |
+ |
+ // View overrides. |
+ @Override |
+ public boolean onTouchEvent(MotionEvent event) { |
+ int eventAction = event.getActionMasked(); |
+ |
+ if (!isValidTouchEventActionForNative(eventAction)) return false; |
+ |
+ if (mNativeBlimpViewPtr == 0) return false; |
David Trainor- moved to gerrit
2015/11/02 16:55:30
Check this first before worrying about anything el
Khushal
2015/12/01 08:22:25
Done.
|
+ |
+ final int pointerCount = event.getPointerCount(); |
+ final boolean consumed = nativeOnTouchEvent(mNativeBlimpViewPtr, event, |
+ event.getEventTime(), eventAction, |
+ pointerCount, event.getHistorySize(), event.getActionIndex(), |
+ event.getX(), event.getY(), |
+ pointerCount > 1 ? event.getX(1) : 0, |
+ pointerCount > 1 ? event.getY(1) : 0, |
+ event.getPointerId(0), pointerCount > 1 ? event.getPointerId(1) : -1, |
+ event.getTouchMajor(), pointerCount > 1 ? event.getTouchMajor(1) : 0, |
+ event.getTouchMinor(), pointerCount > 1 ? event.getTouchMinor(1) : 0, |
+ event.getOrientation(), pointerCount > 1 ? event.getOrientation(1) : 0, |
+ event.getRawX(), event.getRawY(), |
+ event.getToolType(0), |
+ pointerCount > 1 ? event.getToolType(1) : MotionEvent.TOOL_TYPE_UNKNOWN, |
+ event.getButtonState(), |
+ event.getMetaState()); |
+ |
+ return consumed; |
+ } |
+ |
// SurfaceView overrides. |
@Override |
protected void onFinishInflate() { |
@@ -125,4 +167,15 @@ public class BlimpView extends SurfaceView implements SurfaceHolder.Callback2 { |
private native void nativeOnSurfaceCreated(long nativeBlimpView); |
private native void nativeOnSurfaceDestroyed(long nativeBlimpView); |
private native void nativeSetVisibility(long nativeBlimpView, boolean visible); |
+ private native boolean nativeOnTouchEvent( |
+ long nativeBlimpView, MotionEvent event, |
+ long timeMs, int action, int pointerCount, int historySize, int actionIndex, |
+ float x0, float y0, float x1, float y1, |
+ int pointerId0, int pointerId1, |
+ float touchMajor0, float touchMajor1, |
+ float touchMinor0, float touchMinor1, |
+ float orientation0, float orientation1, |
+ float rawX, float rawY, |
+ int androidToolType0, int androidToolType1, |
+ int androidButtonState, int androidMetaState); |
} |