From 043c9a978e50363e8f2cc0838174c2b55fd33c4b Mon Sep 17 00:00:00 2001 From: joeyenfield Date: Tue, 16 May 2017 02:07:54 +0100 Subject: [PATCH] Fix issue with ipega controller not capturing keypresses on Samsung phones. (#386) --- app/src/main/java/com/limelight/Game.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/limelight/Game.java b/app/src/main/java/com/limelight/Game.java index ca91137e..13787966 100644 --- a/app/src/main/java/com/limelight/Game.java +++ b/app/src/main/java/com/limelight/Game.java @@ -575,8 +575,13 @@ public class Game extends Activity implements SurfaceHolder.Callback, } boolean handled = false; - if (event.getDevice() == null || - event.getDevice().getKeyboardType() != InputDevice.KEYBOARD_TYPE_ALPHABETIC) { + + boolean detectedGamepad = event.getDevice() == null ? false : + ((event.getDevice().getSources() & InputDevice.SOURCE_JOYSTICK) != 0 || + (event.getDevice().getSources() & InputDevice.SOURCE_GAMEPAD) != 0); + if (detectedGamepad || (event.getDevice() == null || + event.getDevice().getKeyboardType() != InputDevice.KEYBOARD_TYPE_ALPHABETIC + )) { // Always try the controller handler first, unless it's an alphanumeric keyboard device. // Otherwise, controller handler will eat keyboard d-pad events. handled = controllerHandler.handleButtonDown(event); @@ -614,8 +619,12 @@ public class Game extends Activity implements SurfaceHolder.Callback, } boolean handled = false; - if (event.getDevice() == null || - event.getDevice().getKeyboardType() != InputDevice.KEYBOARD_TYPE_ALPHABETIC) { + boolean detectedGamepad = event.getDevice() == null ? false : + ((event.getDevice().getSources() & InputDevice.SOURCE_JOYSTICK) != 0 || + (event.getDevice().getSources() & InputDevice.SOURCE_GAMEPAD) != 0); + if (detectedGamepad || (event.getDevice() == null || + event.getDevice().getKeyboardType() != InputDevice.KEYBOARD_TYPE_ALPHABETIC + )) { // Always try the controller handler first, unless it's an alphanumeric keyboard device. // Otherwise, controller handler will eat keyboard d-pad events. handled = controllerHandler.handleButtonUp(event);