Bug 1046591 - Swiping down from the URL bar will work as long tap
--- a/mobile/android/base/toolbar/BrowserToolbar.java
+++ b/mobile/android/base/toolbar/BrowserToolbar.java
@@ -46,16 +46,17 @@ import android.graphics.drawable.StateLi
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.MenuInflater;
import android.view.MotionEvent;
import android.view.View;
+import android.view.ViewConfiguration;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
/**
* {@code BrowserToolbar} is single entry point for users of the toolbar
@@ -137,16 +138,20 @@ public abstract class BrowserToolbar ext
private final Paint shadowPaint;
private final int shadowColor;
private final int shadowPrivateColor;
private final int shadowSize;
private final ToolbarPrefs prefs;
private boolean contextMenuEnabled = true;
+ private float mTouchDownX;
+ private float mTouchDownY;
+ private int mTouchSlop;
+
public abstract boolean isAnimating();
protected abstract boolean isTabsButtonOffscreen();
protected abstract void updateNavigationButtons(Tab tab);
protected abstract void triggerStartEditingTransition(PropertyAnimator animator);
protected abstract void triggerStopEditingTransition();
@@ -209,16 +214,18 @@ public abstract class BrowserToolbar ext
shadowPaint.setColor(shadowColor);
shadowPaint.setStrokeWidth(0.0f);
setUIMode(UIMode.DISPLAY);
prefs = new ToolbarPrefs();
urlDisplayLayout.setToolbarPrefs(prefs);
urlEditLayout.setToolbarPrefs(prefs);
+
+ mTouchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop();
}
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
prefs.open();
@@ -377,19 +384,41 @@ public abstract class BrowserToolbar ext
return true;
}
return urlDisplayLayout.dismissSiteIdentityPopup();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
+ // Prevent long clicks after swipe
+ switch (event.getAction()) {
+ case MotionEvent.ACTION_DOWN:
+ mTouchDownX = event.getX();
+ mTouchDownY = event.getY();
+ break;
+ case MotionEvent.ACTION_MOVE:
+ final float x = event.getX();
+ final float y = event.getY();
+ boolean xMoved = Math.abs(mTouchDownX - x) > mTouchSlop;
+ boolean yMoved = Math.abs(mTouchDownY - y) > mTouchSlop;
+
+ if (xMoved || yMoved) {
+ cancelLongPress();
+ }
+ break;
+ }
+
// If the motion event has occurred below the toolbar (due to the scroll
// offset), let it pass through to the page.
if (event != null && event.getY() > getHeight() + ViewHelper.getTranslationY(this)) {
+ // Reset pressed state because we will not call super handler
+ if (event.getAction() == MotionEvent.ACTION_CANCEL || event.getAction() == MotionEvent.ACTION_UP) {
+ setPressed(false);
+ }
return false;
}
return super.onTouchEvent(event);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {