platform/android/Rhodes/jni/src/callbacks.cpp in rhodes-1.5.5 vs platform/android/Rhodes/jni/src/callbacks.cpp in rhodes-2.0.0.beta1
- old
+ new
@@ -4,11 +4,11 @@
#include "ruby/ext/rho/rhoruby.h"
#undef DEFAULT_LOGCATEGORY
#define DEFAULT_LOGCATEGORY "Callbacks"
-extern "C" void webview_navigate(char* url, int index);
+extern "C" void rho_webview_navigate(const char* url, int index);
namespace rho
{
namespace common
{
@@ -23,11 +23,11 @@
RHO_GLOBAL void rho_map_location(char* query)
{
rho::String url = "http://maps.google.com/?";
url += query;
- webview_navigate((char*)url.c_str(), 0);
+ rho_webview_navigate(url.c_str(), 0);
}
RHO_GLOBAL void rho_appmanager_load( void* /*httpContext*/, const char* /*szQuery*/)
{
// Nothing
@@ -62,16 +62,11 @@
return 0;
}
RHO_GLOBAL void rho_net_impl_network_indicator(int enable)
{
- JNIEnv *env = jnienv();
- jclass cls = getJNIClass(RHODES_JAVA_CLASS_RHODES);
- if (!cls) return;
- jmethodID mid = getJNIClassStaticMethod(env, cls, "showNetworkIndicator", "(Z)V");
- if (!mid) return;
- env->CallStaticVoidMethod(cls, mid, enable);
+ // No GUI indicator on Android
}
RHO_GLOBAL void *rho_nativethread_start()
{
JNIEnv *env;
@@ -83,54 +78,89 @@
RHO_GLOBAL void rho_nativethread_end(void *)
{
jvm()->DetachCurrentThread();
}
-RHO_GLOBAL VALUE rho_sysimpl_get_property(char* szPropName)
+RHO_GLOBAL int rho_sysimpl_get_property(char* szPropName, VALUE* resValue)
{
- VALUE nil = rho_ruby_get_NIL();
-
JNIEnv *env = jnienv();
jclass cls = getJNIClass(RHODES_JAVA_CLASS_RHODES);
- if (!cls) return nil;
+ if (!cls) return 0;
jmethodID mid = getJNIClassStaticMethod(env, cls, "getProperty", "(Ljava/lang/String;)Ljava/lang/Object;");
- if (!mid) return nil;
+ if (!mid) return 0;
jobject result = env->CallStaticObjectMethod(cls, mid, rho_cast<jstring>(szPropName));
- if (!result) return nil;
+ if (!result) return 0;
jclass clsBoolean = getJNIClass(RHODES_JAVA_CLASS_BOOLEAN);
jclass clsInteger = getJNIClass(RHODES_JAVA_CLASS_INTEGER);
+ jclass clsFloat = getJNIClass(RHODES_JAVA_CLASS_FLOAT);
+ jclass clsDouble = getJNIClass(RHODES_JAVA_CLASS_DOUBLE);
jclass clsString = getJNIClass(RHODES_JAVA_CLASS_STRING);
if (env->IsInstanceOf(result, clsBoolean)) {
jmethodID midValue = getJNIClassMethod(env, clsBoolean, "booleanValue", "()Z");
- return rho_ruby_create_boolean((int)env->CallBooleanMethod(result, midValue));
+ *resValue = rho_ruby_create_boolean((int)env->CallBooleanMethod(result, midValue));
+ return 1;
}
else if (env->IsInstanceOf(result, clsInteger)) {
jmethodID midValue = getJNIClassMethod(env, clsInteger, "intValue", "()I");
- return rho_ruby_create_integer((int)env->CallIntMethod(result, midValue));
+ *resValue = rho_ruby_create_integer((int)env->CallIntMethod(result, midValue));
+ return 1;
}
+ else if (env->IsInstanceOf(result, clsFloat)) {
+ jmethodID midValue = getJNIClassMethod(env, clsFloat, "floatValue", "()F");
+ *resValue = rho_ruby_create_double((double)env->CallFloatMethod(result, midValue));
+ return 1;
+ }
+ else if (env->IsInstanceOf(result, clsDouble)) {
+ jmethodID midValue = getJNIClassMethod(env, clsDouble, "doubleValue", "()D");
+ *resValue = rho_ruby_create_double((double)env->CallDoubleMethod(result, midValue));
+ return 1;
+ }
else if (env->IsInstanceOf(result, clsString)) {
jstring resStrObj = (jstring)result;
- return rho_ruby_create_string(rho_cast<std::string>(resStrObj).c_str());
+ *resValue = rho_ruby_create_string(rho_cast<std::string>(resStrObj).c_str());
+ return 1;
}
- return nil;
+ return 0;
}
RHO_GLOBAL VALUE rho_sys_get_locale()
{
- return rho_sysimpl_get_property((char*)"locale");
+ VALUE res;
+ if ( rho_sysimpl_get_property((char*)"locale", &res) )
+ return res;
+
+ return rho_ruby_get_NIL();
}
RHO_GLOBAL int rho_sys_get_screen_width()
{
- return NUM2INT(rho_sysimpl_get_property((char*)"screen_width"));
+ VALUE res;
+ if ( rho_sysimpl_get_property((char*)"screen_width", &res) )
+ return NUM2INT(res);
+
+ return 0;
}
RHO_GLOBAL int rho_sys_get_screen_height()
{
- return NUM2INT(rho_sysimpl_get_property((char*)"screen_height"));
+ VALUE res;
+ if ( rho_sysimpl_get_property((char*)"screen_height", &res) )
+ return NUM2INT(res);
+
+ return 0;
+}
+
+RHO_GLOBAL void rho_sys_app_exit()
+{
+ JNIEnv *env = jnienv();
+ jclass cls = getJNIClass(RHODES_JAVA_CLASS_RHODES);
+ if (!cls) return;
+ jmethodID mid = getJNIClassStaticMethod(env, cls, "exit", "()V");
+ if (!mid) return;
+ env->CallStaticVoidMethod(cls, mid);
}