diff --git a/app/src/main/java/com/limelight/binding/input/virtual_controller/AnalogStick.java b/app/src/main/java/com/limelight/binding/input/virtual_controller/AnalogStick.java index 9362d401..119b707a 100644 --- a/app/src/main/java/com/limelight/binding/input/virtual_controller/AnalogStick.java +++ b/app/src/main/java/com/limelight/binding/input/virtual_controller/AnalogStick.java @@ -305,8 +305,7 @@ public class AnalogStick extends VirtualControllerElement { // handle event depending on action switch (event.getActionMasked()) { // down event (touch event) - case MotionEvent.ACTION_DOWN: - case MotionEvent.ACTION_POINTER_DOWN: { + case MotionEvent.ACTION_DOWN: { // set to dead zoned, will be corrected in update position if necessary stick_state = STICK_STATE.MOVED_IN_DEAD_ZONE; // check for double click @@ -325,8 +324,7 @@ public class AnalogStick extends VirtualControllerElement { break; } // up event (revoke touch) - case MotionEvent.ACTION_UP: - case MotionEvent.ACTION_POINTER_UP: { + case MotionEvent.ACTION_UP: { setPressed(false); break; } diff --git a/app/src/main/java/com/limelight/binding/input/virtual_controller/DigitalButton.java b/app/src/main/java/com/limelight/binding/input/virtual_controller/DigitalButton.java index 9ceac1dc..e24484b0 100644 --- a/app/src/main/java/com/limelight/binding/input/virtual_controller/DigitalButton.java +++ b/app/src/main/java/com/limelight/binding/input/virtual_controller/DigitalButton.java @@ -200,8 +200,7 @@ public class DigitalButton extends VirtualControllerElement { int action = event.getActionMasked(); switch (action) { - case MotionEvent.ACTION_DOWN: - case MotionEvent.ACTION_POINTER_DOWN: { + case MotionEvent.ACTION_DOWN: { movingButton = null; setPressed(true); onClickCallback(); @@ -216,8 +215,7 @@ public class DigitalButton extends VirtualControllerElement { return true; } case MotionEvent.ACTION_CANCEL: - case MotionEvent.ACTION_UP: - case MotionEvent.ACTION_POINTER_UP: { + case MotionEvent.ACTION_UP: { setPressed(false); onReleaseCallback(); diff --git a/app/src/main/java/com/limelight/binding/input/virtual_controller/DigitalPad.java b/app/src/main/java/com/limelight/binding/input/virtual_controller/DigitalPad.java index db30d574..1f3d9fed 100644 --- a/app/src/main/java/com/limelight/binding/input/virtual_controller/DigitalPad.java +++ b/app/src/main/java/com/limelight/binding/input/virtual_controller/DigitalPad.java @@ -162,7 +162,6 @@ public class DigitalPad extends VirtualControllerElement { // get masked (not specific to a pointer) action switch (event.getActionMasked()) { case MotionEvent.ACTION_DOWN: - case MotionEvent.ACTION_POINTER_DOWN: case MotionEvent.ACTION_MOVE: { direction = 0; @@ -184,8 +183,7 @@ public class DigitalPad extends VirtualControllerElement { return true; } case MotionEvent.ACTION_CANCEL: - case MotionEvent.ACTION_UP: - case MotionEvent.ACTION_POINTER_UP: { + case MotionEvent.ACTION_UP: { direction = 0; newDirectionCallback(direction); invalidate(); diff --git a/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualControllerElement.java b/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualControllerElement.java index ad843778..cb906dec 100644 --- a/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualControllerElement.java +++ b/app/src/main/java/com/limelight/binding/input/virtual_controller/VirtualControllerElement.java @@ -223,13 +223,21 @@ public abstract class VirtualControllerElement extends View { @Override public boolean onTouchEvent(MotionEvent event) { + // Ignore secondary touches on controls + // + // NB: We can get an additional pointer down if the user touches a non-StreamView area + // while also touching an OSC control, even if that pointer down doesn't correspond to + // an area of the OSC control. + if (event.getActionIndex() != 0) { + return true; + } + if (virtualController.getControllerMode() == VirtualController.ControllerMode.Active) { return onElementTouchEvent(event); } switch (event.getActionMasked()) { - case MotionEvent.ACTION_DOWN: - case MotionEvent.ACTION_POINTER_DOWN: { + case MotionEvent.ACTION_DOWN: { position_pressed_x = event.getX(); position_pressed_y = event.getY(); startSize_x = getWidth(); @@ -267,8 +275,7 @@ public abstract class VirtualControllerElement extends View { return true; } case MotionEvent.ACTION_CANCEL: - case MotionEvent.ACTION_UP: - case MotionEvent.ACTION_POINTER_UP: { + case MotionEvent.ACTION_UP: { actionCancel(); return true; }