platform/android/Rhodes/jni/include/JNIRhodes.h in rhodes-1.4.2 vs platform/android/Rhodes/jni/include/JNIRhodes.h in rhodes-1.5.0

- old
+ new

@@ -11,39 +11,105 @@ #include <common/RhoDefs.h> #include <logging/RhoLogConf.h> #include <logging/RhoLog.h> +#include "gapikey.h" + JavaVM *jvm(); void store_thr_jnienv(JNIEnv *env); JNIEnv *jnienv(); -jclass getJNIClass(const char *name); -jclass getJNIObjectClass(jobject obj); -jfieldID getJNIClassField(jclass cls, const char *name, const char *signature); -jfieldID getJNIClassStaticField(jclass cls, const char *name, const char *signature); -jmethodID getJNIClassMethod(jclass cls, const char *name, const char *signature); -jmethodID getJNIClassStaticMethod(jclass cls, const char *name, const char *signature); +enum rho_java_class_t { +#define RHODES_DEFINE_JAVA_CLASS(x, name) x, +#include <details/rhojava.inc> +#undef RHODES_DEFINE_JAVA_CLASS +}; + +extern const char *rho_java_class[]; + +jclass getJNIClass(int n); +jclass getJNIObjectClass(JNIEnv *env, jobject obj); +jfieldID getJNIClassField(JNIEnv *env, jclass cls, const char *name, const char *signature); +jfieldID getJNIClassStaticField(JNIEnv *env, jclass cls, const char *name, const char *signature); +jmethodID getJNIClassMethod(JNIEnv *env, jclass cls, const char *name, const char *signature); +jmethodID getJNIClassStaticMethod(JNIEnv *env, jclass cls, const char *name, const char *signature); + VALUE convertJavaMapToRubyHash(jobject objMap); -#define RHODES_JAVA_CLASS_ANDROID_LOG "android/util/Log" -#define RHODES_JAVA_CLASS_ITERATOR "java/util/Iterator" -#define RHODES_JAVA_CLASS_SET "java/util/Set" -#define RHODES_JAVA_CLASS_MAP "java/util/Map" -#define RHODES_JAVA_CLASS_RHODES "com/rhomobile/rhodes/Rhodes" -#define RHODES_JAVA_CLASS_WEB_VIEW "com/rhomobile/rhodes/WebView" -#define RHODES_JAVA_CLASS_GEO_LOCATION "com/rhomobile/rhodes/geolocation/GeoLocation" -#define RHODES_JAVA_CLASS_CAMERA "com/rhomobile/rhodes/camera/Camera" -#define RHODES_JAVA_CLASS_DATE_TIME_PICKER "com/rhomobile/rhodes/datetime/DateTimePicker" -#define RHODES_JAVA_CLASS_PHONEBOOK "com/rhomobile/rhodes/phonebook/Phonebook" -#define RHODES_JAVA_CLASS_CONTACT "com/rhomobile/rhodes/phonebook/Contact" -#define RHODES_JAVA_CLASS_CONTACT_FIELD "com/rhomobile/rhodes/phonebook/ContactField" -#define RHODES_JAVA_CLASS_ALERT "com/rhomobile/rhodes/alert/Alert" -#define RHODES_JAVA_CLASS_RINGTONE_MANAGER "com/rhomobile/rhodes/RingtoneManager" +namespace details +{ +template <typename T, typename U> +struct rho_cast_helper; + +template <> +struct rho_cast_helper<std::string, jstring> +{ + std::string operator()(JNIEnv *env, jstring ); +}; + +template <> +struct rho_cast_helper<jstring, char const *> +{ + jstring operator()(JNIEnv *env, char const *); +}; + +template <> +struct rho_cast_helper<jstring, char *> +{ + jstring operator()(JNIEnv *env, char *s) {return rho_cast_helper<jstring, char const *>()(env, s);} +}; + +template <int N> +struct rho_cast_helper<jstring, char [N]> +{ + jstring operator()(JNIEnv *env, char (&s)[N]) {return rho_cast_helper<jstring, char const *>()(env, &s[0]);} +}; + +template <> +struct rho_cast_helper<jstring, std::string> +{ + jstring operator()(JNIEnv *env, std::string const &s) {return rho_cast_helper<jstring, char const *>()(env, s.c_str());} +}; + +} // namespace details + +template <typename T, typename U> +T rho_cast(JNIEnv *env, U u) +{ + return details::rho_cast_helper<T, U>()(env, u); +} + +template <typename T, typename U> +T rho_cast(U u) +{ + return details::rho_cast_helper<T, U>()(jnienv(), u); +} + #define RHO_NOT_IMPLEMENTED RAWLOG_ERROR3("WARNING: Call not implemented function: \"%s\" (defined here: %s:%d)", __PRETTY_FUNCTION__, __FILE__, __LINE__) //#define RHO_LOG_CALLBACK RAWLOG_INFO1("Callback \"%s\" called", __PRETTY_FUNCTION__) //#define RHO_LOG_JNI_CALL RAWLOG_INFO1("JNI method \"%s\" called", __PRETTY_FUNCTION__) + +class RhoValueConverter +{ +private: + jclass clsHashMap; + jclass clsVector; + + jmethodID midHashMapConstructor; + jmethodID midVectorConstructor; + jmethodID midPut; + jmethodID midAddElement; + + JNIEnv *env; + bool init; + +public: + RhoValueConverter(JNIEnv *e); + + jobject createObject(rho_param *p); +}; #endif // RHO_JNI_RHODES_57d3a700b706402190ead97fd1383bee