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