Temporary fix for bug #1639 SDL does not message back closing of screen keyboard

See FIXME notes on patch for details.
This commit is contained in:
Gabriel Jacobo 2013-08-02 12:38:39 -03:00
parent 8ee3d7a554
commit ab545a05b9
2 changed files with 27 additions and 0 deletions

View file

@ -236,6 +236,7 @@ public class SDLActivity extends Activity {
public static native void onNativeResize(int x, int y, int format); public static native void onNativeResize(int x, int y, int format);
public static native void onNativeKeyDown(int keycode); public static native void onNativeKeyDown(int keycode);
public static native void onNativeKeyUp(int keycode); public static native void onNativeKeyUp(int keycode);
public static native void onNativeKeyboardFocusLost();
public static native void onNativeTouch(int touchDevId, int pointerFingerId, public static native void onNativeTouch(int touchDevId, int pointerFingerId,
int action, float x, int action, float x,
float y, float p); float y, float p);
@ -829,6 +830,23 @@ class DummyEdit extends View implements View.OnKeyListener {
return false; return false;
} }
//
@Override
public boolean onKeyPreIme (int keyCode, KeyEvent event) {
// As seen on StackOverflow: http://stackoverflow.com/questions/7634346/keyboard-hide-event
// FIXME: Discussion at http://bugzilla.libsdl.org/show_bug.cgi?id=1639
// FIXME: This is not a 100% effective solution to the problem of detecting if the keyboard is showing or not
// FIXME: A more effective solution would be to change our Layout from AbsoluteLayout to Relative or Linear
// FIXME: And determine the keyboard presence doing this: http://stackoverflow.com/questions/2150078/how-to-check-visibility-of-software-keyboard-in-android
// FIXME: An even more effective way would be if Android provided this out of the box, but where would the fun be in that :)
if (event.getAction()==KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) {
if (SDLActivity.mTextEdit != null && SDLActivity.mTextEdit.getVisibility() == View.VISIBLE) {
SDLActivity.onNativeKeyboardFocusLost();
}
}
return super.onKeyPreIme(keyCode, event);
}
@Override @Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) { public InputConnection onCreateInputConnection(EditorInfo outAttrs) {

View file

@ -162,6 +162,15 @@ void Java_org_libsdl_app_SDLActivity_onNativeKeyUp(
Android_OnKeyUp(keycode); Android_OnKeyUp(keycode);
} }
// Keyboard Focus Lost
void Java_org_libsdl_app_SDLActivity_onNativeKeyboardFocusLost(
JNIEnv* env, jclass jcls)
{
/* Calling SDL_StopTextInput will take care of hiding the keyboard and cleaning up the DummyText widget */
SDL_StopTextInput();
}
// Touch // Touch
void Java_org_libsdl_app_SDLActivity_onNativeTouch( void Java_org_libsdl_app_SDLActivity_onNativeTouch(
JNIEnv* env, jclass jcls, JNIEnv* env, jclass jcls,