Merge "Recover tracking pointer going up mid-gesture in shade." into klp-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
ac0a1ea06f
@@ -76,6 +76,7 @@ public class PanelView extends FrameLayout {
|
|||||||
private boolean mClosing;
|
private boolean mClosing;
|
||||||
private boolean mRubberbanding;
|
private boolean mRubberbanding;
|
||||||
private boolean mTracking;
|
private boolean mTracking;
|
||||||
|
private int mTrackingPointer;
|
||||||
|
|
||||||
private TimeAnimator mTimeAnimator;
|
private TimeAnimator mTimeAnimator;
|
||||||
private ObjectAnimator mPeekAnimator;
|
private ObjectAnimator mPeekAnimator;
|
||||||
@@ -380,14 +381,21 @@ public class PanelView extends FrameLayout {
|
|||||||
mHandleView.setOnTouchListener(new View.OnTouchListener() {
|
mHandleView.setOnTouchListener(new View.OnTouchListener() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onTouch(View v, MotionEvent event) {
|
public boolean onTouch(View v, MotionEvent event) {
|
||||||
final float y = event.getY();
|
int pointerIndex = event.findPointerIndex(mTrackingPointer);
|
||||||
final float rawY = event.getRawY();
|
if (pointerIndex < 0) {
|
||||||
if (DEBUG) logf("handle.onTouch: a=%s y=%.1f rawY=%.1f off=%.1f",
|
pointerIndex = 0;
|
||||||
|
mTrackingPointer = event.getPointerId(pointerIndex);
|
||||||
|
}
|
||||||
|
final float y = event.getY(pointerIndex);
|
||||||
|
final float rawDelta = event.getRawY() - event.getY();
|
||||||
|
final float rawY = y + rawDelta;
|
||||||
|
if (DEBUG) logf("handle.onTouch: a=%s p=[%d,%d] y=%.1f rawY=%.1f off=%.1f",
|
||||||
MotionEvent.actionToString(event.getAction()),
|
MotionEvent.actionToString(event.getAction()),
|
||||||
|
mTrackingPointer, pointerIndex,
|
||||||
y, rawY, mTouchOffset);
|
y, rawY, mTouchOffset);
|
||||||
PanelView.this.getLocationOnScreen(mAbsPos);
|
PanelView.this.getLocationOnScreen(mAbsPos);
|
||||||
|
|
||||||
switch (event.getAction()) {
|
switch (event.getActionMasked()) {
|
||||||
case MotionEvent.ACTION_DOWN:
|
case MotionEvent.ACTION_DOWN:
|
||||||
mTracking = true;
|
mTracking = true;
|
||||||
mHandleView.setPressed(true);
|
mHandleView.setPressed(true);
|
||||||
@@ -397,13 +405,26 @@ public class PanelView extends FrameLayout {
|
|||||||
trackMovement(event);
|
trackMovement(event);
|
||||||
mTimeAnimator.cancel(); // end any outstanding animations
|
mTimeAnimator.cancel(); // end any outstanding animations
|
||||||
mBar.onTrackingStarted(PanelView.this);
|
mBar.onTrackingStarted(PanelView.this);
|
||||||
mTouchOffset = (rawY - mAbsPos[1]) - PanelView.this.getExpandedHeight();
|
mTouchOffset = (rawY - mAbsPos[1]) - mExpandedHeight;
|
||||||
if (mExpandedHeight == 0) {
|
if (mExpandedHeight == 0) {
|
||||||
mJustPeeked = true;
|
mJustPeeked = true;
|
||||||
runPeekAnimation();
|
runPeekAnimation();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case MotionEvent.ACTION_POINTER_UP:
|
||||||
|
final int upPointer = event.getPointerId(event.getActionIndex());
|
||||||
|
if (mTrackingPointer == upPointer) {
|
||||||
|
// gesture is ongoing, find a new pointer to track
|
||||||
|
final int newIndex = event.getPointerId(0) != upPointer ? 0 : 1;
|
||||||
|
final float newY = event.getY(newIndex);
|
||||||
|
final float newRawY = newY + rawDelta;
|
||||||
|
mTrackingPointer = event.getPointerId(newIndex);
|
||||||
|
mTouchOffset = (newRawY - mAbsPos[1]) - mExpandedHeight;
|
||||||
|
mInitialTouchY = newY;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case MotionEvent.ACTION_MOVE:
|
case MotionEvent.ACTION_MOVE:
|
||||||
final float h = rawY - mAbsPos[1] - mTouchOffset;
|
final float h = rawY - mAbsPos[1] - mTouchOffset;
|
||||||
if (h > mPeekHeight) {
|
if (h > mPeekHeight) {
|
||||||
@@ -424,6 +445,7 @@ public class PanelView extends FrameLayout {
|
|||||||
case MotionEvent.ACTION_CANCEL:
|
case MotionEvent.ACTION_CANCEL:
|
||||||
mFinalTouchY = y;
|
mFinalTouchY = y;
|
||||||
mTracking = false;
|
mTracking = false;
|
||||||
|
mTrackingPointer = -1;
|
||||||
mHandleView.setPressed(false);
|
mHandleView.setPressed(false);
|
||||||
postInvalidate(); // catch the press state change
|
postInvalidate(); // catch the press state change
|
||||||
mBar.onTrackingStopped(PanelView.this);
|
mBar.onTrackingStopped(PanelView.this);
|
||||||
|
|||||||
Reference in New Issue
Block a user