diff options
| author | Adam Powell <adamp@google.com> | 2012-09-28 12:21:10 -0700 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-09-28 12:21:28 -0700 |
| commit | 808ce66a08bbd2604d71f3368788ba7496f71482 (patch) | |
| tree | bc288245c57edd551a02b3d7bc81a38da1ad10d4 | |
| parent | cfb7d392ef9d4cf0ed7d846da93225f0512e882b (diff) | |
| parent | f3a2bf8edd2e070a24f0d7c105d78b38576e14ac (diff) | |
| download | frameworks_base-808ce66a08bbd2604d71f3368788ba7496f71482.zip frameworks_base-808ce66a08bbd2604d71f3368788ba7496f71482.tar.gz frameworks_base-808ce66a08bbd2604d71f3368788ba7496f71482.tar.bz2 | |
Merge "ScaleGestureDetector does the safety dance." into jb-mr1-dev
| -rw-r--r-- | core/java/android/view/ScaleGestureDetector.java | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/core/java/android/view/ScaleGestureDetector.java b/core/java/android/view/ScaleGestureDetector.java index b0a2711..4873860 100644 --- a/core/java/android/view/ScaleGestureDetector.java +++ b/core/java/android/view/ScaleGestureDetector.java @@ -19,6 +19,7 @@ package android.view; import android.content.Context; import android.os.SystemClock; import android.util.FloatMath; +import android.util.Log; import java.util.Arrays; @@ -223,10 +224,14 @@ public class ScaleGestureDetector { * @param id pointer id to clear * @see #addTouchHistory(MotionEvent) */ - private void removeTouchHistoryForId(int id) { + private boolean removeTouchHistoryForId(int id) { + if (id >= mTouchHistoryLastAccepted.length) { + return false; + } mTouchHistoryLastAccepted[id] = Float.NaN; mTouchHistoryDirection[id] = 0; mTouchHistoryLastAcceptedTime[id] = 0; + return true; } /** @@ -236,6 +241,11 @@ public class ScaleGestureDetector { * @see #addTouchHistory(MotionEvent) */ private float getAdjustedTouchHistory(int id) { + if (id >= mTouchHistoryLastAccepted.length) { + Log.e(TAG, "Error retrieving adjusted touch history for id=" + id + + " - incomplete event stream?"); + return 0; + } return mTouchHistoryLastAccepted[id]; } @@ -244,6 +254,10 @@ public class ScaleGestureDetector { * @see #addTouchHistory(MotionEvent) */ private void clearTouchHistory() { + if (mTouchHistoryLastAccepted == null) { + // All three arrays will be null if this is the case; nothing to do. + return; + } Arrays.fill(mTouchHistoryLastAccepted, Float.NaN); Arrays.fill(mTouchHistoryDirection, 0); Arrays.fill(mTouchHistoryLastAcceptedTime, 0); @@ -333,7 +347,11 @@ public class ScaleGestureDetector { final float focusY = sumY / div; if (pointerUp) { - removeTouchHistoryForId(event.getPointerId(event.getActionIndex())); + final int id = event.getPointerId(event.getActionIndex()); + if (!removeTouchHistoryForId(id)) { + Log.e(TAG, "Got ACTION_POINTER_UP for previously unknown id=" + id + + " - incomplete event stream?"); + } } else { addTouchHistory(event); } |
