package edu.mit.mitmobile2;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.ScrollView;
public class RefreshableScrollView extends ScrollView {
private final static float MINIMUM_PULL_DISTANCE = 30.0f;
private float mMinimumPullPixels;
private float mInitialY = -1;
private boolean mHandlePullToRefreshTouches = false;
public RefreshableScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initView(context);
}
public RefreshableScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
initView(context);
}
public RefreshableScrollView(Context context) {
super(context);
initView(context);
}
private void initView(Context context) {
mMinimumPullPixels = MINIMUM_PULL_DISTANCE * context.getResources().getDisplayMetrics().density;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
int action = event.getActionMasked();
if ((action == MotionEvent.ACTION_DOWN) || (action == MotionEvent.ACTION_MOVE)) {
if (getScrollY() == 0) {
if (mInitialY < 0) {
mInitialY = event.getY();
} else {
if (event.getY() - mInitialY > mMinimumPullPixels) {
mHandlePullToRefreshTouches = true;
return true;
}
}
}
}
return super.onInterceptTouchEvent(event);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (mHandlePullToRefreshTouches) {
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
return true;
default:
mHandlePullToRefreshTouches = false;
mInitialY = -1;
return false;
}
} else {
return super.onTouchEvent(event);
}
}
}