import android.app.Activity;
import android.content.res.Resources;
import android.graphics.Rect;
+import android.view.GestureDetector;
+import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageButton;
import android.widget.ListView;
import org.chromium.chrome.R;
+import org.chromium.chrome.browser.UmaBridge;
import java.util.ArrayList;
private volatile float mLastTouchX;
private volatile float mLastTouchY;
private final int mItemRowHeight;
+ private boolean mIsSingleTapUpHappened;
+ GestureDetector mGestureSingleTapDetector;
// These are used in a function locally, but defined here to avoid heap allocation on every
// touch event.
}
}
});
+ mGestureSingleTapDetector = new GestureDetector(activity, new SimpleOnGestureListener() {
+ @Override
+ public boolean onSingleTapUp(MotionEvent e) {
+ mIsSingleTapUpHappened = true;
+ return true;
+ }
+ });
}
/**
mDragScrollOffset = 0.0f;
mDragScrollOffsetRounded = 0;
mDragScrollingVelocity = 0.0f;
+ mIsSingleTapUpHappened = false;
if (startDragging) mDragScrolling.start();
}
- void onDismiss() {
+ /**
+ * Dragging mode will be stopped by calling this function. Note that it will fall back to normal
+ * non-dragging mode.
+ */
+ void finishDragging() {
+ menuItemAction(0, 0, ITEM_ACTION_CLEAR_HIGHLIGHT_ALL);
mDragScrolling.cancel();
}
return true;
}
+ if (!mIsSingleTapUpHappened) {
+ mGestureSingleTapDetector.onTouchEvent(event);
+ if (mIsSingleTapUpHappened) {
+ UmaBridge.usingMenu(false, false);
+ finishDragging();
+ }
+ }
+
// After this line, drag scrolling is happening.
if (!mDragScrolling.isRunning()) return false;
didPerformClick = menuItemAction(roundedRawX, roundedRawY, itemAction);
if (eventActionMasked == MotionEvent.ACTION_UP && !didPerformClick) {
+ UmaBridge.usingMenu(false, true);
mAppMenu.dismiss();
} else if (eventActionMasked == MotionEvent.ACTION_MOVE) {
// Auto scrolling on the top or the bottom of the listView.
break;
case ITEM_ACTION_PERFORM:
if (shouldPerform) {
+ UmaBridge.usingMenu(false, true);
itemView.performClick();
didPerformClick = true;
}