lastMoveY property
Pointer y at the previous move, giving the instantaneous drag direction.
Travel measured from dragStartY cannot serve the mid-gesture handovers: a drag that grew the sheet is still net-upward at the moment it turns around, so cumulative travel would report the wrong direction exactly when ownership needs to change.
Implementation
double lastMoveY = 0.0;