package org.wikipedia.views;
import android.support.v7.widget.RecyclerView;
import android.view.MotionEvent;
import android.view.ViewConfiguration;
public class DontInterceptTouchListener implements RecyclerView.OnItemTouchListener {
private int pointerId = Integer.MIN_VALUE;
private float x = Float.MIN_VALUE;
private float y = Float.MIN_VALUE;
private boolean disallowInterception;
@Override public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent event) {
int action = event.getActionMasked();
switch(action) {
case MotionEvent.ACTION_DOWN:
pointerId = event.getPointerId(0);
x = event.getX();
y = event.getY();
break;
case MotionEvent.ACTION_MOVE:
if (disallowInterception) {
break;
}
int pointerIndex = event.findPointerIndex(pointerId);
if (pointerIndex < 0) {
view.getParent().requestDisallowInterceptTouchEvent(false);
break;
}
float dy = Math.abs(y - event.getY(pointerIndex));
float dx = Math.abs(x - event.getX(pointerIndex));
int slop = ViewConfiguration.get(view.getContext()).getScaledTouchSlop();
if (dx > slop) {
disallowInterception = true;
} else if (dy > slop) {
view.getParent().requestDisallowInterceptTouchEvent(false);
break;
}
view.getParent().requestDisallowInterceptTouchEvent(true);
break;
default:
this.pointerId = Integer.MIN_VALUE;
x = Float.MIN_VALUE;
y = Float.MIN_VALUE;
disallowInterception = false;
break;
}
return false;
}
@Override public void onTouchEvent(RecyclerView view, MotionEvent event) { }
@Override public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { }
}