package com.fsck.k9.view;
import android.content.Context;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.widget.ScrollView;
public class ToggleScrollView extends ScrollView
{
private GestureDetector mDetector;
private boolean mScrolling = true;
public ToggleScrollView(Context context, AttributeSet attrs)
{
super(context, attrs);
mDetector = new GestureDetector(new YScrollDetector());
}
public void setScrolling(boolean enable)
{
mScrolling = enable;
}
@Override
public boolean onTouchEvent(MotionEvent ev)
{
return (mScrolling) ? super.onTouchEvent(ev) : true;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev)
{
if(!mScrolling)
{
return false;
}
// This doesn't quite get us to diagonal scrolling, but it's somewhat better than what we've
// currently got. This is based on
// http://stackoverflow.com/questions/2646028/android-horizontalscrollview-within-scrollview-touch-handling
boolean result = super.onInterceptTouchEvent(ev);
if (mDetector.onTouchEvent(ev))
{
return result;
}
return false;
}
// Return false if we're scrolling in the x direction
class YScrollDetector extends GestureDetector.SimpleOnGestureListener
{
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
{
try
{
if (Math.abs(distanceY) > Math.abs(distanceX))
{
return true;
}
else
{
return false;
}
}
catch (Exception e)
{
// nothing
}
return false;
}
}
}