package ar.rulosoft.mimanganu.componentes;
import android.content.Context;
import android.support.v4.view.MotionEventCompat;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import ar.rulosoft.mimanganu.componentes.readers.paged.PagedReader;
import fr.castorflex.android.verticalviewpager.VerticalViewPager;
public class UnScrolledViewPagerVertical extends VerticalViewPager {
static final int MIN_DISTANCE = 200;
static final int MAX_TIME = 200;
long mStartTime;
float mStartDragY;
OnSwipeOutListener mOnSwipeOutListener;
public UnScrolledViewPagerVertical(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setOnSwipeOutListener(OnSwipeOutListener listener) {
mOnSwipeOutListener = listener;
}
private void onSwipeOutAtStart() {
if (mOnSwipeOutListener != null) {
mOnSwipeOutListener.onStartOver();
}
}
private void onSwipeOutAtEnd() {
if (mOnSwipeOutListener != null) {
mOnSwipeOutListener.onEndOver();
}
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction() & MotionEventCompat.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
mStartDragY = ev.getY();
mStartTime = ev.getEventTime();
break;
}
return super.onInterceptTouchEvent(ev);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
if (getCurrentItem() == 0 || getCurrentItem() == getAdapter().getCount() - 1) {
final int action = ev.getAction();
float y = ev.getY();
switch (action & MotionEventCompat.ACTION_MASK) {
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
long mEndTime = ev.getEventTime();
if (Math.abs(y - mStartDragY) > MIN_DISTANCE && (mEndTime - mStartTime) < MAX_TIME) {
if (getCurrentItem() == 0 && y > mStartDragY) {
onSwipeOutAtStart();
return true;
}
if (getCurrentItem() == getAdapter().getCount() - 1 && y < mStartDragY) {
onSwipeOutAtEnd();
return true;
}
}
break;
}
} else {
mStartDragY = 0;
}
return super.onTouchEvent(ev);
}
@Override
protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) {
try {
return ((PagedReader.PageAdapter) getAdapter()).getCurrentPage().canScrollV(dx);
} catch (Exception ignored) {
}
return super.canScroll(v, checkV, dx, x, y);
}
}