Fixes the issue multi-touch causing launcher icons to be not clickable.
The issue occurs because TextView#isFromPrimePointer assumes multi-touch events are happening on the same TextView and relies on ACTION_UP/ACTION_CANCEL to reset the Prime pointer id. consider following scenario: 1. ACTION_DOWN (pointer 0) landed on ViewA, ACTION_DOWN (pointer 1) landed on ViewB. 2. ACTION_MOVE landed on both ViewA and ViewB, triggering a drag. 3. When all fingers are released, ACTION_CANCEL (pointer 0) will be landed on both ViewA and ViewB, so the prime pointer in ViewB is not reset due to pointer index mismatch. This CL always reset prime pointer id whenever ACTION_UP/ACTION_CANCEL is triggered. Bug: 157399040 Test: manual Change-Id: Id35d9eac939378482fa50e85bb5cda58469240ad
This commit is contained in:
@@ -10900,17 +10900,18 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
||||
* not among the handles.
|
||||
*/
|
||||
boolean isFromPrimePointer(MotionEvent event, boolean fromHandleView) {
|
||||
boolean res = true;
|
||||
if (mPrimePointerId == NO_POINTER_ID) {
|
||||
mPrimePointerId = event.getPointerId(0);
|
||||
mIsPrimePointerFromHandleView = fromHandleView;
|
||||
} else if (mPrimePointerId != event.getPointerId(0)) {
|
||||
return mIsPrimePointerFromHandleView && fromHandleView;
|
||||
res = mIsPrimePointerFromHandleView && fromHandleView;
|
||||
}
|
||||
if (event.getActionMasked() == MotionEvent.ACTION_UP
|
||||
|| event.getActionMasked() == MotionEvent.ACTION_CANCEL) {
|
||||
mPrimePointerId = -1;
|
||||
}
|
||||
return true;
|
||||
return res;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user