From 372a73207bd12100f4cb3fcd42f711d6ec61ad3b Mon Sep 17 00:00:00 2001 From: Sergii Pylypenko Date: Mon, 2 Jul 2018 22:13:24 +0300 Subject: [PATCH] SDL: fixed built-in emulated keyboard --- project/java/MainActivity.java | 21 ++++++++++--------- project/java/Video.java | 8 ++++++- .../ballfield/AndroidAppSettings.cfg | 9 +++++--- .../jni/application/ballfield/ballfield.cpp | 8 +++---- project/res/xml/amiga.xml | 2 +- project/res/xml/amiga_shift.xml | 2 +- project/res/xml/qwerty.xml | 2 +- project/res/xml/qwerty_shift.xml | 2 +- 8 files changed, 32 insertions(+), 22 deletions(-) diff --git a/project/java/MainActivity.java b/project/java/MainActivity.java index cbf7e3117..084eb1f18 100644 --- a/project/java/MainActivity.java +++ b/project/java/MainActivity.java @@ -689,9 +689,9 @@ public class MainActivity extends Activity if (key > 100000) { key -= 100000; - MainActivity.this.onKeyDown(KeyEvent.KEYCODE_SHIFT_LEFT, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_SHIFT_LEFT)); + mGLView.onKeyDown(KeyEvent.KEYCODE_SHIFT_LEFT, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_SHIFT_LEFT)); } - MainActivity.this.onKeyDown(key, new KeyEvent(KeyEvent.ACTION_DOWN, key)); + mGLView.onKeyDown(key, new KeyEvent(KeyEvent.ACTION_DOWN, key)); } public void onRelease(int key) { @@ -705,9 +705,9 @@ public class MainActivity extends Activity { builtinKeyboard.shift = ! builtinKeyboard.shift; if (builtinKeyboard.shift && !builtinKeyboard.alt) - MainActivity.this.onKeyDown(KeyEvent.KEYCODE_SHIFT_LEFT, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_SHIFT_LEFT)); + mGLView.onKeyDown(KeyEvent.KEYCODE_SHIFT_LEFT, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_SHIFT_LEFT)); else - MainActivity.this.onKeyUp(KeyEvent.KEYCODE_SHIFT_LEFT, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_SHIFT_LEFT)); + mGLView.onKeyUp(KeyEvent.KEYCODE_SHIFT_LEFT, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_SHIFT_LEFT)); builtinKeyboard.ChangeKeyboard(); return; } @@ -715,7 +715,7 @@ public class MainActivity extends Activity { builtinKeyboard.alt = ! builtinKeyboard.alt; if (builtinKeyboard.alt) - MainActivity.this.onKeyUp(KeyEvent.KEYCODE_SHIFT_LEFT, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_SHIFT_LEFT)); + mGLView.onKeyUp(KeyEvent.KEYCODE_SHIFT_LEFT, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_SHIFT_LEFT)); else builtinKeyboard.shift = false; builtinKeyboard.ChangeKeyboard(); @@ -730,12 +730,12 @@ public class MainActivity extends Activity if (k.on) { builtinKeyboard.stickyKeys.add(key); - MainActivity.this.onKeyDown(key, new KeyEvent(KeyEvent.ACTION_DOWN, key)); + mGLView.onKeyDown(key, new KeyEvent(KeyEvent.ACTION_DOWN, key)); } else { builtinKeyboard.stickyKeys.remove(key); - MainActivity.this.onKeyUp(key, new KeyEvent(KeyEvent.ACTION_UP, key)); + mGLView.onKeyUp(key, new KeyEvent(KeyEvent.ACTION_UP, key)); } return; } @@ -748,11 +748,11 @@ public class MainActivity extends Activity shifted = true; } - MainActivity.this.onKeyUp(key, new KeyEvent(KeyEvent.ACTION_UP, key)); + mGLView.onKeyUp(key, new KeyEvent(KeyEvent.ACTION_UP, key)); if (shifted) { - MainActivity.this.onKeyUp(KeyEvent.KEYCODE_SHIFT_LEFT, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_SHIFT_LEFT)); + mGLView.onKeyUp(KeyEvent.KEYCODE_SHIFT_LEFT, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_SHIFT_LEFT)); builtinKeyboard.stickyKeys.remove(KeyEvent.KEYCODE_SHIFT_LEFT); for (Keyboard.Key k: builtinKeyboard.getKeyboard().getKeys()) { @@ -774,6 +774,7 @@ public class MainActivity extends Activity _screenKeyboard = builtinKeyboard; FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.BOTTOM); _videoLayout.addView(_screenKeyboard, layout); + _videoLayout.bringChildToFront(_screenKeyboard); } } }); @@ -1553,7 +1554,7 @@ public class MainActivity extends Activity public ProgressDialog loadingDialog = null; FrameLayout _videoLayout = null; - private View _screenKeyboard = null; + public View _screenKeyboard = null; private String _screenKeyboardHintMessage = null; static boolean keyboardWithoutTextInputShown = false; private boolean sdlInited = false; diff --git a/project/java/Video.java b/project/java/Video.java index 0c678833d..26105a136 100644 --- a/project/java/Video.java +++ b/project/java/Video.java @@ -1105,8 +1105,14 @@ class DemoGLSurfaceView extends GLSurfaceView_SDL { } @Override - public boolean onTouchEvent(final MotionEvent event) + public boolean onTouchEvent(final MotionEvent event) { + if (mParent.keyboardWithoutTextInputShown && mParent._screenKeyboard != null && + mParent._screenKeyboard.getY() <= event.getY()) { + event.offsetLocation(-mParent._screenKeyboard.getX(), -mParent._screenKeyboard.getY()); + mParent._screenKeyboard.onTouchEvent(event); + return true; + } if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH) { if (getX() != 0) diff --git a/project/jni/application/ballfield/AndroidAppSettings.cfg b/project/jni/application/ballfield/AndroidAppSettings.cfg index 43475006c..75490e339 100644 --- a/project/jni/application/ballfield/AndroidAppSettings.cfg +++ b/project/jni/application/ballfield/AndroidAppSettings.cfg @@ -177,9 +177,12 @@ AppUsesMultitouch=y # This option will add additional permission to Android manifest (y)/(n) AppRecordsAudio=n -# Application needs to access SD card. Always disable it, unless you want to access user photos and downloads. (y) / (n) +# Application needs read/write access SD card. Always disable it, unless you want to access user photos and downloads. (y) / (n) AccessSdCard=y +# Application needs to read it's own OBB file. Enable this if you are using Play Store expansion files. (y) / (n) +ReadObbFile= + # Application needs Internet access. If you disable it, you'll have to bundle all your data files inside .apk (y) / (n) AccessInternet= @@ -263,8 +266,8 @@ NDK_TOOLCHAIN_VERSION=clang APP_PLATFORM= # Specify architectures to compile, 'all' or 'y' to compile for all architectures. -# Available architectures: armeabi armeabi-v7a x86 mips arm64-v8a -MultiABI='arm64-v8a' +# Available architectures: armeabi-v7a x86 mips arm64-v8a +MultiABI='armeabi-v7a' # Optional shared libraries to compile - removing some of them will save space # MP3 support by libMAD is encumbered by patents and libMAD is GPL-ed diff --git a/project/jni/application/ballfield/ballfield.cpp b/project/jni/application/ballfield/ballfield.cpp index 61a90bad6..356315ae3 100644 --- a/project/jni/application/ballfield/ballfield.cpp +++ b/project/jni/application/ballfield/ballfield.cpp @@ -785,13 +785,13 @@ int main(int argc, char* argv[]) x_speed = 500.0 * sin(t * 0.37); y_speed = 500.0 * sin(t * 0.53); z_speed = 400.0 * sin(t * 0.21); - if( SDL_GetKeyState(NULL)[SDLK_LEFT] ) + if( SDL_GetKeyState(NULL)[SDLK_LEFT] || SDL_GetKeyState(NULL)[SDLK_a] ) x_speed -= 100000 * dt; - if( SDL_GetKeyState(NULL)[SDLK_RIGHT] ) + if( SDL_GetKeyState(NULL)[SDLK_RIGHT] || SDL_GetKeyState(NULL)[SDLK_d] ) x_speed += 100000 * dt; - if( SDL_GetKeyState(NULL)[SDLK_UP] ) + if( SDL_GetKeyState(NULL)[SDLK_UP] || SDL_GetKeyState(NULL)[SDLK_w] ) y_speed -= 100000 * dt; - if( SDL_GetKeyState(NULL)[SDLK_DOWN] ) + if( SDL_GetKeyState(NULL)[SDLK_DOWN] || SDL_GetKeyState(NULL)[SDLK_s] ) y_speed += 100000 * dt; ballfield_move(balls, x_speed, y_speed, z_speed); diff --git a/project/res/xml/amiga.xml b/project/res/xml/amiga.xml index 6835af9d3..6f984d646 100644 --- a/project/res/xml/amiga.xml +++ b/project/res/xml/amiga.xml @@ -34,7 +34,7 @@ - + diff --git a/project/res/xml/amiga_shift.xml b/project/res/xml/amiga_shift.xml index 54b260a81..ad2e56fa4 100644 --- a/project/res/xml/amiga_shift.xml +++ b/project/res/xml/amiga_shift.xml @@ -38,7 +38,7 @@ - + diff --git a/project/res/xml/qwerty.xml b/project/res/xml/qwerty.xml index 8c6a21dc0..1961908e3 100644 --- a/project/res/xml/qwerty.xml +++ b/project/res/xml/qwerty.xml @@ -38,7 +38,7 @@ - + diff --git a/project/res/xml/qwerty_shift.xml b/project/res/xml/qwerty_shift.xml index 610317e35..17c906bed 100644 --- a/project/res/xml/qwerty_shift.xml +++ b/project/res/xml/qwerty_shift.xml @@ -38,7 +38,7 @@ - +