Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(810)

Unified Diff: remoting/android/java/src/org/chromium/chromoting/DesktopView.java

Issue 19500017: Implement basic point-and-touch mouse input for Android client (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: remoting/android/java/src/org/chromium/chromoting/DesktopView.java
diff --git a/remoting/android/java/src/org/chromium/chromoting/DesktopView.java b/remoting/android/java/src/org/chromium/chromoting/DesktopView.java
index 3d571b9db8c8177667e245aa1846f959d841fc7b..e6f685cd6ace01d9ca1aadf71c8bf49e7cbe784e 100644
--- a/remoting/android/java/src/org/chromium/chromoting/DesktopView.java
+++ b/remoting/android/java/src/org/chromium/chromoting/DesktopView.java
@@ -63,6 +63,8 @@ public class DesktopView extends SurfaceView implements Runnable, SurfaceHolder.
/** Whether the bottom edge of the image was visible on-screen during the last render. */
private boolean mBottomUsedToBeOut;
+ private int mMouseButton;
+
/** Whether the device has just been rotated, necessitating a canvas redraw. */
private boolean mJustRotated;
@@ -81,6 +83,8 @@ public class DesktopView extends SurfaceView implements Runnable, SurfaceHolder.
mRightUsedToBeOut = false;
mBottomUsedToBeOut = false;
+ mMouseButton = 0;
+
mJustRotated = false;
}
@@ -219,13 +223,66 @@ public class DesktopView extends SurfaceView implements Runnable, SurfaceHolder.
Log.i("deskview", "DesktopView.surfaceDestroyed(...)");
}
+ /** Called when a mouse action is made. */
+ private void handleMouseMovement(float[] coordinates, int button) {
+ // Coordinates are relative to the canvas, but we need image coordinates.
+ Matrix canvasToImage = new Matrix();
+ mTransform.invert(canvasToImage);
+ canvasToImage.mapPoints(coordinates);
+
+ // Coordinates are now relative to the image, so transmit them to the host.
+ JniInterface.mouseAction((int)coordinates[0], (int)coordinates[1], button);
+ }
+
/**
* Called whenever the user attempts to touch the canvas. Forwards such
* events to the appropriate gesture detector until one accepts them.
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
- return mScroller.onTouchEvent(event) || mZoomer.onTouchEvent(event);
+ boolean handled = mScroller.onTouchEvent(event) || mZoomer.onTouchEvent(event);
+
+ if (event.getPointerCount()==1) {
+ float[] coordinates = {event.getRawX(), event.getY()};
+
+ switch (event.getActionMasked()) {
+ case MotionEvent.ACTION_DOWN:
+ Log.i("gesture", "Down...");
+ mMouseButton = 0;
+ break;
+
+ case MotionEvent.ACTION_MOVE:
+ if (mMouseButton==0) {
+ Log.i("gesture", "Moving 1");
+ mMouseButton = 1; // TODO Name me!
solb 2013/07/22 19:13:48 Sorry; I had forgotten how rough this revision was
+ }
+ else Log.i("gesture", "Moving " + mMouseButton);
+ break;
+
+ case MotionEvent.ACTION_UP:
+ if (mMouseButton==0) {
+ Log.i("gesture", "Releasing 1 (after press)");
+ handleMouseMovement(coordinates, 1); // TODO Name me!
+ mMouseButton = -1; // TODO Name me!
+ }
+ else if (mMouseButton > 0) {
+ Log.i("gesture", "Releasing " + mMouseButton);
+ mMouseButton *= -1;
+ }
+ else {
+ Log.w("gesture", "Button already in released state before gesture ended");
+ }
+ break;
+
+ default:
+ return handled;
+ }
+ handleMouseMovement(coordinates, mMouseButton);
+
+ return true;
+ }
+
+ return handled;
}
/** Responds to touch events filtered by the gesture detectors. */
@@ -267,6 +324,12 @@ public class DesktopView extends SurfaceView implements Runnable, SurfaceHolder.
return true;
}
+ /** Called whenever a gesture starts. Always accepts the gesture so it isn't ignored. */
+ @Override
+ public boolean onDown(MotionEvent e) {
+ return true;
+ }
+
/**
* Called when the user starts to zoom. Always accepts the zoom so that
* onScale() can decide whether to respond to it.
@@ -283,5 +346,19 @@ public class DesktopView extends SurfaceView implements Runnable, SurfaceHolder.
public void onScaleEnd(ScaleGestureDetector detector) {
onScale(detector);
}
+
+ @Override
+ public void onLongPress(MotionEvent e) {
+ float[] coordinates = new float[] {e.getRawX(), e.getY()};
+
+ if (mMouseButton > 0) {
+ Log.i("gesture", "Releasing " + mMouseButton);
+ handleMouseMovement(coordinates, -mMouseButton);
+ }
+
+ Log.i("gesture", "Pressing 3");
+ mMouseButton = 3; // TODO Name me!
+ handleMouseMovement(coordinates, mMouseButton);
+ }
}
}

Powered by Google App Engine
This is Rietveld 408576698