am c891d2b3: Merge "Fix PointerLocationView when pointer ids are not zero-based." into gingerbread

Merge commit 'c891d2b3529b9cf24ef4781a585cd4784815e711' into gingerbread-plus-aosp

* commit 'c891d2b3529b9cf24ef4781a585cd4784815e711':
  Fix PointerLocationView when pointer ids are not zero-based.
This commit is contained in:
Jeff Brown
2010-09-12 20:47:50 -07:00
committed by Android Git Automerger

View File

@ -84,6 +84,7 @@ public class PointerLocationView extends View {
private boolean mCurDown;
private int mCurNumPointers;
private int mMaxNumPointers;
private int mActivePointerId;
private final ArrayList<PointerState> mPointers = new ArrayList<PointerState>();
private final VelocityTracker mVelocity;
@ -123,6 +124,7 @@ public class PointerLocationView extends View {
PointerState ps = new PointerState();
mPointers.add(ps);
mActivePointerId = 0;
mVelocity = VelocityTracker.obtain();
@ -183,8 +185,9 @@ public class PointerLocationView extends View {
final int NP = mPointers.size();
// Labels
if (NP > 0) {
final PointerState ps = mPointers.get(0);
if (mActivePointerId >= 0) {
final PointerState ps = mPointers.get(mActivePointerId);
canvas.drawRect(0, 0, itemW-1, bottom,mTextBackgroundPaint);
canvas.drawText(mText.clear()
.append("P: ").append(mCurNumPointers)
@ -355,6 +358,11 @@ public class PointerLocationView extends View {
NP++;
}
if (mActivePointerId < 0 ||
! mPointers.get(mActivePointerId).mCurDown) {
mActivePointerId = id;
}
final PointerState ps = mPointers.get(id);
ps.mCurDown = true;
if (mPrintCoords) {
@ -396,6 +404,7 @@ public class PointerLocationView extends View {
}
if (action == MotionEvent.ACTION_UP
|| action == MotionEvent.ACTION_CANCEL
|| (action & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_POINTER_UP) {
final int index = (action & MotionEvent.ACTION_POINTER_INDEX_MASK)
>> MotionEvent.ACTION_POINTER_INDEX_SHIFT; // will be 0 for UP
@ -408,9 +417,13 @@ public class PointerLocationView extends View {
.append(id + 1).append(": UP").toString());
}
if (action == MotionEvent.ACTION_UP) {
if (action == MotionEvent.ACTION_UP
|| action == MotionEvent.ACTION_CANCEL) {
mCurDown = false;
} else {
if (mActivePointerId == id) {
mActivePointerId = event.getPointerId(index == 0 ? 1 : 0);
}
ps.addTrace(Float.NaN, Float.NaN);
}
}
@ -438,9 +451,9 @@ public class PointerLocationView extends View {
// HACK
// A quick and dirty string builder implementation optimized for GC.
// Using the basic StringBuilder implementation causes the application grind to a halt when
// more than a couple of pointers are down due to the number of temporary objects allocated
// while formatting strings for drawing or logging.
// Using String.format causes the application grind to a halt when
// more than a couple of pointers are down due to the number of
// temporary objects allocated while formatting strings for drawing or logging.
private static final class FasterStringBuilder {
private char[] mChars;
private int mLength;