summaryrefslogtreecommitdiffstats
path: root/chrome/android/java
diff options
context:
space:
mode:
authorkkimlabs@chromium.org <kkimlabs@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-06 11:05:29 +0000
committerkkimlabs@chromium.org <kkimlabs@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-06 11:05:29 +0000
commitd01f368a1205596388944a390de2ad164a5236d9 (patch)
tree5c8508087f539b3de55ce66ab6d7a21b61f72dc3 /chrome/android/java
parent85317221846383152ae0b698a176e797358f7375 (diff)
downloadchromium_src-d01f368a1205596388944a390de2ad164a5236d9.zip
chromium_src-d01f368a1205596388944a390de2ad164a5236d9.tar.gz
chromium_src-d01f368a1205596388944a390de2ad164a5236d9.tar.bz2
[Android] Remove hardware menu button dragging support.
This code path was broken sometime within a year, and we don't think it's worth to support this more. BUG=366154 Review URL: https://codereview.chromium.org/317083005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@275395 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/android/java')
-rw-r--r--chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuDragHelper.java240
-rw-r--r--chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuHandler.java15
2 files changed, 22 insertions, 233 deletions
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuDragHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuDragHelper.java
index 47c3442..74da070 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuDragHelper.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuDragHelper.java
@@ -8,24 +8,15 @@ import android.animation.TimeAnimator;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.res.Resources;
-import android.graphics.Point;
import android.graphics.Rect;
-import android.os.SystemClock;
-import android.util.Log;
-import android.view.Display;
import android.view.MotionEvent;
-import android.view.Surface;
import android.view.View;
-import android.view.View.OnTouchListener;
-import android.view.ViewConfiguration;
-import android.view.ViewParent;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.ListPopupWindow;
import android.widget.ListView;
import org.chromium.chrome.R;
-import org.chromium.chrome.browser.UmaBridge;
import java.util.ArrayList;
@@ -37,8 +28,6 @@ import java.util.ArrayList;
*/
@SuppressLint("NewApi")
class AppMenuDragHelper {
- private static final String TAG = "AppMenuDragHelper";
-
private final Activity mActivity;
private final AppMenu mAppMenu;
@@ -48,28 +37,15 @@ class AppMenuDragHelper {
private static final int ITEM_ACTION_CLEAR_HIGHLIGHT_ALL = 2;
private static final float AUTO_SCROLL_AREA_MAX_RATIO = 0.25f;
- private static final int EDGE_SWIPE_IN_ADDITIONAL_SLOP_TIME_MS = 500;
// Dragging related variables, i.e., menu showing initiated by touch down and drag to navigate.
private final float mAutoScrollFullVelocity;
- private final int mEdgeSwipeInSlop;
- private final int mEdgeSwipeInAdditionalSlop;
- private final int mEdgeSwipeOutSlop;
- private int mScaledTouchSlop;
- private long mHardwareMenuButtonUpTime;
- private boolean mDragPending;
private final TimeAnimator mDragScrolling = new TimeAnimator();
private float mDragScrollOffset;
private int mDragScrollOffsetRounded;
private volatile float mDragScrollingVelocity;
private volatile float mLastTouchX;
private volatile float mLastTouchY;
- private float mTopTouchMovedBound;
- private float mBottomTouchMovedBound;
- private boolean mIsDownScrollable;
- private boolean mIsUpScrollable;
- private boolean mIsByHardwareButton;
- private int mCurrentScreenRotation = -1;
private final int mItemRowHeight;
// These are used in a function locally, but defined here to avoid heap allocation on every
@@ -77,28 +53,12 @@ class AppMenuDragHelper {
private final Rect mScreenVisibleRect = new Rect();
private final int[] mScreenVisiblePoint = new int[2];
- // Sub-UI-controls, backward, forward, bookmark and listView, are getting a touch event first
- // if the app menu is initiated by hardware menu button. For those cases, we need to
- // conditionally forward the touch event to our drag scrolling method.
- private final OnTouchListener mDragScrollTouchEventForwarder = new OnTouchListener() {
- @Override
- public boolean onTouch(View view, MotionEvent event) {
- return handleDragging(event);
- }
- };
-
AppMenuDragHelper(Activity activity, AppMenu appMenu, int itemRowHeight) {
mActivity = activity;
mAppMenu = appMenu;
mItemRowHeight = itemRowHeight;
- mScaledTouchSlop = ViewConfiguration.get(
- mActivity.getApplicationContext()).getScaledTouchSlop();
Resources res = mActivity.getResources();
mAutoScrollFullVelocity = res.getDimensionPixelSize(R.dimen.auto_scroll_full_velocity);
- mEdgeSwipeInSlop = res.getDimensionPixelSize(R.dimen.edge_swipe_in_slop);
- mEdgeSwipeInAdditionalSlop = res.getDimensionPixelSize(
- R.dimen.edge_swipe_in_additional_slop);
- mEdgeSwipeOutSlop = res.getDimensionPixelSize(R.dimen.edge_swipe_out_slop);
// If user is dragging and the popup ListView is too big to display at once,
// mDragScrolling animator scrolls mPopup.getListView() automatically depending on
// the user's touch position.
@@ -118,10 +78,8 @@ class AppMenuDragHelper {
// Force touch move event to highlight items correctly for the scrolled position.
if (!Float.isNaN(mLastTouchX) && !Float.isNaN(mLastTouchY)) {
- int actionToPerform = isInSwipeOutRegion(mLastTouchX, mLastTouchY) ?
- ITEM_ACTION_CLEAR_HIGHLIGHT_ALL : ITEM_ACTION_HIGHLIGHT;
menuItemAction(Math.round(mLastTouchX), Math.round(mLastTouchY),
- actionToPerform);
+ ITEM_ACTION_HIGHLIGHT);
}
}
});
@@ -129,46 +87,19 @@ class AppMenuDragHelper {
/**
* Sets up all the internal state to prepare for menu dragging.
- *
- * @param isByHardwareButton Whether or not hardware button triggered it. (oppose to software
- * button)
* @param startDragging Whether dragging is started. For example, if the app menu
* is showed by tapping on a button, this should be false. If it is
* showed by start dragging down on the menu button, this should be
- * true. Note that if isByHardwareButton is true, this is ignored.
+ * true.
*/
- void onShow(boolean isByHardwareButton, boolean startDragging) {
- mCurrentScreenRotation = mActivity.getWindowManager().getDefaultDisplay().getRotation();
+ void onShow(boolean startDragging) {
mLastTouchX = Float.NaN;
mLastTouchY = Float.NaN;
mDragScrollOffset = 0.0f;
mDragScrollOffsetRounded = 0;
mDragScrollingVelocity = 0.0f;
- mIsByHardwareButton = isByHardwareButton;
- mDragPending = isByHardwareButton;
- mIsDownScrollable = !isByHardwareButton;
- mIsUpScrollable = !isByHardwareButton;
-
- mTopTouchMovedBound = Float.POSITIVE_INFINITY;
- mBottomTouchMovedBound = Float.NEGATIVE_INFINITY;
- mHardwareMenuButtonUpTime = -1;
-
- ListPopupWindow popup = mAppMenu.getPopup();
- popup.getListView().setOnTouchListener(mDragScrollTouchEventForwarder);
-
- // We assume that the parent of popup ListView is an instance of View. Otherwise, dragging
- // from a hardware menu button won't work.
- ViewParent listViewParent = popup.getListView().getParent();
- if (listViewParent instanceof View) {
- ((View) listViewParent).setOnTouchListener(mDragScrollTouchEventForwarder);
- } else {
- assert false;
- }
-
-
-
- if (!isByHardwareButton && startDragging) mDragScrolling.start();
+ if (startDragging) mDragScrolling.start();
}
void onDismiss() {
@@ -176,17 +107,6 @@ class AppMenuDragHelper {
}
/**
- * This is a hint for adjusting edgeSwipeInSlop. For example. If the touch event started
- * immediately after hardware menu button up, then we use larger edgeSwipeInSlop because it
- * implies user is swiping in fast.
- */
- public void hardwareMenuButtonUp() {
- // There should be only one time hardware menu button up.
- assert mHardwareMenuButtonUpTime == -1;
- mHardwareMenuButtonUpTime = SystemClock.uptimeMillis();
- }
-
- /**
* Gets all the touch events and updates dragging related logic. Note that if this app menu
* is initiated by software UI control, then the control should set onTouchListener and forward
* all the events to this method because the initial UI control that processed ACTION_DOWN will
@@ -196,7 +116,7 @@ class AppMenuDragHelper {
* @return Whether the event is handled.
*/
boolean handleDragging(MotionEvent event) {
- if (!mAppMenu.isShowing() || (!mDragPending && !mDragScrolling.isRunning())) return false;
+ if (!mAppMenu.isShowing() || !mDragScrolling.isRunning()) return false;
// We will only use the screen space coordinate (rawX, rawY) to reduce confusion.
// This code works across many different controls, so using local coordinates will be
@@ -212,60 +132,26 @@ class AppMenuDragHelper {
mLastTouchX = rawX;
mLastTouchY = rawY;
- // Because (hardware) menu button can be right or left side of the screen, if we just
- // trigger auto scrolling based on Y inside the listView, it might be scrolled
- // unintentionally. Therefore, we will require touch position to move up or down a certain
- // amount of distance to trigger auto scrolling up or down.
- mTopTouchMovedBound = Math.min(mTopTouchMovedBound, rawY);
- mBottomTouchMovedBound = Math.max(mBottomTouchMovedBound, rawY);
- if (rawY <= mBottomTouchMovedBound - mScaledTouchSlop) {
- mIsUpScrollable = true;
- }
- if (rawY >= mTopTouchMovedBound + mScaledTouchSlop) {
- mIsDownScrollable = true;
- }
-
if (eventActionMasked == MotionEvent.ACTION_CANCEL) {
mAppMenu.dismiss();
return true;
}
- if (eventActionMasked == MotionEvent.ACTION_DOWN) {
- assert mIsByHardwareButton != mDragScrolling.isStarted();
- if (mIsByHardwareButton) {
- if (mDragPending && getDistanceFromHardwareMenuButtonSideEdge(rawX, rawY) <
- getEdgeSwipeInSlop(event)) {
- mDragScrolling.start();
- mDragPending = false;
- UmaBridge.usingMenu(true, true);
- } else {
- if (!getScreenVisibleRect(listView).contains(roundedRawX, roundedRawY)) {
- mAppMenu.dismiss();
- }
- mDragPending = false;
- UmaBridge.usingMenu(true, false);
- return false;
- }
- }
- }
-
// After this line, drag scrolling is happening.
if (!mDragScrolling.isRunning()) return false;
boolean didPerformClick = false;
int itemAction = ITEM_ACTION_CLEAR_HIGHLIGHT_ALL;
- if (!isInSwipeOutRegion(rawX, rawY)) {
- switch (eventActionMasked) {
- case MotionEvent.ACTION_DOWN:
- case MotionEvent.ACTION_MOVE:
- itemAction = ITEM_ACTION_HIGHLIGHT;
- break;
- case MotionEvent.ACTION_UP:
- itemAction = ITEM_ACTION_PERFORM;
- break;
- default:
- break;
- }
+ switch (eventActionMasked) {
+ case MotionEvent.ACTION_DOWN:
+ case MotionEvent.ACTION_MOVE:
+ itemAction = ITEM_ACTION_HIGHLIGHT;
+ break;
+ case MotionEvent.ACTION_UP:
+ itemAction = ITEM_ACTION_PERFORM;
+ break;
+ default:
+ break;
}
didPerformClick = menuItemAction(roundedRawX, roundedRawY, itemAction);
@@ -278,11 +164,11 @@ class AppMenuDragHelper {
mItemRowHeight * 1.2f / listView.getHeight());
float normalizedY =
(rawY - getScreenVisibleRect(listView).top) / listView.getHeight();
- if (mIsUpScrollable && normalizedY < autoScrollAreaRatio) {
+ if (normalizedY < autoScrollAreaRatio) {
// Top
mDragScrollingVelocity = (normalizedY / autoScrollAreaRatio - 1.0f)
* mAutoScrollFullVelocity;
- } else if (mIsDownScrollable && normalizedY > 1.0f - autoScrollAreaRatio) {
+ } else if (normalizedY > 1.0f - autoScrollAreaRatio) {
// Bottom
mDragScrollingVelocity = ((normalizedY - 1.0f) / autoScrollAreaRatio + 1.0f)
* mAutoScrollFullVelocity;
@@ -297,33 +183,6 @@ class AppMenuDragHelper {
}
/**
- * @return Whether or not the position should be considered swiping-out, if ACTION_UP happens
- * at the position.
- */
- private boolean isInSwipeOutRegion(float rawX, float rawY) {
- return getShortestDistanceFromEdge(rawX, rawY) < mEdgeSwipeOutSlop;
- }
-
- /**
- * @return The shortest distance from the screen edges for the given position rawX, rawY
- * in screen coordinates.
- */
- private float getShortestDistanceFromEdge(float rawX, float rawY) {
- Display display = mActivity.getWindowManager().getDefaultDisplay();
- Point displaySize = new Point();
- display.getSize(displaySize);
-
- float distance = Math.min(
- Math.min(rawY, displaySize.y - rawY - 1),
- Math.min(rawX, displaySize.x - rawX - 1));
- if (distance < 0.0f) {
- Log.d(TAG, "Received touch event out of the screen edge boundary. distance = " +
- distance);
- }
- return Math.abs(distance);
- }
-
- /**
* Performs the specified action on the menu item specified by the screen coordinate position.
* @param screenX X in screen space coordinate.
* @param screenY Y in screen space coordinate.
@@ -375,43 +234,6 @@ class AppMenuDragHelper {
}
/**
- * @return The distance from the screen edge that is likely where the hardware menu button is
- * located at. We assume the hardware menu button is at the bottom in the default,
- * ROTATION_0, rotation. Note that there is a bug filed for Android API to request
- * hardware menu button position b/10007237.
- */
- private float getDistanceFromHardwareMenuButtonSideEdge(float rawX, float rawY) {
- Display display = mActivity.getWindowManager().getDefaultDisplay();
- Point displaySize = new Point();
- display.getSize(displaySize);
-
- float distance;
- switch (mCurrentScreenRotation) {
- case Surface.ROTATION_0:
- distance = displaySize.y - rawY - 1;
- break;
- case Surface.ROTATION_180:
- distance = rawY;
- break;
- case Surface.ROTATION_90:
- distance = displaySize.x - rawX - 1;
- break;
- case Surface.ROTATION_270:
- distance = rawX;
- break;
- default:
- distance = 0.0f;
- assert false;
- break;
- }
- if (distance < 0.0f) {
- Log.d(TAG, "Received touch event out of hardware menu button side edge boundary." +
- " distance = " + distance);
- }
- return Math.abs(distance);
- }
-
- /**
* @return Visible rect in screen coordinates for the given View.
*/
private Rect getScreenVisibleRect(View view) {
@@ -420,32 +242,4 @@ class AppMenuDragHelper {
mScreenVisibleRect.offset(mScreenVisiblePoint[0], mScreenVisiblePoint[1]);
return mScreenVisibleRect;
}
-
- /**
- * Computes Edge-swipe-in-slop and returns it.
- *
- * When user swipes in from a hardware menu button, because the swiping-in touch event doesn't
- * necessarily start form the exact edge, we should also consider slightly more inside touch
- * event as swiping-in. This value, Edge-swipe-in-slop, is the threshold distance from the
- * edge that separates swiping-in and normal touch.
- *
- * @param event Touch event that eventually made this call.
- * @return Edge-swipe-in-slop.
- */
- private float getEdgeSwipeInSlop(MotionEvent event) {
- float edgeSwipeInSlope = mEdgeSwipeInSlop;
- if (mHardwareMenuButtonUpTime == -1) {
- // Hardware menu hasn't even had UP event yet. That means, user is swiping in really
- // really fast. So use large edgeSwipeInSlope.
- edgeSwipeInSlope += mEdgeSwipeInAdditionalSlop;
- } else {
- // If it's right after we had hardware menu button UP event, use large edgeSwipeInSlop,
- // Otherwise, use small edgeSwipeInSlop.
- float additionalEdgeSwipeInSlop = ((mHardwareMenuButtonUpTime - event.getEventTime()
- + EDGE_SWIPE_IN_ADDITIONAL_SLOP_TIME_MS) * 0.001f)
- * mEdgeSwipeInAdditionalSlop;
- edgeSwipeInSlope += Math.max(0.0f, additionalEdgeSwipeInSlop);
- }
- return edgeSwipeInSlope;
- }
}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuHandler.java
index 0091e45..0a08ad4 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuHandler.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuHandler.java
@@ -57,12 +57,14 @@ public class AppMenuHandler {
* @param startDragging Whether dragging is started. For example, if the app menu is
* showed by tapping on a button, this should be false. If it is
* showed by start dragging down on the menu button, this should
- * be true. Note that if isByHardwareButton is true, this is
- * ignored.
+ * be true. Note that if isByHardwareButton is true, this must
+ * be false since we no longer support hardware menu button
+ * dragging.
* @return True, if the menu is shown, false, if menu is not shown, example reasons:
* the menu is not yet available to be shown, or the menu is already showing.
*/
public boolean showAppMenu(View anchorView, boolean isByHardwareButton, boolean startDragging) {
+ assert !(isByHardwareButton && startDragging);
if (!mDelegate.shouldShowAppMenu() || isAppMenuShowing()) return false;
if (mMenu == null) {
@@ -93,7 +95,7 @@ public class AppMenuHandler {
mActivity.getWindow().getDecorView().getWindowVisibleDisplayFrame(appRect);
int rotation = mActivity.getWindowManager().getDefaultDisplay().getRotation();
mAppMenu.show(wrapper, anchorView, isByHardwareButton, rotation, appRect);
- mAppMenuDragHelper.onShow(isByHardwareButton, startDragging);
+ mAppMenuDragHelper.onShow(startDragging);
UmaBridge.menuShow();
return true;
}
@@ -157,11 +159,4 @@ public class AppMenuHandler {
mObservers.get(i).onMenuVisibilityChanged(isVisible);
}
}
-
- /**
- * TODO(kkimlabs) remove this call.
- */
- public void hardwareMenuButtonUp() {
- if (mAppMenuDragHelper != null) mAppMenuDragHelper.hardwareMenuButtonUp();
- }
}