Skip to content

Commit 26c5686

Browse files
Jim MillerAndroid (Google) Code Review
authored andcommitted
Merge "Better handling of multiple touch events in GlowPadView" into jb-mr1-dev
2 parents 49397ac + b499884 commit 26c5686

File tree

1 file changed

+26
-7
lines changed

1 file changed

+26
-7
lines changed

core/java/com/android/internal/widget/multiwaveview/GlowPadView.java

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,7 @@ public void onAnimationEnd(Animator animator) {
196196
private Tweener mBackgroundAnimator;
197197
private PointCloud mPointCloud;
198198
private float mInnerRadius;
199+
private int mPointerId;
199200

200201
public GlowPadView(Context context) {
201202
this(context, null);
@@ -736,9 +737,10 @@ private void startBackgroundAnimation(int duration, float alpha) {
736737

737738
@Override
738739
public boolean onTouchEvent(MotionEvent event) {
739-
final int action = event.getAction();
740+
final int action = event.getActionMasked();
740741
boolean handled = false;
741742
switch (action) {
743+
case MotionEvent.ACTION_POINTER_DOWN:
742744
case MotionEvent.ACTION_DOWN:
743745
if (DEBUG) Log.v(TAG, "*** DOWN ***");
744746
handleDown(event);
@@ -752,6 +754,7 @@ public boolean onTouchEvent(MotionEvent event) {
752754
handled = true;
753755
break;
754756

757+
case MotionEvent.ACTION_POINTER_UP:
755758
case MotionEvent.ACTION_UP:
756759
if (DEBUG) Log.v(TAG, "*** UP ***");
757760
handleMove(event);
@@ -765,6 +768,7 @@ public boolean onTouchEvent(MotionEvent event) {
765768
handleCancel(event);
766769
handled = true;
767770
break;
771+
768772
}
769773
invalidate();
770774
return handled ? true : super.onTouchEvent(event);
@@ -776,19 +780,24 @@ private void updateGlowPosition(float x, float y) {
776780
}
777781

778782
private void handleDown(MotionEvent event) {
779-
float eventX = event.getX();
780-
float eventY = event.getY();
783+
int actionIndex = event.getActionIndex();
784+
float eventX = event.getX(actionIndex);
785+
float eventY = event.getY(actionIndex);
781786
switchToState(STATE_START, eventX, eventY);
782787
if (!trySwitchToFirstTouchState(eventX, eventY)) {
783788
mDragging = false;
784789
} else {
790+
mPointerId = event.getPointerId(actionIndex);
785791
updateGlowPosition(eventX, eventY);
786792
}
787793
}
788794

789795
private void handleUp(MotionEvent event) {
790796
if (DEBUG && mDragging) Log.v(TAG, "** Handle RELEASE");
791-
switchToState(STATE_FINISH, event.getX(), event.getY());
797+
int actionIndex = event.getActionIndex();
798+
if (event.getPointerId(actionIndex) == mPointerId) {
799+
switchToState(STATE_FINISH, event.getX(actionIndex), event.getY(actionIndex));
800+
}
792801
}
793802

794803
private void handleCancel(MotionEvent event) {
@@ -801,7 +810,9 @@ private void handleCancel(MotionEvent event) {
801810

802811
// mActiveTarget = -1; // Drop the active target if canceled.
803812

804-
switchToState(STATE_FINISH, event.getX(), event.getY());
813+
int actionIndex = event.findPointerIndex(mPointerId);
814+
actionIndex = actionIndex == -1 ? 0 : actionIndex;
815+
switchToState(STATE_FINISH, event.getX(actionIndex), event.getY(actionIndex));
805816
}
806817

807818
private void handleMove(MotionEvent event) {
@@ -811,9 +822,17 @@ private void handleMove(MotionEvent event) {
811822
int ntargets = targets.size();
812823
float x = 0.0f;
813824
float y = 0.0f;
825+
int actionIndex = event.findPointerIndex(mPointerId);
826+
827+
if (actionIndex == -1) {
828+
return; // no data for this pointer
829+
}
830+
814831
for (int k = 0; k < historySize + 1; k++) {
815-
float eventX = k < historySize ? event.getHistoricalX(k) : event.getX();
816-
float eventY = k < historySize ? event.getHistoricalY(k) : event.getY();
832+
float eventX = k < historySize ? event.getHistoricalX(actionIndex, k)
833+
: event.getX(actionIndex);
834+
float eventY = k < historySize ? event.getHistoricalY(actionIndex, k)
835+
: event.getY(actionIndex);
817836
// tx and ty are relative to wave center
818837
float tx = eventX - mWaveCenterX;
819838
float ty = eventY - mWaveCenterY;

0 commit comments

Comments
 (0)