diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index 9a4713217d..f86cc81f35 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -51,6 +51,7 @@ import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.AnimationUtils; +import android.webkit.WebView; import android.widget.CheckBox; import android.widget.ImageButton; import android.widget.SeekBar; @@ -993,18 +994,39 @@ public class FragmentMessages extends FragmentBase { private SwipeListener swipeListener = new SwipeListener(getContext(), new SwipeListener.ISwipeListener() { @Override - public boolean onSwipeRight() { + public boolean onSwipeRight(MotionEvent me) { + if (inWebView(me)) + return false; if (previous != null) navigate(previous, true); return (previous != null); } @Override - public boolean onSwipeLeft() { + public boolean onSwipeLeft(MotionEvent me) { + if (inWebView(me)) + return false; if (next != null) navigate(next, false); return (next != null); } + + private boolean inWebView(MotionEvent me) { + View parent = rvMessage.findChildViewUnder(me.getX(), me.getY()); + if (parent == null) + return false; + + View child = parent.findViewById(R.id.vwBody); + if (!(child instanceof WebView)) + return false; + + int[] location = new int[2]; + child.getLocationOnScreen(location); + int x = location[0]; + int y = location[1]; + return (me.getRawX() >= x && me.getRawX() <= x + view.getWidth() && + me.getRawY() >= y && me.getRawY() <= y + view.getHeight()); + } }); private void onActionMove(String folderType) { diff --git a/app/src/main/java/eu/faircode/email/SwipeListener.java b/app/src/main/java/eu/faircode/email/SwipeListener.java index f3b177709f..f372bd0c73 100644 --- a/app/src/main/java/eu/faircode/email/SwipeListener.java +++ b/app/src/main/java/eu/faircode/email/SwipeListener.java @@ -27,9 +27,9 @@ public class SwipeListener implements View.OnTouchListener { if (Math.abs(dx) > MOVE_THRESHOLD && Math.abs(vx) > SPEED_THRESHOLD) try { if (dx > 0) - consumed = listener.onSwipeRight(); + consumed = listener.onSwipeRight(me1); else - consumed = listener.onSwipeLeft(); + consumed = listener.onSwipeLeft(me1); } catch (Throwable ex) { Log.e(ex); } @@ -44,8 +44,8 @@ public class SwipeListener implements View.OnTouchListener { } interface ISwipeListener { - boolean onSwipeRight(); + boolean onSwipeRight(MotionEvent me); - boolean onSwipeLeft(); + boolean onSwipeLeft(MotionEvent me); } } \ No newline at end of file