From d37bad52b1477e2f7f6e4ef25d6e6b36cde6f75f Mon Sep 17 00:00:00 2001 From: Gabriel Jacobo Date: Mon, 11 Nov 2013 10:49:48 -0300 Subject: [PATCH] [Android] Improve handling of keyboard, dpad and gamepad events Thanks Dimitris Zenios for the report! --- .../src/org/libsdl/app/SDLActivity.java | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/android-project/src/org/libsdl/app/SDLActivity.java b/android-project/src/org/libsdl/app/SDLActivity.java index d0155a5d3..d1292ddef 100755 --- a/android-project/src/org/libsdl/app/SDLActivity.java +++ b/android-project/src/org/libsdl/app/SDLActivity.java @@ -600,18 +600,10 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback, @Override public boolean onKey(View v, int keyCode, KeyEvent event) { // Dispatch the different events depending on where they come from - if(event.getSource() == InputDevice.SOURCE_KEYBOARD) { - if (event.getAction() == KeyEvent.ACTION_DOWN) { - //Log.v("SDL", "key down: " + keyCode); - SDLActivity.onNativeKeyDown(keyCode); - return true; - } - else if (event.getAction() == KeyEvent.ACTION_UP) { - //Log.v("SDL", "key up: " + keyCode); - SDLActivity.onNativeKeyUp(keyCode); - return true; - } - } else if ( (event.getSource() & 0x00000401) != 0 || /* API 12: SOURCE_GAMEPAD */ + // Some SOURCE_DPAD or SOURCE_GAMEPAD events appear to also be marked as SOURCE_KEYBOARD + // So, to avoid problems, we process DPAD or GAMEPAD events first. + + if ( (event.getSource() & 0x00000401) != 0 || /* API 12: SOURCE_GAMEPAD */ (event.getSource() & InputDevice.SOURCE_DPAD) != 0 ) { int id = SDLActivity.getJoyId( event.getDeviceId() ); if (id != -1) { @@ -623,6 +615,18 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback, } return true; } + else if( (event.getSource() & InputDevice.SOURCE_KEYBOARD) != 0) { + if (event.getAction() == KeyEvent.ACTION_DOWN) { + //Log.v("SDL", "key down: " + keyCode); + SDLActivity.onNativeKeyDown(keyCode); + return true; + } + else if (event.getAction() == KeyEvent.ACTION_UP) { + //Log.v("SDL", "key up: " + keyCode); + SDLActivity.onNativeKeyUp(keyCode); + return true; + } + } return false; }