From d487a2e72e1b55bca053331ae90eafec55d86a6b Mon Sep 17 00:00:00 2001 From: Benau Date: Tue, 28 May 2019 15:21:06 +0800 Subject: [PATCH] Clear text when closing keyboard if onEnterPressed returns true --- android/src/main/java/STKEditText.java | 27 +++++++++++++++---- .../src/main/java/SuperTuxKartActivity.java | 10 +++---- .../source/Irrlicht/CIrrDeviceAndroid.cpp | 4 +-- src/guiengine/widgets/text_box_widget.cpp | 4 ++- 4 files changed, 32 insertions(+), 13 deletions(-) diff --git a/android/src/main/java/STKEditText.java b/android/src/main/java/STKEditText.java index b2b20a700..c34ad2092 100644 --- a/android/src/main/java/STKEditText.java +++ b/android/src/main/java/STKEditText.java @@ -26,7 +26,7 @@ public class STKEditText extends EditText private STKInputConnection m_stk_input_connection; /* Used to avoid infinite calling updateSTKEditBox if setText currently - * by jni. */ + * by jni or clearing text when out focus. */ private boolean m_from_stk_editbox; // ------------------------------------------------------------------------ private native static void editText2STKEditbox(int widget_id, @@ -89,7 +89,7 @@ public class STKEditText extends EditText // Always remove the focus on STKEdit when pressing back button in // phone, which hideSoftInputFromWindow is called by java itself if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) - beforeHideKeyboard(); + beforeHideKeyboard(false/*clear_text*/); return false; } // ------------------------------------------------------------------------ @@ -118,10 +118,27 @@ public class STKEditText extends EditText m_composing_end); } // ------------------------------------------------------------------------ - public void beforeHideKeyboard() + public void beforeHideKeyboard(final boolean clear_text) { - clearFocus(); - setVisibility(View.GONE); + try + { + if (clear_text) + { + // No need updating stk editbox on clearing text when out focus + m_from_stk_editbox = true; + { + super.clearComposingText(); + super.getText().clear(); + } + m_from_stk_editbox = false; + } + clearFocus(); + setVisibility(View.GONE); + } + catch (Exception e) + { + m_from_stk_editbox = false; + } } // ------------------------------------------------------------------------ /* Called by STK with JNI to set this view with new text (like user focus diff --git a/android/src/main/java/SuperTuxKartActivity.java b/android/src/main/java/SuperTuxKartActivity.java index 6cd2d4211..61e2d85bf 100644 --- a/android/src/main/java/SuperTuxKartActivity.java +++ b/android/src/main/java/SuperTuxKartActivity.java @@ -22,12 +22,12 @@ public class SuperTuxKartActivity extends NativeActivity // ------------------------------------------------------------------------ private native void saveKeyboardHeight(int height); // ------------------------------------------------------------------------ - private void hideKeyboardNative() + private void hideKeyboardNative(final boolean clear_text) { if (m_stk_edittext == null) return; - m_stk_edittext.beforeHideKeyboard(); + m_stk_edittext.beforeHideKeyboard(clear_text); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); @@ -118,7 +118,7 @@ public class SuperTuxKartActivity extends NativeActivity public void onPause() { super.onPause(); - hideKeyboardNative(); + hideKeyboardNative(false/*clear_text*/); } // ------------------------------------------------------------------------ @Override @@ -168,14 +168,14 @@ public class SuperTuxKartActivity extends NativeActivity } // ------------------------------------------------------------------------ /* Called by STK in JNI. */ - public void hideKeyboard() + public void hideKeyboard(final boolean clear_text) { runOnUiThread(new Runnable() { @Override public void run() { - hideKeyboardNative(); + hideKeyboardNative(clear_text); } }); } diff --git a/lib/irrlicht/source/Irrlicht/CIrrDeviceAndroid.cpp b/lib/irrlicht/source/Irrlicht/CIrrDeviceAndroid.cpp index 1782e1cbf..05c51659d 100644 --- a/lib/irrlicht/source/Irrlicht/CIrrDeviceAndroid.cpp +++ b/lib/irrlicht/source/Irrlicht/CIrrDeviceAndroid.cpp @@ -1229,7 +1229,7 @@ void CIrrDeviceAndroid::toggleOnScreenKeyboard(bool show, s32 type) if (show) method_id = env->GetMethodID(class_native_activity, "showKeyboard", "(I)V"); else - method_id = env->GetMethodID(class_native_activity, "hideKeyboard", "()V"); + method_id = env->GetMethodID(class_native_activity, "hideKeyboard", "(Z)V"); if (method_id == NULL) { @@ -1244,7 +1244,7 @@ void CIrrDeviceAndroid::toggleOnScreenKeyboard(bool show, s32 type) if (show) env->CallVoidMethod(native_activity, method_id, (jint)type); else - env->CallVoidMethod(native_activity, method_id); + env->CallVoidMethod(native_activity, method_id, (jboolean)(type != 0)); if (was_detached) { Android->activity->vm->DetachCurrentThread(); diff --git a/src/guiengine/widgets/text_box_widget.cpp b/src/guiengine/widgets/text_box_widget.cpp index a3861bd77..342c13393 100644 --- a/src/guiengine/widgets/text_box_widget.cpp +++ b/src/guiengine/widgets/text_box_widget.cpp @@ -318,7 +318,9 @@ ANDROID_HANDLE_ACTION_NEXT_CALLBACK(ANDROID_PACKAGE_CALLBACK_NAME) // First test for onEnterPressed, if true then close keyboard if (eb->handleEnterPressed()) { - GUIEngine::getDevice()->toggleOnScreenKeyboard(false); + // Clear text like onEnterPressed callback + GUIEngine::getDevice()->toggleOnScreenKeyboard(false, + 1/*clear_text*/); return; }