diff --git a/embedding/android/GeckoGestureDetector.java b/embedding/android/GeckoGestureDetector.java deleted file mode 100644 index 1eaae7cb443..00000000000 --- a/embedding/android/GeckoGestureDetector.java +++ /dev/null @@ -1,96 +0,0 @@ -/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*- - * ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is Mozilla Android code. - * - * The Initial Developer of the Original Code is Mozilla Foundation. - * Portions created by the Initial Developer are Copyright (C) 2011 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Wes Johnston - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -package org.mozilla.gecko; - -import android.view.GestureDetector; -import android.view.MotionEvent; -import android.content.Context; -import android.view.View; -import org.json.JSONArray; -import org.json.JSONObject; -import android.util.Log; - -class GeckoGestureDetector implements GestureDetector.OnGestureListener { - private GestureDetector mDetector; - private static final String LOG_FILE_NAME = "GeckoGestureDetector"; - public GeckoGestureDetector(Context aContext) { - mDetector = new GestureDetector(aContext, this); - } - - public boolean onTouchEvent(MotionEvent event) { - return mDetector.onTouchEvent(event); - } - - @Override - public boolean onDown(MotionEvent e) { - return true; - } - - @Override - public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { - return true; - } - - @Override - public void onLongPress(MotionEvent motionEvent) { - JSONObject ret = new JSONObject(); - try { - ret.put("x", motionEvent.getX()); - ret.put("y", motionEvent.getY()); - } catch(Exception ex) { - Log.w(LOG_FILE_NAME, "Error building return: " + ex); - } - - GeckoEvent e = new GeckoEvent("Gesture:LongPress", ret.toString()); - GeckoAppShell.sendEventToGecko(e); - } - - @Override - public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { - return true; - } - - @Override - public void onShowPress(MotionEvent e) { - } - - @Override - public boolean onSingleTapUp(MotionEvent e) { - return true; - } -} diff --git a/embedding/android/Makefile.in b/embedding/android/Makefile.in index 815cbd7b98b..6cc92347b42 100644 --- a/embedding/android/Makefile.in +++ b/embedding/android/Makefile.in @@ -61,7 +61,6 @@ JAVAFILES = \ GeckoEventListener.java \ GeckoInputConnection.java \ GeckoPreferences.java \ - GeckoGestureDetector.java \ GlobalHistory.java \ PromptService.java \ SurfaceInfo.java \ diff --git a/embedding/android/gfx/LayerController.java b/embedding/android/gfx/LayerController.java index af846edc5da..2c8ce9c59e1 100644 --- a/embedding/android/gfx/LayerController.java +++ b/embedding/android/gfx/LayerController.java @@ -49,6 +49,7 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.util.Log; import android.view.MotionEvent; +import android.view.GestureDetector; import android.view.ScaleGestureDetector; import android.view.View.OnTouchListener; import java.util.ArrayList; @@ -121,6 +122,7 @@ public class LayerController { public Bitmap getCheckerboardPattern() { return getDrawable("checkerboard"); } public Bitmap getShadowPattern() { return getDrawable("shadow"); } + public GestureDetector.OnGestureListener getGestureListener() { return mPanZoomController; } public ScaleGestureDetector.OnScaleGestureListener getScaleGestureListener() { return mPanZoomController; } private Bitmap getDrawable(String name) { diff --git a/embedding/android/gfx/LayerView.java b/embedding/android/gfx/LayerView.java index d60614a14d1..5e1b92875c5 100644 --- a/embedding/android/gfx/LayerView.java +++ b/embedding/android/gfx/LayerView.java @@ -59,6 +59,7 @@ public class LayerView extends GLSurfaceView { private LayerController mController; private InputConnectionHandler mInputConnectionHandler; private LayerRenderer mRenderer; + private GestureDetector mGestureDetector; private ScaleGestureDetector mScaleGestureDetector; public LayerView(Context context, LayerController controller) { @@ -68,6 +69,7 @@ public class LayerView extends GLSurfaceView { mController = controller; mRenderer = new LayerRenderer(this); setRenderer(mRenderer); + mGestureDetector = new GestureDetector(context, controller.getGestureListener()); mScaleGestureDetector = new ScaleGestureDetector(context, controller.getScaleGestureListener()); mInputConnectionHandler = null; @@ -77,6 +79,8 @@ public class LayerView extends GLSurfaceView { @Override public boolean onTouchEvent(MotionEvent event) { + if (mGestureDetector.onTouchEvent(event)) + return true; mScaleGestureDetector.onTouchEvent(event); if (mScaleGestureDetector.isInProgress()) return true; diff --git a/embedding/android/ui/PanZoomController.java b/embedding/android/ui/PanZoomController.java index b4ac487366e..7b7bf24ee02 100644 --- a/embedding/android/ui/PanZoomController.java +++ b/embedding/android/ui/PanZoomController.java @@ -37,11 +37,15 @@ package org.mozilla.fennec.ui; +import org.json.JSONObject; import org.mozilla.fennec.gfx.IntPoint; import org.mozilla.fennec.gfx.IntRect; import org.mozilla.fennec.gfx.IntSize; import org.mozilla.fennec.gfx.LayerController; +import org.mozilla.gecko.GeckoAppShell; +import org.mozilla.gecko.GeckoEvent; import android.util.Log; +import android.view.GestureDetector; import android.view.MotionEvent; import android.view.ScaleGestureDetector; import java.util.Timer; @@ -53,7 +57,12 @@ import java.util.TimerTask; * Many ideas are from Joe Hewitt's Scrollability: * https://github.com/joehewitt/scrollability/ */ -public class PanZoomController implements ScaleGestureDetector.OnScaleGestureListener { +public class PanZoomController + extends GestureDetector.SimpleOnGestureListener + implements ScaleGestureDetector.OnScaleGestureListener +{ + private static final String LOG_NAME = "PanZoomController"; + private LayerController mController; private static final float FRICTION = 0.97f; @@ -507,5 +516,22 @@ public class PanZoomController implements ScaleGestureDetector.OnScaleGestureLis public void onScaleEnd(ScaleGestureDetector detector) { // TODO } -} + @Override + public void onLongPress(MotionEvent motionEvent) { + JSONObject ret = new JSONObject(); + try { + IntPoint point = new IntPoint((int)Math.round(motionEvent.getX()), + (int)Math.round(motionEvent.getY())); + point = mController.convertViewPointToLayerPoint(point); + ret.put("x", point.x); + ret.put("y", point.y); + Log.e(LOG_NAME, "Long press at " + motionEvent.getX() + ", " + motionEvent.getY()); + } catch(Exception ex) { + Log.w(LOG_NAME, "Error building return: " + ex); + } + + GeckoEvent e = new GeckoEvent("Gesture:LongPress", ret.toString()); + GeckoAppShell.sendEventToGecko(e); + } +}