From 51fb174984d6e0818b6563bc9d6c88f8891a508b Mon Sep 17 00:00:00 2001
From: Connor McLaughlin <stenzek@gmail.com>
Date: Thu, 8 Oct 2020 18:33:04 +1000
Subject: [PATCH] Android: Fix multi-touch for touchscreen controller

---
 .../duckstation/TouchscreenControllerView.java    | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/android/app/src/main/java/com/github/stenzek/duckstation/TouchscreenControllerView.java b/android/app/src/main/java/com/github/stenzek/duckstation/TouchscreenControllerView.java
index bee9d8d41..f01d7c448 100644
--- a/android/app/src/main/java/com/github/stenzek/duckstation/TouchscreenControllerView.java
+++ b/android/app/src/main/java/com/github/stenzek/duckstation/TouchscreenControllerView.java
@@ -81,7 +81,6 @@ public class TouchscreenControllerView extends FrameLayout {
         switch (event.getActionMasked())
         {
             case MotionEvent.ACTION_UP:
-            case MotionEvent.ACTION_POINTER_UP:
             {
                 clearAllButtonPressedStates();
                 return true;
@@ -89,15 +88,19 @@ public class TouchscreenControllerView extends FrameLayout {
 
             case MotionEvent.ACTION_DOWN:
             case MotionEvent.ACTION_POINTER_DOWN:
+            case MotionEvent.ACTION_POINTER_UP:
             case MotionEvent.ACTION_MOVE:
             {
-                final int x = (int)event.getX();
-                final int y = (int)event.getY();
                 Rect rect = new Rect();
-                for (TouchscreenControllerButtonView buttonView : mButtonViews)
-                {
+                final int pointerCount = event.getPointerCount();
+                for (TouchscreenControllerButtonView buttonView : mButtonViews) {
                     buttonView.getHitRect(rect);
-                    final boolean pressed = rect.contains(x, y);
+                    boolean pressed = false;
+                    for (int i = 0; i < pointerCount; i++) {
+                        final int x = (int) event.getX(i);
+                        final int y = (int) event.getY(i);
+                        pressed |= rect.contains(x, y);
+                    }
                     if (buttonView.isPressed() == pressed)
                         continue;