package com.handmark.pulltorefresh.library;

import android.annotation.TargetApi;
import android.content.Context;
import android.os.Build.VERSION;
import android.os.Build.VERSION_CODES;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ScrollView;

public class PullToRefreshScrollView extends PullToRefreshBase<ScrollView> {

	public PullToRefreshScrollView(Context context, AttributeSet attrs) {
		super(context, attrs);
	}

	@Override
	protected ScrollView createRefreshableView(Context context, AttributeSet attrs) {
		ScrollView scrollView;
		if (VERSION.SDK_INT >= VERSION_CODES.GINGERBREAD) {
			scrollView = new InternalScrollViewSDK9(context, attrs);
		} else {
			scrollView = new ScrollView(context, attrs);
		}

		scrollView.setId(R.id.scrollview);
		return scrollView;
	}

	@Override
	protected boolean isReadyForPullDown() {
		return mRefreshableView.getScrollY() == 0;
	}

	@Override
	protected boolean isReadyForPullUp() {
		View scrollViewChild = mRefreshableView.getChildAt(0);
		if (null != scrollViewChild) {
			return mRefreshableView.getScrollY() >= (scrollViewChild.getHeight() - getHeight());
		}
		return false;
	}

	@TargetApi(9)
	final class InternalScrollViewSDK9 extends ScrollView {

		public InternalScrollViewSDK9(Context context, AttributeSet attrs) {
			super(context, attrs);
		}

		@Override
		protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX,
				int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) {

			final boolean returnValue = super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX,
					scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent);

			// Does all of the hard work...
			OverscrollHelper.overScrollBy(PullToRefreshScrollView.this, deltaY, scrollY, isTouchEvent);

			return returnValue;
		}
	}
}

@@ -57,132 +57,23 @@
 oid.
-annotation.TargetApi;%0Aimport android.content.Context;%0Aimport android.os.Build.VERSION;%0Aimport android.os.Build.VERSION_CODES
+content.Context
 ;%0Aim
@@ -454,148 +454,8 @@
 iew 
-scrollView;%0A%09%09if (VERSION.SDK_INT %3E= VERSION_CODES.GINGERBREAD) %7B%0A%09%09%09scrollView = new InternalScrollViewSDK9(context, attrs);%0A%09%09%7D else %7B%0A%09%09%09
 scro
@@ -495,21 +495,16 @@
 attrs);%0A
-%09%09%7D%0A%0A
 %09%09scroll
@@ -892,16 +892,16 @@
 ));%0A%09%09%7D%0A
+
 %09%09return
@@ -914,709 +914,7 @@
 ;%0A%09%7D
-%0A%0A%09@TargetApi(9)%0A%09final class InternalScrollViewSDK9 extends ScrollView %7B%0A%0A%09%09public InternalScrollViewSDK9(Context context, AttributeSet attrs) %7B%0A%09%09%09super(context, attrs);%0A%09%09%7D%0A%0A%09%09@Override%0A%09%09protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX,%0A%09%09%09%09int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) %7B%0A%0A%09%09%09final boolean returnValue = super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX,%0A%09%09%09%09%09scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent);%0A%0A%09%09%09// Does all of the hard work...%0A%09%09%09OverscrollHelper.overScrollBy(PullToRefreshScrollView.this, deltaY, scrollY, isTouchEvent);%0A%0A%09%09%09return returnValue;%0A%09%09%7D%0A%09%7D
 %0A%7D%0A

Disable Overscroll on ScrollView as it seems to be broken.