| Index: content/public/android/java/src/org/chromium/content/browser/LongPressDetector.java
|
| diff --git a/content/public/android/java/src/org/chromium/content/browser/LongPressDetector.java b/content/public/android/java/src/org/chromium/content/browser/LongPressDetector.java
|
| deleted file mode 100644
|
| index 391441ecfa32458a0b3101e0c64425debb3f5997..0000000000000000000000000000000000000000
|
| --- a/content/public/android/java/src/org/chromium/content/browser/LongPressDetector.java
|
| +++ /dev/null
|
| @@ -1,166 +0,0 @@
|
| -// Copyright 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -package org.chromium.content.browser;
|
| -
|
| -import android.content.Context;
|
| -import android.os.Handler;
|
| -import android.os.Message;
|
| -import android.view.MotionEvent;
|
| -import android.view.ViewConfiguration;
|
| -
|
| -import java.util.Iterator;
|
| -
|
| -/**
|
| - * This class controls long press timers and is owned by a ContentViewGestureHandler.
|
| - *
|
| - * For instance, we may receive a DOWN then UP, so we may need to cancel the
|
| - * timer before the UP completes its roundtrip from WebKit.
|
| - */
|
| -class LongPressDetector {
|
| - private MotionEvent mCurrentDownEvent;
|
| - private final LongPressDelegate mLongPressDelegate;
|
| - private final Handler mLongPressHandler;
|
| - private final int mTouchSlopSquare;
|
| - private boolean mInLongPress;
|
| -
|
| - private static final int LONG_PRESS = 2;
|
| -
|
| - private static final int LONGPRESS_TIMEOUT = ViewConfiguration.getLongPressTimeout();
|
| - private static final int TAP_TIMEOUT = ViewConfiguration.getTapTimeout();
|
| -
|
| - LongPressDetector(Context context, LongPressDelegate delegate) {
|
| - mLongPressDelegate = delegate;
|
| - mLongPressHandler = new LongPressHandler();
|
| - final ViewConfiguration configuration = ViewConfiguration.get(context);
|
| - int touchSlop = configuration.getScaledTouchSlop();
|
| - mTouchSlopSquare = touchSlop * touchSlop;
|
| - }
|
| -
|
| - private class LongPressHandler extends Handler {
|
| - LongPressHandler() {
|
| - super();
|
| - }
|
| -
|
| - @Override
|
| - public void handleMessage(Message msg) {
|
| - switch (msg.what) {
|
| - case LONG_PRESS:
|
| - dispatchLongPress();
|
| - break;
|
| - default:
|
| - throw new RuntimeException("Unknown message " + msg); // never
|
| - }
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * This is an interface to execute the LongPress when it receives the onLongPress message.
|
| - */
|
| - interface LongPressDelegate {
|
| - /**
|
| - * @param event The event will be recycled after this call has returned.
|
| - */
|
| - public void onLongPress(MotionEvent event);
|
| - }
|
| -
|
| - private static long calculateLongPressTimeoutTime(MotionEvent ev) {
|
| - // Using getEventTime instead of getDownTime since for Android WebView,
|
| - // event stream can be arbitrarily delayed.
|
| - return ev.getEventTime() + TAP_TIMEOUT + LONGPRESS_TIMEOUT;
|
| - }
|
| -
|
| - /**
|
| - * Initiates a LONG_PRESS gesture timer if needed.
|
| - */
|
| - void startLongPressTimerIfNeeded(MotionEvent ev) {
|
| - if (ev.getAction() != MotionEvent.ACTION_DOWN) return;
|
| -
|
| - // If there is a current down, we do not expect another down event before
|
| - // receiving an up event
|
| - if (mCurrentDownEvent != null) return;
|
| -
|
| - mCurrentDownEvent = MotionEvent.obtain(ev);
|
| - mLongPressHandler.sendEmptyMessageAtTime(LONG_PRESS,
|
| - calculateLongPressTimeoutTime(mCurrentDownEvent));
|
| - mInLongPress = false;
|
| - }
|
| -
|
| - // Cancel LONG_PRESS timers.
|
| - void cancelLongPressIfNeeded(MotionEvent ev) {
|
| - if (!hasPendingMessage() ||
|
| - mCurrentDownEvent == null || ev.getDownTime() != mCurrentDownEvent.getDownTime()) {
|
| - return;
|
| - }
|
| - final int action = ev.getAction();
|
| - final float y = ev.getY();
|
| - final float x = ev.getX();
|
| - switch (action & MotionEvent.ACTION_MASK) {
|
| - case MotionEvent.ACTION_MOVE:
|
| - final int deltaX = (int) (x - mCurrentDownEvent.getX());
|
| - final int deltaY = (int) (y - mCurrentDownEvent.getY());
|
| - int distance = (deltaX * deltaX) + (deltaY * deltaY);
|
| - if (distance > mTouchSlopSquare) {
|
| - cancelLongPress();
|
| - }
|
| - break;
|
| - case MotionEvent.ACTION_UP:
|
| - case MotionEvent.ACTION_CANCEL:
|
| - if (calculateLongPressTimeoutTime(mCurrentDownEvent) > ev.getEventTime()) {
|
| - cancelLongPress();
|
| - }
|
| - break;
|
| - default:
|
| - break;
|
| - }
|
| - }
|
| -
|
| - // Given a stream of pending events, cancel the LONG_PRESS timer if appropriate.
|
| - void cancelLongPressIfNeeded(Iterator<MotionEvent> pendingEvents) {
|
| - if (mCurrentDownEvent == null)
|
| - return;
|
| - long currentDownTime = mCurrentDownEvent.getDownTime();
|
| - while (pendingEvents.hasNext()) {
|
| - MotionEvent pending = pendingEvents.next();
|
| - if (pending.getDownTime() != currentDownTime) {
|
| - break;
|
| - }
|
| - cancelLongPressIfNeeded(pending);
|
| - }
|
| - }
|
| -
|
| - void cancelLongPress() {
|
| - mInLongPress = false;
|
| - if (hasPendingMessage()) {
|
| - mLongPressHandler.removeMessages(LONG_PRESS);
|
| - mCurrentDownEvent.recycle();
|
| - mCurrentDownEvent = null;
|
| - }
|
| - }
|
| -
|
| - // Used this to check if a onSingleTapUp is part of a long press event.
|
| - boolean isInLongPress() {
|
| - return mInLongPress;
|
| - }
|
| -
|
| - private void dispatchLongPress() {
|
| - mInLongPress = true;
|
| - mLongPressDelegate.onLongPress(mCurrentDownEvent);
|
| - mCurrentDownEvent.recycle();
|
| - mCurrentDownEvent = null;
|
| - }
|
| -
|
| - boolean hasPendingMessage() {
|
| - return mCurrentDownEvent != null;
|
| - }
|
| -
|
| - /**
|
| - * This is for testing only.
|
| - * Sends a LongPress gesture. This should always be called after a down event.
|
| - */
|
| - void sendLongPressGestureForTest() {
|
| - if (mCurrentDownEvent == null) return;
|
| - dispatchLongPress();
|
| - }
|
| -}
|
|
|