#include <string.h>
+#include <poll.h>
#include "android.h"
#include <android/log.h>
#include "debug.h"
+#include "event.h"
#include "callback.h"
JNIEnv *jnienv;
jobject *android_activity;
+struct callback_list *android_activity_cbl;
+
+
+int
+android_find_class_global(char *name, jclass *ret)
+{
+ *ret=(*jnienv)->FindClass(jnienv, name);
+ if (! *ret) {
+ dbg(0,"Failed to get Class %s\n",name);
+ return 0;
+ }
+ (*jnienv)->NewGlobalRef(jnienv, *ret);
+ return 1;
+}
+
+int
+android_find_method(jclass class, char *name, char *args, jmethodID *ret)
+{
+ *ret = (*jnienv)->GetMethodID(jnienv, class, name, args);
+ if (*ret == NULL) {
+ dbg(0,"Failed to get Method %s with signature %s\n",name,args);
+ return 0;
+ }
+ return 1;
+}
+
+int
+android_find_static_method(jclass class, char *name, char *args, jmethodID *ret)
+{
+ *ret = (*jnienv)->GetStaticMethodID(jnienv, class, name, args);
+ if (*ret == NULL) {
+ dbg(0,"Failed to get static Method %s with signature %s\n",name,args);
+ return 0;
+ }
+ return 1;
+}
-/* This is a trivial JNI example where we use a native method
- * to return a new VM String. See the corresponding Java source
- * file located at:
- *
- * apps/samples/hello-jni/project/src/com/example/HelloJni/HelloJni.java
- */
JNIEXPORT void JNICALL
-Java_org_navitproject_navit_Navit_NavitMain( JNIEnv* env, jobject thiz, jobject activity)
+Java_org_navitproject_navit_Navit_NavitMain( JNIEnv* env, jobject thiz, jobject activity, jobject lang)
{
char *strings[]={"/data/data/org.navitproject.navit/bin/navit",NULL};
+ char *langstr;
__android_log_print(ANDROID_LOG_ERROR,"test","called");
+ android_activity_cbl=callback_list_new();
jnienv=env;
android_activity=activity;
- dbg(0,"enter env=%p thiz=%p activity=%p\n",env,thiz,activity);
- main(1, strings);
+ (*jnienv)->NewGlobalRef(jnienv, activity);
+ langstr=(*env)->GetStringUTFChars(env, lang, NULL);
+ dbg(0,"enter env=%p thiz=%p activity=%p lang=%s\n",env,thiz,activity,langstr);
+ setenv("LANG",langstr,1);
+ (*env)->ReleaseStringUTFChars(env, lang, langstr);
+ main_real(1, strings);
+}
+
+JNIEXPORT void JNICALL
+Java_org_navitproject_navit_Navit_NavitActivity( JNIEnv* env, jobject thiz, int param)
+{
+ dbg(0,"enter %d\n",param);
+ callback_list_call_1(android_activity_cbl, param);
}
JNIEXPORT void JNICALL
-Java_org_navitproject_navitgraphics_NavitGraphics_SizeChangedCallback( JNIEnv* env, jobject thiz, int id, int w, int h)
+Java_org_navitproject_navit_NavitGraphics_SizeChangedCallback( JNIEnv* env, jobject thiz, int id, int w, int h)
{
dbg(0,"enter %p %d %d\n",(struct callback *)id,w,h);
- callback_call_2((struct callback *)id,w,h);
+ if (id)
+ callback_call_2((struct callback *)id,w,h);
+}
+
+JNIEXPORT void JNICALL
+Java_org_navitproject_navit_NavitGraphics_ButtonCallback( JNIEnv* env, jobject thiz, int id, int pressed, int button, int x, int y)
+{
+ dbg(1,"enter %p %d %d\n",(struct callback *)id,pressed,button);
+ if (id)
+ callback_call_4((struct callback *)id,pressed,button,x,y);
+}
+
+JNIEXPORT void JNICALL
+Java_org_navitproject_navit_NavitGraphics_MotionCallback( JNIEnv* env, jobject thiz, int id, int x, int y)
+{
+ dbg(1,"enter %p %d %d\n",(struct callback *)id,x,y);
+ if (id)
+ callback_call_2((struct callback *)id,x,y);
+}
+
+JNIEXPORT void JNICALL
+Java_org_navitproject_navit_NavitGraphics_KeypressCallback( JNIEnv* env, jobject thiz, int id, jobject str)
+{
+ char *s;
+ dbg(0,"enter %p %p\n",(struct callback *)id,str);
+ s=(*env)->GetStringUTFChars(env, str, NULL);
+ dbg(0,"key=%s\n",s);
+ if (id)
+ callback_call_1((struct callback *)id,s);
+ (*env)->ReleaseStringUTFChars(env, str, s);
}
+
+JNIEXPORT void JNICALL
+Java_org_navitproject_navit_NavitTimeout_TimeoutCallback( JNIEnv* env, jobject thiz, int delete, int id)
+{
+ dbg(1,"enter %p %d %p\n",thiz, delete, (void *)id);
+ callback_call_0((struct callback *)id);
+ if (delete)
+ (*jnienv)->DeleteGlobalRef(jnienv, thiz);
+}
+
+JNIEXPORT void JNICALL
+Java_org_navitproject_navit_NavitVehicle_VehicleCallback( JNIEnv * env, jobject thiz, int id, jobject location)
+{
+ callback_call_1((struct callback *)id, (void *)location);
+}
+
+JNIEXPORT void JNICALL
+Java_org_navitproject_navit_NavitIdle_IdleCallback( JNIEnv* env, jobject thiz, int id)
+{
+ dbg(1,"enter %p %p\n",thiz, (void *)id);
+ callback_call_0((struct callback *)id);
+}
+
+JNIEXPORT void JNICALL
+Java_org_navitproject_navit_NavitWatch_poll( JNIEnv* env, jobject thiz, int fd, int cond)
+{
+ struct pollfd pfd;
+ pfd.fd=fd;
+ dbg(1,"%p poll called for %d %d\n",env, fd, cond);
+ switch ((enum event_watch_cond)cond) {
+ case event_watch_cond_read:
+ pfd.events=POLLIN;
+ break;
+ case event_watch_cond_write:
+ pfd.events=POLLOUT;
+ break;
+ case event_watch_cond_except:
+ pfd.events=POLLERR;
+ break;
+ default:
+ pfd.events=0;
+ }
+ pfd.revents=0;
+ poll(&pfd, 1, -1);
+}
+
+JNIEXPORT void JNICALL
+Java_org_navitproject_navit_NavitWatch_WatchCallback( JNIEnv* env, jobject thiz, int id)
+{
+ dbg(1,"enter %p %p\n",thiz, (void *)id);
+ callback_call_0((struct callback *)id);
+}
+
+
+JNIEXPORT void JNICALL
+Java_org_navitproject_navit_NavitSensors_SensorCallback( JNIEnv* env, jobject thiz, int id, int sensor, float x, float y, float z)
+{
+ dbg(1,"enter %p %p %f %f %f\n",thiz, (void *)id,x,y,z);
+ callback_call_4((struct callback *)id, sensor, &x, &y, &z);
+}
+
+