Fix ABS_MT_SLOT handling.
Shouldn't reset the current slot index to 0 after each SYN_REPORT.
Change-Id: I370e4770f8ae0ce598369ecbaf64772c13e02d46
diff --git a/services/input/InputReader.cpp b/services/input/InputReader.cpp
index 25a2c78..d0a93ec 100644
--- a/services/input/InputReader.cpp
+++ b/services/input/InputReader.cpp
@@ -5303,7 +5303,8 @@
}
void MultiTouchInputMapper::clearState() {
- mAccumulator.clear(mSlotCount);
+ mAccumulator.clearSlots(mSlotCount);
+ mAccumulator.clearButtons();
mButtonState = 0;
}
@@ -5337,13 +5338,13 @@
}
if (mAccumulator.currentSlot < 0 || size_t(mAccumulator.currentSlot) >= mSlotCount) {
- if (newSlot) {
#if DEBUG_POINTERS
+ if (newSlot) {
LOGW("MultiTouch device %s emitted invalid slot index %d but it "
"should be between 0 and %d; ignoring this slot.",
getDeviceName().string(), mAccumulator.currentSlot, mSlotCount);
-#endif
}
+#endif
break;
}
@@ -5546,7 +5547,10 @@
syncTouch(when, havePointerIds);
- mAccumulator.clear(mUsingSlotsProtocol ? 0 : mSlotCount);
+ if (!mUsingSlotsProtocol) {
+ mAccumulator.clearSlots(mSlotCount);
+ }
+ mAccumulator.clearButtons();
}
void MultiTouchInputMapper::configureRawAxes() {
diff --git a/services/input/InputReader.h b/services/input/InputReader.h
index 85338b6..5b9a4ee 100644
--- a/services/input/InputReader.h
+++ b/services/input/InputReader.h
@@ -1235,8 +1235,7 @@
uint32_t buttonDown;
uint32_t buttonUp;
- Accumulator() : slots(NULL) {
- clear(false);
+ Accumulator() : currentSlot(0), slots(NULL), buttonDown(0), buttonUp(0) {
}
~Accumulator() {
@@ -1247,11 +1246,14 @@
slots = new Slot[slotCount];
}
- void clear(size_t slotCount) {
+ void clearSlots(size_t slotCount) {
for (size_t i = 0; i < slotCount; i++) {
slots[i].clear();
}
currentSlot = 0;
+ }
+
+ void clearButtons() {
buttonDown = 0;
buttonUp = 0;
}