diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk> | 2015-01-15 15:09:00 +0900 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2015-01-16 13:18:30 +0100 |
commit | da39c5fd715fba173836a2098b68d647e867fba6 (patch) | |
tree | 5da1bc0f43156e8fbaf3e6bb69223dda9130c174 /android | |
parent | 0f291b37ca5dd0b86fc2324756761a163727e355 (diff) |
android: fennec import - double tap zoom in JavaPanZoomController
Change-Id: I0fedb5bb353e4d6f9926a8c0f0b80a81b7257d0e
Diffstat (limited to 'android')
-rw-r--r-- | android/experimental/LOAndroid3/src/java/org/mozilla/gecko/ZoomConstraints.java | 13 | ||||
-rw-r--r-- | android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/JavaPanZoomController.java | 37 |
2 files changed, 39 insertions, 11 deletions
diff --git a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/ZoomConstraints.java b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/ZoomConstraints.java index 40d1817c9301..4ac49f728e4a 100644 --- a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/ZoomConstraints.java +++ b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/ZoomConstraints.java @@ -10,28 +10,27 @@ import org.json.JSONObject; public final class ZoomConstraints { private final boolean mAllowZoom; + private final boolean mAllowDoubleTapZoom; private final float mDefaultZoom; private final float mMinZoom; private final float mMaxZoom; public ZoomConstraints(boolean allowZoom) { mAllowZoom = allowZoom; + mAllowDoubleTapZoom = allowZoom; mDefaultZoom = 0.0f; mMinZoom = 0.0f; mMaxZoom = 0.0f; } - ZoomConstraints(JSONObject message) throws JSONException { - mAllowZoom = message.getBoolean("allowZoom"); - mDefaultZoom = (float)message.getDouble("defaultZoom"); - mMinZoom = (float)message.getDouble("minZoom"); - mMaxZoom = (float)message.getDouble("maxZoom"); - } - public final boolean getAllowZoom() { return mAllowZoom; } + public final boolean getAllowDoubleTapZoom() { + return mAllowDoubleTapZoom; + } + public final float getDefaultZoom() { return mDefaultZoom; } diff --git a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/JavaPanZoomController.java b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/JavaPanZoomController.java index 3b3d33e7665f..ccf6280e75a6 100644 --- a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/JavaPanZoomController.java +++ b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/JavaPanZoomController.java @@ -87,6 +87,8 @@ public class JavaPanZoomController private long mLastEventTime; /* Current state the pan/zoom UI is in. */ private PanZoomState mState; + /* Whether or not to wait for a double-tap before dispatching a single-tap */ + private boolean mWaitForDoubleTap; public JavaPanZoomController(PanZoomTarget target) { mTarget = target; @@ -865,6 +867,7 @@ public class JavaPanZoomController mTarget.setViewportMetrics(viewportMetrics); } + @Override public boolean getRedrawHint() { switch (mState) { case PINCHING: @@ -881,18 +884,41 @@ public class JavaPanZoomController } @Override + public boolean onDown(MotionEvent motionEvent) { + mWaitForDoubleTap = mTarget.getZoomConstraints().getAllowDoubleTapZoom(); + return false; + } + + @Override + public void onShowPress(MotionEvent motionEvent) { + // If we get this, it will be followed either by a call to + // onSingleTapUp (if the user lifts their finger before the + // long-press timeout) or a call to onLongPress (if the user + // does not). In the former case, we want to make sure it is + // treated as a click. (Note that if this is called, we will + // not get a call to onDoubleTap). + mWaitForDoubleTap = false; + } + + @Override public void onLongPress(MotionEvent motionEvent) { } @Override public boolean onSingleTapUp(MotionEvent motionEvent) { - // When zooming is enabled, wait to see if there's a double-tap. + // When double-tapping is allowed, we have to wait to see if this is + // going to be a double-tap. + if (!mWaitForDoubleTap) { + } + // return false because we still want to get the ACTION_UP event that triggers this return false; } @Override public boolean onSingleTapConfirmed(MotionEvent motionEvent) { - // When zooming is disabled, we handle this in onSingleTapUp. + // In cases where we don't wait for double-tap, we handle this in onSingleTapUp. + if (mWaitForDoubleTap) { + } return true; } @@ -938,8 +964,8 @@ public class JavaPanZoomController ImmutableViewportMetrics finalMetrics = getMetrics(); finalMetrics = finalMetrics.setViewportOrigin( - zoomToRect.left * finalMetrics.zoomFactor, - zoomToRect.top * finalMetrics.zoomFactor); + zoomToRect.left * finalMetrics.zoomFactor, + zoomToRect.top * finalMetrics.zoomFactor); finalMetrics = finalMetrics.scaleTo(finalZoom, new PointF(0.0f, 0.0f)); // 2. now run getValidViewportMetrics on it, so that the target viewport is @@ -951,16 +977,19 @@ public class JavaPanZoomController } /** This function must be called from the UI thread. */ + @Override public void abortPanning() { checkMainThread(); bounce(); } + @Override public void setOverScrollMode(int overscrollMode) { mX.setOverScrollMode(overscrollMode); mY.setOverScrollMode(overscrollMode); } + @Override public int getOverScrollMode() { return mX.getOverScrollMode(); } |