mirror of
https://github.com/fltk/fltk.git
synced 2026-06-06 00:22:42 +08:00
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
This commit is contained in:
@@ -1133,8 +1133,97 @@ void Fl_Android_Screen_Driver::remove_timeout(Fl_Timeout_Handler cb, void *data)
|
|||||||
void Fl_Android_Screen_Driver::request_keyboard()
|
void Fl_Android_Screen_Driver::request_keyboard()
|
||||||
{
|
{
|
||||||
if (pKeyboardCount==0) {
|
if (pKeyboardCount==0) {
|
||||||
|
/*
|
||||||
ANativeActivity_showSoftInput(Fl_Android_Application::get_activity(),
|
ANativeActivity_showSoftInput(Fl_Android_Application::get_activity(),
|
||||||
ANATIVEACTIVITY_SHOW_SOFT_INPUT_IMPLICIT);
|
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++;
|
pKeyboardCount++;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user