[DEV] add setTitle from C to Android + some improvements
This commit is contained in:
parent
0df2c89ed0
commit
fcde1ff26f
@ -22,12 +22,13 @@
|
|||||||
// get a resources from the java environement :
|
// get a resources from the java environement :
|
||||||
static JNIEnv* JavaVirtualMachinePointer = NULL; // the JVM
|
static JNIEnv* JavaVirtualMachinePointer = NULL; // the JVM
|
||||||
static jclass javaClassEwol = 0; // main activity class (android ...)
|
static jclass javaClassEwol = 0; // main activity class (android ...)
|
||||||
static jclass javaClassEwolCallback = 0;
|
static jclass javaClassEwolCallbackAndActivity = 0;
|
||||||
static jobject javaObjectEwolCallback = 0;
|
static jobject javaObjectEwolCallbackAndActivity = 0;
|
||||||
|
|
||||||
static jmethodID javaMethodEwolCallbackEventNotifier = 0; // basic methode to call ...
|
static jmethodID javaMethodEwolCallbackEventNotifier = 0; // basic methode to call ...
|
||||||
static jmethodID javaMethodEwolCallbackKeyboardUpdate = 0; // basic methode to call ...
|
static jmethodID javaMethodEwolCallbackKeyboardUpdate = 0; // basic methode to call ...
|
||||||
static jmethodID javaMethodEwolCallbackOrientationUpdate = 0;
|
static jmethodID javaMethodEwolCallbackOrientationUpdate = 0;
|
||||||
|
static jmethodID javaMethodEwolActivitySetTitle = 0;
|
||||||
// generic classes
|
// generic classes
|
||||||
static jclass javaDefaultClassString = 0; // default string class
|
static jclass javaDefaultClassString = 0; // default string class
|
||||||
|
|
||||||
@ -52,6 +53,14 @@ static ewol::SpecialKey guiKeyBoardSpecialKeyMode;
|
|||||||
} \
|
} \
|
||||||
})
|
})
|
||||||
|
|
||||||
|
static void java_check_exception(JNIEnv* env) {
|
||||||
|
if (env->ExceptionOccurred()) {
|
||||||
|
EWOL_DEBUG("C->java : EXEPTION ...");
|
||||||
|
env->ExceptionDescribe();
|
||||||
|
env->ExceptionClear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static bool java_attach_current_thread(int *rstatus) {
|
static bool java_attach_current_thread(int *rstatus) {
|
||||||
EWOL_DEBUG("C->java : call java");
|
EWOL_DEBUG("C->java : call java");
|
||||||
if (NULL == g_JavaVM) {
|
if (NULL == g_JavaVM) {
|
||||||
@ -66,11 +75,7 @@ static bool java_attach_current_thread(int *rstatus) {
|
|||||||
lJavaVMAttachArgs.name = "EwolNativeThread";
|
lJavaVMAttachArgs.name = "EwolNativeThread";
|
||||||
lJavaVMAttachArgs.group = NULL;
|
lJavaVMAttachArgs.group = NULL;
|
||||||
int status = g_JavaVM->AttachCurrentThread(&JavaVirtualMachinePointer_tmp, &lJavaVMAttachArgs);
|
int status = g_JavaVM->AttachCurrentThread(&JavaVirtualMachinePointer_tmp, &lJavaVMAttachArgs);
|
||||||
if (JavaVirtualMachinePointer->ExceptionOccurred()) {
|
java_check_exception(JavaVirtualMachinePointer);
|
||||||
EWOL_DEBUG("C->java : EXEPTION ...");
|
|
||||||
JavaVirtualMachinePointer->ExceptionDescribe();
|
|
||||||
JavaVirtualMachinePointer->ExceptionClear();
|
|
||||||
}
|
|
||||||
if (status != JNI_OK) {
|
if (status != JNI_OK) {
|
||||||
EWOL_DEBUG("C->java : AttachCurrentThread failed : " << status);
|
EWOL_DEBUG("C->java : AttachCurrentThread failed : " << status);
|
||||||
return false;
|
return false;
|
||||||
@ -83,21 +88,15 @@ static void java_detach_current_thread(int status) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void SendJavaKeyboardUpdate(bool showIt)
|
void SendJavaKeyboardUpdate(bool showIt)
|
||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
if(!java_attach_current_thread(&status)) return;
|
if(!java_attach_current_thread(&status)) return;
|
||||||
|
|
||||||
//Call java ...
|
//Call java ...
|
||||||
JavaVirtualMachinePointer->CallVoidMethod(javaObjectEwolCallback, javaMethodEwolCallbackKeyboardUpdate, showIt ? JNI_TRUE : JNI_FALSE);
|
JavaVirtualMachinePointer->CallVoidMethod(javaObjectEwolCallbackAndActivity, javaMethodEwolCallbackKeyboardUpdate, showIt ? JNI_TRUE : JNI_FALSE);
|
||||||
// manage execption :
|
// manage execption :
|
||||||
if (JavaVirtualMachinePointer->ExceptionOccurred()) {
|
java_check_exception(JavaVirtualMachinePointer);
|
||||||
EWOL_DEBUG("C->java : EXEPTION ...");
|
|
||||||
JavaVirtualMachinePointer->ExceptionDescribe();
|
|
||||||
JavaVirtualMachinePointer->ExceptionClear();
|
|
||||||
}
|
|
||||||
java_detach_current_thread(status);
|
java_detach_current_thread(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -116,41 +115,36 @@ void SendJavaOrientationUpdate(int32_t mode)
|
|||||||
JavaVirtualMachinePointer->CallVoidMethod(javaObjectActivity, javaMethodEwolCallbackOrientationUpdate, param);
|
JavaVirtualMachinePointer->CallVoidMethod(javaObjectActivity, javaMethodEwolCallbackOrientationUpdate, param);
|
||||||
|
|
||||||
// manage execption :
|
// manage execption :
|
||||||
if (JavaVirtualMachinePointer->ExceptionOccurred()) {
|
java_check_exception(JavaVirtualMachinePointer);
|
||||||
EWOL_DEBUG("C->java : EXEPTION ...");
|
|
||||||
JavaVirtualMachinePointer->ExceptionDescribe();
|
|
||||||
JavaVirtualMachinePointer->ExceptionClear();
|
|
||||||
}
|
|
||||||
java_detach_current_thread(status);
|
java_detach_current_thread(status);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void SendJavaSetTitle(const char * dataString)
|
||||||
|
{
|
||||||
|
EWOL_DEBUG("C->java : send message to the java : \"" << dataString << "\"");
|
||||||
|
int status;
|
||||||
|
if(!java_attach_current_thread(&status)) return;
|
||||||
|
EWOL_DEBUG("C->java : 222");
|
||||||
|
if (NULL == dataString) {
|
||||||
|
EWOL_ERROR("C->java : No data to send ...");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//Call java ...
|
||||||
|
JavaVirtualMachinePointer->CallVoidMethod(javaObjectEwolCallbackAndActivity, javaMethodEwolActivitySetTitle, JavaVirtualMachinePointer->NewStringUTF(dataString));
|
||||||
|
// manage execption :
|
||||||
|
java_check_exception(JavaVirtualMachinePointer);
|
||||||
|
java_detach_current_thread(status);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void SendSystemMessage(const char * dataString)
|
void SendSystemMessage(const char * dataString)
|
||||||
{
|
{
|
||||||
EWOL_DEBUG("C->java : send message to the java : \"" << dataString << "\"");
|
EWOL_DEBUG("C->java : send message to the java : \"" << dataString << "\"");
|
||||||
if (NULL == g_JavaVM) {
|
int status;
|
||||||
EWOL_DEBUG("C->java : JVM not initialised");
|
if(!java_attach_current_thread(&status)) return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
JNIEnv *JavaVirtualMachinePointer_tmp;
|
|
||||||
int status = g_JavaVM->GetEnv((void **) &JavaVirtualMachinePointer_tmp, JNI_VERSION_1_6);
|
|
||||||
if (status == JNI_EDETACHED) {
|
|
||||||
JavaVMAttachArgs lJavaVMAttachArgs;
|
|
||||||
lJavaVMAttachArgs.version = JNI_VERSION_1_6;
|
|
||||||
lJavaVMAttachArgs.name = "EwolNativeThread";
|
|
||||||
lJavaVMAttachArgs.group = NULL;
|
|
||||||
status = g_JavaVM->AttachCurrentThread(&JavaVirtualMachinePointer_tmp, &lJavaVMAttachArgs);
|
|
||||||
if (status != JNI_OK) {
|
|
||||||
EWOL_ERROR("C->java : AttachCurrentThread failed : " << status);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
EWOL_DEBUG("C->java : 111");
|
|
||||||
if (NULL == JavaVirtualMachinePointer) {
|
|
||||||
EWOL_ERROR("C->java : JVM not initialised");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
EWOL_DEBUG("C->java : 222");
|
EWOL_DEBUG("C->java : 222");
|
||||||
if (NULL == dataString) {
|
if (NULL == dataString) {
|
||||||
EWOL_ERROR("C->java : No data to send ...");
|
EWOL_ERROR("C->java : No data to send ...");
|
||||||
@ -172,20 +166,15 @@ void SendSystemMessage(const char * dataString)
|
|||||||
}
|
}
|
||||||
EWOL_DEBUG("C->java : 555");
|
EWOL_DEBUG("C->java : 555");
|
||||||
//Call java ...
|
//Call java ...
|
||||||
JavaVirtualMachinePointer->CallVoidMethod(javaObjectEwolCallback, javaMethodEwolCallbackEventNotifier, args);
|
JavaVirtualMachinePointer->CallVoidMethod(javaObjectEwolCallbackAndActivity, javaMethodEwolCallbackEventNotifier, args);
|
||||||
|
|
||||||
EWOL_DEBUG("C->java : 666");
|
EWOL_DEBUG("C->java : 666");
|
||||||
// manage execption :
|
java_check_exception(JavaVirtualMachinePointer);
|
||||||
if (JavaVirtualMachinePointer->ExceptionOccurred()) {
|
java_detach_current_thread(status);
|
||||||
JavaVirtualMachinePointer->ExceptionDescribe();
|
|
||||||
JavaVirtualMachinePointer->ExceptionClear();
|
|
||||||
}
|
|
||||||
if (status == JNI_EDETACHED) {
|
|
||||||
// Finished with the JVM.
|
|
||||||
g_JavaVM->DetachCurrentThread();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
namespace guiAbstraction {
|
namespace guiAbstraction {
|
||||||
void SendKeyboardEvent(bool isDown, uniChar_t keyInput);
|
void SendKeyboardEvent(bool isDown, uniChar_t keyInput);
|
||||||
};
|
};
|
||||||
@ -239,32 +228,38 @@ extern "C"
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
/* The object field extends Activity and implement EwolCallback */
|
/* The object field extends Activity and implement EwolCallback */
|
||||||
javaClassEwolCallback = JavaVirtualMachinePointer->GetObjectClass(objCallback);
|
javaClassEwolCallbackAndActivity = JavaVirtualMachinePointer->GetObjectClass(objCallback);
|
||||||
if(javaClassEwolCallback == NULL) {
|
if(javaClassEwolCallbackAndActivity == NULL) {
|
||||||
EWOL_ERROR("C->java : Can't find org/ewol/EwolCallback class");
|
EWOL_ERROR("C->java : Can't find org/ewol/EwolCallback class");
|
||||||
// remove access on the virtual machine :
|
// remove access on the virtual machine :
|
||||||
JavaVirtualMachinePointer = NULL;
|
JavaVirtualMachinePointer = NULL;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__jni_safe_init_method_id(
|
||||||
|
javaMethodEwolActivitySetTitle,
|
||||||
|
javaClassEwolCallbackAndActivity,
|
||||||
|
"setTitle", "(Ljava/lang/CharSequence;)V");
|
||||||
|
|
||||||
__jni_safe_init_method_id(
|
__jni_safe_init_method_id(
|
||||||
javaMethodEwolCallbackEventNotifier,
|
javaMethodEwolCallbackEventNotifier,
|
||||||
javaClassEwolCallback,
|
javaClassEwolCallbackAndActivity,
|
||||||
"eventNotifier", "([Ljava/lang/String;)V");
|
"eventNotifier", "([Ljava/lang/String;)V");
|
||||||
|
|
||||||
__jni_safe_init_method_id(
|
__jni_safe_init_method_id(
|
||||||
javaMethodEwolCallbackKeyboardUpdate,
|
javaMethodEwolCallbackKeyboardUpdate,
|
||||||
javaClassEwolCallback,
|
javaClassEwolCallbackAndActivity,
|
||||||
"keyboardUpdate", "(Z)V");
|
"keyboardUpdate", "(Z)V");
|
||||||
|
|
||||||
__jni_safe_init_method_id(
|
__jni_safe_init_method_id(
|
||||||
javaMethodEwolCallbackOrientationUpdate,
|
javaMethodEwolCallbackOrientationUpdate,
|
||||||
javaClassEwolCallback,
|
javaClassEwolCallbackAndActivity,
|
||||||
"orientationUpdate", "(I)V");
|
"orientationUpdate", "(I)V");
|
||||||
|
|
||||||
|
|
||||||
//javaObjectActivity = JavaVirtualMachinePointer->NewGlobalRef(obj);
|
//javaObjectActivity = JavaVirtualMachinePointer->NewGlobalRef(obj);
|
||||||
/* realy unsafe... */
|
/* realy unsafe... */
|
||||||
javaObjectEwolCallback = objCallback;
|
javaObjectEwolCallbackAndActivity = objCallback;
|
||||||
|
|
||||||
javaDefaultClassString = JavaVirtualMachinePointer->FindClass("java/lang/String" );
|
javaDefaultClassString = JavaVirtualMachinePointer->FindClass("java/lang/String" );
|
||||||
if (javaDefaultClassString == 0) {
|
if (javaDefaultClassString == 0) {
|
||||||
@ -284,10 +279,7 @@ extern "C"
|
|||||||
void Java_org_ewol_Ewol_touchEvent( JNIEnv* env, jobject thiz )
|
void Java_org_ewol_Ewol_touchEvent( JNIEnv* env, jobject thiz )
|
||||||
{
|
{
|
||||||
EWOL_DEBUG(" ==> Touch Event");
|
EWOL_DEBUG(" ==> Touch Event");
|
||||||
if (env->ExceptionOccurred()) {
|
java_check_exception(env);
|
||||||
env->ExceptionDescribe();
|
|
||||||
env->ExceptionClear();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Java_org_ewol_Ewol_onCreate( JNIEnv* env, jobject thiz )
|
void Java_org_ewol_Ewol_onCreate( JNIEnv* env, jobject thiz )
|
||||||
@ -475,7 +467,7 @@ int64_t guiInterface::GetTime(void)
|
|||||||
|
|
||||||
void guiInterface::SetTitle(etk::UString& title)
|
void guiInterface::SetTitle(etk::UString& title)
|
||||||
{
|
{
|
||||||
// can not set the title in Android ...
|
SendJavaSetTitle(title.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user