From 5f8cec638327e2541a4e4c165668b5c5897acb35 Mon Sep 17 00:00:00 2001 From: Matthias Melcher Date: Sat, 24 Mar 2018 17:21:36 +0000 Subject: 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 --- src/drivers/Android/Fl_Android_Screen_Driver.cxx | 89 ++++++++++++++++++++++++ 1 file changed, 89 insertions(+) (limited to 'src/drivers/Android/Fl_Android_Screen_Driver.cxx') 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++; } -- cgit v1.2.3