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