diff options
| author | Matthias Melcher <fltk@matthiasm.com> | 2018-03-24 17:21:36 +0000 |
|---|---|---|
| committer | Matthias Melcher <fltk@matthiasm.com> | 2018-03-24 17:21:36 +0000 |
| commit | 5f8cec638327e2541a4e4c165668b5c5897acb35 (patch) | |
| tree | 1fe1313b4bcbff0d03f1dadf19ce66e282f89728 /src/drivers/Android | |
| parent | fada3a829188294df580d5e59765114aa4a155b2 (diff) | |
Android: Even rougherer cut to make the keyboard pop up.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.4@12795 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/drivers/Android')
| -rw-r--r-- | src/drivers/Android/Fl_Android_Screen_Driver.cxx | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/src/drivers/Android/Fl_Android_Screen_Driver.cxx b/src/drivers/Android/Fl_Android_Screen_Driver.cxx index 18700bca7..061658315 100644 --- a/src/drivers/Android/Fl_Android_Screen_Driver.cxx +++ b/src/drivers/Android/Fl_Android_Screen_Driver.cxx @@ -1133,8 +1133,97 @@ void Fl_Android_Screen_Driver::remove_timeout(Fl_Timeout_Handler cb, void *data) void Fl_Android_Screen_Driver::request_keyboard() { if (pKeyboardCount==0) { + /* ANativeActivity_showSoftInput(Fl_Android_Application::get_activity(), ANATIVEACTIVITY_SHOW_SOFT_INPUT_IMPLICIT); + */ +// void displayKeyboard(bool pShow) + bool pShow = true; + { + // Attaches the current thread to the JVM. + jint lResult; + jint lFlags = 0; + + JavaVM* lJavaVM = Fl_Android_Application::get_activity()->vm; + JNIEnv* lJNIEnv = Fl_Android_Application::get_activity()->env; + + JavaVMAttachArgs lJavaVMAttachArgs; + lJavaVMAttachArgs.version = JNI_VERSION_1_6; + lJavaVMAttachArgs.name = "NativeThread"; + lJavaVMAttachArgs.group = NULL; + + lResult=lJavaVM->AttachCurrentThread(&lJNIEnv, &lJavaVMAttachArgs); + if (lResult == JNI_ERR) { + return; + } + + // Retrieves NativeActivity. + jobject lNativeActivity = Fl_Android_Application::get_activity()->clazz; + jclass ClassNativeActivity = lJNIEnv->GetObjectClass(lNativeActivity); + + // Retrieves Context.INPUT_METHOD_SERVICE. + jclass ClassContext = lJNIEnv->FindClass("android/content/Context"); + jfieldID FieldINPUT_METHOD_SERVICE = + lJNIEnv->GetStaticFieldID(ClassContext, + "INPUT_METHOD_SERVICE", "Ljava/lang/String;"); + jobject INPUT_METHOD_SERVICE = + lJNIEnv->GetStaticObjectField(ClassContext, + FieldINPUT_METHOD_SERVICE); +// jniCheck(INPUT_METHOD_SERVICE); + + // Runs getSystemService(Context.INPUT_METHOD_SERVICE). + jclass ClassInputMethodManager = lJNIEnv->FindClass( + "android/view/inputmethod/InputMethodManager"); + jmethodID MethodGetSystemService = lJNIEnv->GetMethodID( + ClassNativeActivity, "getSystemService", + "(Ljava/lang/String;)Ljava/lang/Object;"); + jobject lInputMethodManager = lJNIEnv->CallObjectMethod( + lNativeActivity, MethodGetSystemService, + INPUT_METHOD_SERVICE); + + // Runs getWindow().getDecorView(). + jmethodID MethodGetWindow = lJNIEnv->GetMethodID( + ClassNativeActivity, "getWindow", + "()Landroid/view/Window;"); + jobject lWindow = lJNIEnv->CallObjectMethod(lNativeActivity, + MethodGetWindow); + jclass ClassWindow = lJNIEnv->FindClass( + "android/view/Window"); + jmethodID MethodGetDecorView = lJNIEnv->GetMethodID( + ClassWindow, "getDecorView", "()Landroid/view/View;"); + jobject lDecorView = lJNIEnv->CallObjectMethod(lWindow, + MethodGetDecorView); + + if (pShow) { + // Runs lInputMethodManager.showSoftInput(...). + jmethodID MethodShowSoftInput = lJNIEnv->GetMethodID( + ClassInputMethodManager, "showSoftInput", + "(Landroid/view/View;I)Z"); + jboolean lResult = lJNIEnv->CallBooleanMethod( + lInputMethodManager, MethodShowSoftInput, + lDecorView, lFlags); + } else { + // Runs lWindow.getViewToken() + jclass ClassView = lJNIEnv->FindClass( + "android/view/View"); + jmethodID MethodGetWindowToken = lJNIEnv->GetMethodID( + ClassView, "getWindowToken", "()Landroid/os/IBinder;"); + jobject lBinder = lJNIEnv->CallObjectMethod(lDecorView, + MethodGetWindowToken); + + // lInputMethodManager.hideSoftInput(...). + jmethodID MethodHideSoftInput = lJNIEnv->GetMethodID( + ClassInputMethodManager, "hideSoftInputFromWindow", + "(Landroid/os/IBinder;I)Z"); + jboolean lRes = lJNIEnv->CallBooleanMethod( + lInputMethodManager, MethodHideSoftInput, + lBinder, lFlags); + } + + // Finished with the JVM. + lJavaVM->DetachCurrentThread(); + } + } pKeyboardCount++; } |
