From 71c831b02dcb682368addeb05ae640cf15aa0e0d Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Wed, 28 Jun 2023 17:22:05 -0500 Subject: [PATCH] Handle 2-direction d-pad key events --- .../binding/input/ControllerHandler.java | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/app/src/main/java/com/limelight/binding/input/ControllerHandler.java b/app/src/main/java/com/limelight/binding/input/ControllerHandler.java index f262857b..ccfd5370 100644 --- a/app/src/main/java/com/limelight/binding/input/ControllerHandler.java +++ b/app/src/main/java/com/limelight/binding/input/ControllerHandler.java @@ -65,6 +65,10 @@ public class ControllerHandler implements InputManager.InputDeviceListener, UsbD Map.entry(KeyEvent.KEYCODE_DPAD_DOWN, ControllerPacket.DOWN_FLAG), Map.entry(KeyEvent.KEYCODE_DPAD_LEFT, ControllerPacket.LEFT_FLAG), Map.entry(KeyEvent.KEYCODE_DPAD_RIGHT, ControllerPacket.RIGHT_FLAG), + Map.entry(KeyEvent.KEYCODE_DPAD_UP_LEFT, ControllerPacket.UP_FLAG | ControllerPacket.LEFT_FLAG), + Map.entry(KeyEvent.KEYCODE_DPAD_UP_RIGHT, ControllerPacket.UP_FLAG | ControllerPacket.RIGHT_FLAG), + Map.entry(KeyEvent.KEYCODE_DPAD_DOWN_LEFT, ControllerPacket.DOWN_FLAG | ControllerPacket.LEFT_FLAG), + Map.entry(KeyEvent.KEYCODE_DPAD_DOWN_RIGHT, ControllerPacket.DOWN_FLAG | ControllerPacket.RIGHT_FLAG), Map.entry(KeyEvent.KEYCODE_BUTTON_L1, ControllerPacket.LB_FLAG), Map.entry(KeyEvent.KEYCODE_BUTTON_R1, ControllerPacket.RB_FLAG), Map.entry(KeyEvent.KEYCODE_BUTTON_THUMBL, ControllerPacket.LS_CLK_FLAG), @@ -1871,6 +1875,34 @@ public class ControllerHandler implements InputManager.InputDeviceListener, UsbD } context.inputMap &= ~ControllerPacket.DOWN_FLAG; break; + case KeyEvent.KEYCODE_DPAD_UP_LEFT: + if (context.hatXAxisUsed && context.hatYAxisUsed) { + // Suppress this duplicate event if we have a hat + return true; + } + context.inputMap &= ~(ControllerPacket.UP_FLAG | ControllerPacket.LEFT_FLAG); + break; + case KeyEvent.KEYCODE_DPAD_UP_RIGHT: + if (context.hatXAxisUsed && context.hatYAxisUsed) { + // Suppress this duplicate event if we have a hat + return true; + } + context.inputMap &= ~(ControllerPacket.UP_FLAG | ControllerPacket.RIGHT_FLAG); + break; + case KeyEvent.KEYCODE_DPAD_DOWN_LEFT: + if (context.hatXAxisUsed && context.hatYAxisUsed) { + // Suppress this duplicate event if we have a hat + return true; + } + context.inputMap &= ~(ControllerPacket.DOWN_FLAG | ControllerPacket.LEFT_FLAG); + break; + case KeyEvent.KEYCODE_DPAD_DOWN_RIGHT: + if (context.hatXAxisUsed && context.hatYAxisUsed) { + // Suppress this duplicate event if we have a hat + return true; + } + context.inputMap &= ~(ControllerPacket.DOWN_FLAG | ControllerPacket.RIGHT_FLAG); + break; case KeyEvent.KEYCODE_BUTTON_B: context.inputMap &= ~ControllerPacket.B_FLAG; break; @@ -2020,6 +2052,34 @@ public class ControllerHandler implements InputManager.InputDeviceListener, UsbD } context.inputMap |= ControllerPacket.DOWN_FLAG; break; + case KeyEvent.KEYCODE_DPAD_UP_LEFT: + if (context.hatXAxisUsed && context.hatYAxisUsed) { + // Suppress this duplicate event if we have a hat + return true; + } + context.inputMap |= ControllerPacket.UP_FLAG | ControllerPacket.LEFT_FLAG; + break; + case KeyEvent.KEYCODE_DPAD_UP_RIGHT: + if (context.hatXAxisUsed && context.hatYAxisUsed) { + // Suppress this duplicate event if we have a hat + return true; + } + context.inputMap |= ControllerPacket.UP_FLAG | ControllerPacket.RIGHT_FLAG; + break; + case KeyEvent.KEYCODE_DPAD_DOWN_LEFT: + if (context.hatXAxisUsed && context.hatYAxisUsed) { + // Suppress this duplicate event if we have a hat + return true; + } + context.inputMap |= ControllerPacket.DOWN_FLAG | ControllerPacket.LEFT_FLAG; + break; + case KeyEvent.KEYCODE_DPAD_DOWN_RIGHT: + if (context.hatXAxisUsed && context.hatYAxisUsed) { + // Suppress this duplicate event if we have a hat + return true; + } + context.inputMap |= ControllerPacket.DOWN_FLAG | ControllerPacket.RIGHT_FLAG; + break; case KeyEvent.KEYCODE_BUTTON_B: context.inputMap |= ControllerPacket.B_FLAG; break;