Bug 1046591 - Swiping down from the URL bar will work as long tap draft
authorSergej Kravcenko <sergej@codewaves.com>
Thu, 08 Oct 2015 19:16:33 +0300
changeset 299783 ef95403ad5823f19e4317b81e27d0a2dfdfd12dd
parent 299002 89732fcdb0baca70e8b7a25a2725117113f0db80
child 510028 1fc5ae2ea667469367ce04d19f7cb730931c93f3
push id6239
push usersergej@codewaves.com
push dateThu, 08 Oct 2015 16:20:29 +0000
bugs1046591
milestone44.0a1
Bug 1046591 - Swiping down from the URL bar will work as long tap
mobile/android/base/toolbar/BrowserToolbar.java
--- 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) {