summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Melcher <fltk@matthiasm.com>2018-03-24 17:21:36 +0000
committerMatthias Melcher <fltk@matthiasm.com>2018-03-24 17:21:36 +0000
commit5f8cec638327e2541a4e4c165668b5c5897acb35 (patch)
tree1fe1313b4bcbff0d03f1dadf19ce66e282f89728
parentfada3a829188294df580d5e59765114aa4a155b2 (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
-rw-r--r--src/drivers/Android/Fl_Android_Screen_Driver.cxx89
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++;
}