jenkins-bot has submitted this change and it was merged.

Change subject: Fix scrolling when tapping and dragging over lead image.
......................................................................


Fix scrolling when tapping and dragging over lead image.

Added a custom OnClickListener (with coordinates) to the actual WebView.
Then, if we detect a click within the logical area of the lead image, then
we can assume that the user intended to click on the lead image. Otherwise
the touch/scroll/etc event will be passed on to the WebView.

Bug: T87128
Change-Id: Ie32524661c4d5408cc17489898074c5bceab33be
---
M wikipedia/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
M wikipedia/src/main/java/org/wikipedia/views/ObservableWebView.java
2 files changed, 55 insertions(+), 29 deletions(-)

Approvals:
  BearND: Looks good to me, approved
  jenkins-bot: Verified



diff --git 
a/wikipedia/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java 
b/wikipedia/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
index 6b23fab..62c3347 100644
--- 
a/wikipedia/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
+++ 
b/wikipedia/src/main/java/org/wikipedia/page/leadimages/LeadImagesHandler.java
@@ -107,7 +107,7 @@
     }
 
     public LeadImagesHandler(final Context context, final 
PageViewFragmentInternal parentFragment,
-                             CommunicationBridge bridge, ObservableWebView 
webview,
+                             CommunicationBridge bridge, final 
ObservableWebView webview,
                              ViewGroup hidingView) {
         this.context = context;
         this.parentFragment = parentFragment;
@@ -136,16 +136,21 @@
                     .getWindowManager().getDefaultDisplay().getHeight() / 
displayDensity);
         }
 
-        image1.setOnClickListener(new View.OnClickListener() {
+        webview.addOnClickListener(new ObservableWebView.OnClickListener() {
             @Override
-            public void onClick(View v) {
-                String imageName = 
parentFragment.getPage().getPageProperties().getLeadImageName();
-                if (imageName == null) {
-                    return;
+            public void onClick(float x, float y) {
+                // if the click event is within the area of the lead image, 
then the user
+                // must have wanted to click on the lead image!
+                if (leadImagesEnabled && y < imageContainer.getHeight() - 
webview.getScrollY()) {
+                    String imageName = 
parentFragment.getPage().getPageProperties()
+                                                     .getLeadImageName();
+                    if (imageName != null) {
+                        PageTitle imageTitle = new PageTitle("File:" + 
imageName,
+                                                             
parentFragment.getTitle()
+                                                                           
.getSite());
+                        parentFragment.showImageGallery(imageTitle);
+                    }
                 }
-                PageTitle imageTitle = new PageTitle("File:" + imageName,
-                                                     
parentFragment.getTitle().getSite());
-                parentFragment.showImageGallery(imageTitle);
             }
         });
 
diff --git a/wikipedia/src/main/java/org/wikipedia/views/ObservableWebView.java 
b/wikipedia/src/main/java/org/wikipedia/views/ObservableWebView.java
index 325ef33..a66c82e 100644
--- a/wikipedia/src/main/java/org/wikipedia/views/ObservableWebView.java
+++ b/wikipedia/src/main/java/org/wikipedia/views/ObservableWebView.java
@@ -3,6 +3,7 @@
 import android.content.Context;
 import android.util.AttributeSet;
 import android.view.MotionEvent;
+import android.view.ViewConfiguration;
 import android.webkit.WebView;
 import org.wikipedia.WikipediaApp;
 import org.wikipedia.events.WebViewInvalidateEvent;
@@ -13,12 +14,20 @@
 public class ObservableWebView extends WebView {
     private static final WebViewInvalidateEvent INVALIDATE_EVENT = new 
WebViewInvalidateEvent();
 
+    private List<OnClickListener> onClickListeners;
     private List<OnScrollChangeListener> onScrollChangeListeners;
     private List<OnDownMotionEventListener> onDownMotionEventListeners;
     private List<OnUpOrCancelMotionEventListener> 
onUpOrCancelMotionEventListeners;
     private List<OnContentHeightChangedListener> 
onContentHeightChangedListeners;
 
     private int contentHeight = 0;
+    private float touchStartX;
+    private float touchStartY;
+    private int touchSlop;
+
+    public void addOnClickListener(OnClickListener onClickListener) {
+        onClickListeners.add(onClickListener);
+    }
 
     public void addOnScrollChangeListener(OnScrollChangeListener 
onScrollChangeListener) {
         onScrollChangeListeners.add(onScrollChangeListener);
@@ -34,6 +43,10 @@
 
     public void 
addOnContentHeightChangedListener(OnContentHeightChangedListener 
onContentHeightChangedListener) {
         onContentHeightChangedListeners.add(onContentHeightChangedListener);
+    }
+
+    public interface OnClickListener {
+        void onClick(float x, float y);
     }
 
     public interface OnScrollChangeListener {
@@ -73,10 +86,12 @@
     }
 
     private void init() {
-        onScrollChangeListeners = new ArrayList<OnScrollChangeListener>();
-        onDownMotionEventListeners = new 
ArrayList<OnDownMotionEventListener>();
-        onUpOrCancelMotionEventListeners = new 
ArrayList<OnUpOrCancelMotionEventListener>();
-        onContentHeightChangedListeners = new 
ArrayList<OnContentHeightChangedListener>();
+        onClickListeners = new ArrayList<>();
+        onScrollChangeListeners = new ArrayList<>();
+        onDownMotionEventListeners = new ArrayList<>();
+        onUpOrCancelMotionEventListeners = new ArrayList<>();
+        onContentHeightChangedListeners = new ArrayList<>();
+        touchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop();
     }
 
     @Override
@@ -89,23 +104,29 @@
 
     @Override
     public boolean onTouchEvent(MotionEvent event) {
-        if (onDownMotionEventListeners.size() > 0 && 
onUpOrCancelMotionEventListeners.size() > 0) {
-            switch (event.getActionMasked()) {
-                case MotionEvent.ACTION_DOWN:
-                    for (OnDownMotionEventListener listener : 
onDownMotionEventListeners) {
-                        listener.onDownMotionEvent();
+        switch (event.getActionMasked()) {
+            case MotionEvent.ACTION_DOWN:
+                for (OnDownMotionEventListener listener : 
onDownMotionEventListeners) {
+                    listener.onDownMotionEvent();
+                }
+                touchStartX = event.getX();
+                touchStartY = event.getY();
+                break;
+            case MotionEvent.ACTION_UP:
+                if (Math.abs(event.getX() - touchStartX) <= touchSlop
+                    && Math.abs(event.getY() - touchStartY) <= touchSlop) {
+                    for (OnClickListener listener : onClickListeners) {
+                        listener.onClick(event.getX(), event.getY());
                     }
-                    break;
-                case MotionEvent.ACTION_UP:
-                case MotionEvent.ACTION_CANCEL:
-                    for (OnUpOrCancelMotionEventListener listener : 
onUpOrCancelMotionEventListeners) {
-                        listener.onUpOrCancelMotionEvent();
-                    }
-                    break;
-                default:
-                    // Do nothing for all the other things
-                    break;
-            }
+                }
+            case MotionEvent.ACTION_CANCEL:
+                for (OnUpOrCancelMotionEventListener listener : 
onUpOrCancelMotionEventListeners) {
+                    listener.onUpOrCancelMotionEvent();
+                }
+                break;
+            default:
+                // Do nothing for all the other things
+                break;
         }
         return super.onTouchEvent(event);
     }

-- 
To view, visit https://gerrit.wikimedia.org/r/190820
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ie32524661c4d5408cc17489898074c5bceab33be
Gerrit-PatchSet: 6
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Dbrant <[email protected]>
Gerrit-Reviewer: BearND <[email protected]>
Gerrit-Reviewer: Brion VIBBER <[email protected]>
Gerrit-Reviewer: Deskana <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to