From ec71060d981c3b2a582ff95a593a82e3400dad41 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Wed, 19 Nov 2014 18:37:47 -0800 Subject: [PATCH] Fix broken keyboards and gamepads when an input device wasn't provided (such as a virtual gamepad or IME) --- app/src/main/java/com/limelight/Game.java | 10 ------- .../binding/input/ControllerHandler.java | 26 ++++++++++--------- 2 files changed, 14 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/com/limelight/Game.java b/app/src/main/java/com/limelight/Game.java index 058bb9e6..50d7de88 100644 --- a/app/src/main/java/com/limelight/Game.java +++ b/app/src/main/java/com/limelight/Game.java @@ -386,11 +386,6 @@ public class Game extends Activity implements SurfaceHolder.Callback, @Override public boolean onKeyDown(int keyCode, KeyEvent event) { - InputDevice dev = event.getDevice(); - if (dev == null) { - return super.onKeyDown(keyCode, event); - } - // Pass-through virtual navigation keys if ((event.getFlags() & KeyEvent.FLAG_VIRTUAL_HARD_KEY) != 0) { return super.onKeyDown(keyCode, event); @@ -429,11 +424,6 @@ public class Game extends Activity implements SurfaceHolder.Callback, @Override public boolean onKeyUp(int keyCode, KeyEvent event) { - InputDevice dev = event.getDevice(); - if (dev == null) { - return super.onKeyUp(keyCode, event); - } - // Pass-through virtual navigation keys if ((event.getFlags() & KeyEvent.FLAG_VIRTUAL_HARD_KEY) != 0) { return super.onKeyUp(keyCode, event); 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 b11b3e5c..7c0f4aec 100644 --- a/app/src/main/java/com/limelight/binding/input/ControllerHandler.java +++ b/app/src/main/java/com/limelight/binding/input/ControllerHandler.java @@ -45,6 +45,7 @@ public class ControllerHandler { private NvConnection conn; private double stickDeadzone; + private final ControllerMapping defaultMapping = new ControllerMapping(); public ControllerHandler(NvConnection conn, int deadzonePercentage) { this.conn = conn; @@ -52,6 +53,16 @@ public class ControllerHandler { // We want limelight-common to scale the axis values to match Xinput values ControllerPacket.enableAxisScaling = true; + + // Initialize the default mapping for events with no device + defaultMapping.leftStickXAxis = MotionEvent.AXIS_X; + defaultMapping.leftStickYAxis = MotionEvent.AXIS_Y; + defaultMapping.leftStickDeadzoneRadius = (float) stickDeadzone; + defaultMapping.rightStickXAxis = MotionEvent.AXIS_Z; + defaultMapping.rightStickYAxis = MotionEvent.AXIS_RZ; + defaultMapping.rightStickDeadzoneRadius = (float) stickDeadzone; + defaultMapping.leftTriggerAxis = MotionEvent.AXIS_BRAKE; + defaultMapping.rightTriggerAxis = MotionEvent.AXIS_GAS; } private static InputDevice.MotionRange getMotionRangeForJoystickAxis(InputDevice dev, int axis) { @@ -161,9 +172,9 @@ public class ControllerHandler { } private ControllerMapping getMappingForDevice(InputDevice dev) { - // Unknown devices can't be handled + // Unknown devices use the default mapping if (dev == null) { - return null; + return defaultMapping; } String descriptor = dev.getDescriptor(); @@ -294,10 +305,7 @@ public class ControllerHandler { public boolean handleMotionEvent(MotionEvent event) { ControllerMapping mapping = getMappingForDevice(event.getDevice()); - if (mapping == null) { - return false; - } - + // Handle left stick events outside of the deadzone if (mapping.leftStickXAxis != -1 && mapping.leftStickYAxis != -1) { Vector2d leftStickVector = handleDeadZone(event.getAxisValue(mapping.leftStickXAxis), @@ -358,9 +366,6 @@ public class ControllerHandler { public boolean handleButtonUp(KeyEvent event) { ControllerMapping mapping = getMappingForDevice(event.getDevice()); - if (mapping == null) { - return false; - } int keyCode = handleRemapping(mapping, event); if (keyCode == 0) { @@ -481,9 +486,6 @@ public class ControllerHandler { public boolean handleButtonDown(KeyEvent event) { ControllerMapping mapping = getMappingForDevice(event.getDevice()); - if (mapping == null) { - return false; - } int keyCode = handleRemapping(mapping, event); if (keyCode == 0) {