Program: 192487
Project: 192487
Buggy source:
@Override public boolean onInterceptTouchEvent(MotionEvent ev){
  if (!isEnabled()) {
    return false;
  }
  trackVelocity(ev);
  final int action=ev.getAction();
  if (DEBUG_SCALE)   Log.d(TAG,"String_Node_Str" + MotionEvent.actionToString(action) + "String_Node_Str"+ mExpanding+ (0 != (mExpansionStyle & BLINDS) ? "String_Node_Str" : "String_Node_Str")+ (0 != (mExpansionStyle & PULL) ? "String_Node_Str" : "String_Node_Str")+ (0 != (mExpansionStyle & STRETCH) ? "String_Node_Str" : "String_Node_Str"));
  mSGD.onTouchEvent(ev);
  final int x=(int)mSGD.getFocusX();
  final int y=(int)mSGD.getFocusY();
  mInitialTouchFocusY=y;
  mInitialTouchSpan=mSGD.getCurrentSpan();
  mLastFocusY=mInitialTouchFocusY;
  mLastSpanY=mInitialTouchSpan;
  if (DEBUG_SCALE)   Log.d(TAG,"String_Node_Str" + mInitialTouchSpan);
  if (mExpanding) {
    mLastMotionY=ev.getRawY();
    maybeRecycleVelocityTracker(ev);
    return true;
  }
 else {
    if ((action == MotionEvent.ACTION_MOVE) && 0 != (mExpansionStyle & BLINDS)) {
      return true;
    }
switch (action & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_MOVE:
{
        final float xspan=mSGD.getCurrentSpanX();
        if (xspan > mPullGestureMinXSpan && xspan > mSGD.getCurrentSpanY() && !mExpanding) {
          if (DEBUG_SCALE)           Log.v(TAG,"String_Node_Str" + xspan + "String_Node_Str");
          startExpanding(mResizedView,PULL);
          mWatchingForPull=false;
        }
        if (mWatchingForPull) {
          final float yDiff=ev.getRawY() - mInitialTouchY;
          if (yDiff > mTouchSlop) {
            if (DEBUG)             Log.v(TAG,"String_Node_Str" + yDiff + "String_Node_Str");
            mWatchingForPull=false;
            if (mResizedView != null && !isFullyExpanded(mResizedView)) {
              if (startExpanding(mResizedView,BLINDS)) {
                mLastMotionY=ev.getRawY();
                mInitialTouchY=ev.getRawY();
                mHasPopped=false;
              }
            }
          }
        }
        break;
      }
case MotionEvent.ACTION_DOWN:
    mWatchingForPull=mScrollAdapter != null && isInside(mScrollAdapter.getHostView(),x,y) && mScrollAdapter.isScrolledToTop();
  mResizedView=findView(x,y);
if (mResizedView != null && !mCallback.canChildBeExpanded(mResizedView)) {
  mResizedView=null;
  mWatchingForPull=false;
}
mInitialTouchY=ev.getY();
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
if (DEBUG) Log.d(TAG,"String_Node_Str");
finishExpanding(false,getCurrentVelocity());
clearView();
break;
}
mLastMotionY=ev.getRawY();
maybeRecycleVelocityTracker(ev);
return mExpanding;
}
}

Fixed version (ground truth):
@Override public boolean onInterceptTouchEvent(MotionEvent ev){
  if (!isEnabled()) {
    return false;
  }
  trackVelocity(ev);
  final int action=ev.getAction();
  if (DEBUG_SCALE)   Log.d(TAG,"String_Node_Str" + MotionEvent.actionToString(action) + "String_Node_Str"+ mExpanding+ (0 != (mExpansionStyle & BLINDS) ? "String_Node_Str" : "String_Node_Str")+ (0 != (mExpansionStyle & PULL) ? "String_Node_Str" : "String_Node_Str")+ (0 != (mExpansionStyle & STRETCH) ? "String_Node_Str" : "String_Node_Str"));
  mSGD.onTouchEvent(ev);
  final int x=(int)mSGD.getFocusX();
  final int y=(int)mSGD.getFocusY();
  mInitialTouchFocusY=y;
  mInitialTouchSpan=mSGD.getCurrentSpan();
  mLastFocusY=mInitialTouchFocusY;
  mLastSpanY=mInitialTouchSpan;
  if (DEBUG_SCALE)   Log.d(TAG,"String_Node_Str" + mInitialTouchSpan);
  if (mExpanding) {
    mLastMotionY=ev.getRawY();
    maybeRecycleVelocityTracker(ev);
    return true;
  }
 else {
    if ((action == MotionEvent.ACTION_MOVE) && 0 != (mExpansionStyle & BLINDS)) {
      return true;
    }
switch (action & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_MOVE:
{
        final float xspan=mSGD.getCurrentSpanX();
        if (xspan > mPullGestureMinXSpan && xspan > mSGD.getCurrentSpanY() && !mExpanding) {
          if (DEBUG_SCALE)           Log.v(TAG,"String_Node_Str" + xspan + "String_Node_Str");
          startExpanding(mResizedView,PULL);
          mWatchingForPull=false;
        }
        if (mWatchingForPull) {
          final float yDiff=ev.getRawY() - mInitialTouchY;
          final float xDiff=ev.getRawX() - mInitialTouchX;
          if (yDiff > mTouchSlop && yDiff > Math.abs(xDiff)) {
            if (DEBUG)             Log.v(TAG,"String_Node_Str" + yDiff + "String_Node_Str");
            mWatchingForPull=false;
            if (mResizedView != null && !isFullyExpanded(mResizedView)) {
              if (startExpanding(mResizedView,BLINDS)) {
                mLastMotionY=ev.getRawY();
                mInitialTouchY=ev.getRawY();
                mHasPopped=false;
              }
            }
          }
        }
        break;
      }
case MotionEvent.ACTION_DOWN:
    mWatchingForPull=mScrollAdapter != null && isInside(mScrollAdapter.getHostView(),x,y) && mScrollAdapter.isScrolledToTop();
  mResizedView=findView(x,y);
if (mResizedView != null && !mCallback.canChildBeExpanded(mResizedView)) {
  mResizedView=null;
  mWatchingForPull=false;
}
mInitialTouchY=ev.getY();
mInitialTouchX=ev.getX();
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
if (DEBUG) Log.d(TAG,"String_Node_Str");
finishExpanding(false,getCurrentVelocity());
clearView();
break;
}
mLastMotionY=ev.getRawY();
maybeRecycleVelocityTracker(ev);
return mExpanding;
}
}