From 0ed1f73990ba9ae2b9d99af7a430ef49c46c57d3 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Thu, 5 Nov 2020 17:43:14 -0400 Subject: [PATCH] Fix crash with multitouch in call screen pip. --- .../webrtc/PictureInPictureGestureHelper.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/PictureInPictureGestureHelper.java b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/PictureInPictureGestureHelper.java index cc03f42abf..19a6ee8057 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/PictureInPictureGestureHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/PictureInPictureGestureHelper.java @@ -58,6 +58,13 @@ public class PictureInPictureGestureHelper extends GestureDetector.SimpleOnGestu GestureDetectorCompat gestureDetector = new GestureDetectorCompat(child.getContext(), helper); parent.setOnInterceptTouchEventListener((event) -> { + final int action = event.getAction(); + final int pointerIndex = (action & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT; + + if (pointerIndex > 0) { + return false; + } + if (helper.velocityTracker == null) { helper.velocityTracker = VelocityTracker.obtain(); } @@ -163,8 +170,8 @@ public class PictureInPictureGestureHelper extends GestureDetector.SimpleOnGestu @Override public boolean onDown(MotionEvent e) { activePointerId = e.getPointerId(0); - lastTouchX = e.getX(activePointerId) + child.getX(); - lastTouchY = e.getY(activePointerId) + child.getY(); + lastTouchX = e.getX(0) + child.getX(); + lastTouchY = e.getY(0) + child.getY(); isDragging = true; pipWidth = child.getMeasuredWidth(); pipHeight = child.getMeasuredHeight(); @@ -175,7 +182,13 @@ public class PictureInPictureGestureHelper extends GestureDetector.SimpleOnGestu @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { - int pointerIndex = e2.findPointerIndex(activePointerId); + int pointerIndex = e2.findPointerIndex(activePointerId); + + if (pointerIndex == -1) { + fling(); + return false; + } + float x = e2.getX(pointerIndex) + child.getX(); float y = e2.getY(pointerIndex) + child.getY(); float dx = x - lastTouchX;