ac58d38bfe30cb20621be3dd61aa4ca1b8cf7d3c
[navit-package] / navit / android.c
1 #include <string.h>
2 #include <poll.h>
3 #include "android.h"
4 #include <android/log.h>
5 #include "debug.h"
6 #include "event.h"
7 #include "callback.h"
8
9 JNIEnv *jnienv;
10 jobject *android_activity;
11
12
13 int
14 android_find_class_global(char *name, jclass *ret)
15 {
16         *ret=(*jnienv)->FindClass(jnienv, name);
17         if (! *ret) {
18                 dbg(0,"Failed to get Class %s\n",name);
19                 return 0;
20         }
21         (*jnienv)->NewGlobalRef(jnienv, *ret);
22         return 1;
23 }
24
25 int
26 android_find_method(jclass class, char *name, char *args, jmethodID *ret)
27 {
28         *ret = (*jnienv)->GetMethodID(jnienv, class, name, args);
29         if (*ret == NULL) {
30                 dbg(0,"Failed to get Method %s with signature %s\n",name,args);
31                 return 0;
32         }
33         return 1;
34 }
35
36 int
37 android_find_static_method(jclass class, char *name, char *args, jmethodID *ret)
38 {
39         *ret = (*jnienv)->GetStaticMethodID(jnienv, class, name, args);
40         if (*ret == NULL) {
41                 dbg(0,"Failed to get static Method %s with signature %s\n",name,args);
42                 return 0;
43         }
44         return 1;
45 }
46
47 JNIEXPORT void JNICALL
48 Java_org_navitproject_navit_Navit_NavitMain( JNIEnv* env, jobject thiz, jobject activity, jobject lang)
49 {
50         char *strings[]={"/data/data/org.navitproject.navit/bin/navit",NULL};
51         char *langstr;
52         __android_log_print(ANDROID_LOG_ERROR,"test","called");
53         jnienv=env;
54         android_activity=activity;
55         (*jnienv)->NewGlobalRef(jnienv, activity);
56         langstr=(*env)->GetStringUTFChars(env, lang, NULL);
57         dbg(0,"enter env=%p thiz=%p activity=%p lang=%s\n",env,thiz,activity,langstr);
58         setenv("LANG",langstr,1);
59         (*env)->ReleaseStringUTFChars(env, lang, langstr);
60         main_real(1, strings);
61 }
62
63 JNIEXPORT void JNICALL
64 Java_org_navitproject_navit_NavitGraphics_SizeChangedCallback( JNIEnv* env, jobject thiz, int id, int w, int h)
65 {
66         dbg(0,"enter %p %d %d\n",(struct callback *)id,w,h);
67         if (id)
68                 callback_call_2((struct callback *)id,w,h);
69 }
70
71 JNIEXPORT void JNICALL
72 Java_org_navitproject_navit_NavitGraphics_ButtonCallback( JNIEnv* env, jobject thiz, int id, int pressed, int button, int x, int y)
73 {
74         dbg(1,"enter %p %d %d\n",(struct callback *)id,pressed,button);
75         if (id)
76                 callback_call_4((struct callback *)id,pressed,button,x,y);
77 }
78
79 JNIEXPORT void JNICALL
80 Java_org_navitproject_navit_NavitGraphics_MotionCallback( JNIEnv* env, jobject thiz, int id, int x, int y)
81 {
82         dbg(1,"enter %p %d %d\n",(struct callback *)id,x,y);
83         if (id)
84                 callback_call_2((struct callback *)id,x,y);
85 }
86
87 JNIEXPORT void JNICALL
88 Java_org_navitproject_navit_NavitGraphics_KeypressCallback( JNIEnv* env, jobject thiz, int id, jobject str)
89 {
90         char *s;
91         dbg(0,"enter %p %p\n",(struct callback *)id,str);
92         s=(*env)->GetStringUTFChars(env, str, NULL);
93         dbg(0,"key=%s\n",s);
94         if (id)
95                 callback_call_1((struct callback *)id,s);
96         (*env)->ReleaseStringUTFChars(env, str, s);
97 }
98
99 JNIEXPORT void JNICALL
100 Java_org_navitproject_navit_NavitTimeout_TimeoutCallback( JNIEnv* env, jobject thiz, int delete, int id)
101 {
102         dbg(1,"enter %p %d %p\n",thiz, delete, (void *)id);
103         callback_call_0((struct callback *)id);
104         if (delete) 
105                 (*jnienv)->DeleteGlobalRef(jnienv, thiz);
106 }
107
108 JNIEXPORT void JNICALL
109 Java_org_navitproject_navit_NavitVehicle_VehicleCallback( JNIEnv * env, jobject thiz, int id, jobject location)
110 {
111         callback_call_1((struct callback *)id, (void *)location);
112
113
114 JNIEXPORT void JNICALL
115 Java_org_navitproject_navit_NavitIdle_IdleCallback( JNIEnv* env, jobject thiz, int id)
116 {
117         dbg(1,"enter %p %p\n",thiz, (void *)id);
118         callback_call_0((struct callback *)id);
119 }
120
121 JNIEXPORT void JNICALL
122 Java_org_navitproject_navit_NavitWatch_poll( JNIEnv* env, jobject thiz, int fd, int cond)
123 {
124         struct pollfd pfd;
125         pfd.fd=fd;
126         dbg(1,"%p poll called for %d %d\n",env, fd, cond);
127         switch ((enum event_watch_cond)cond) {
128         case event_watch_cond_read:
129                 pfd.events=POLLIN;
130                 break;
131         case event_watch_cond_write:
132                 pfd.events=POLLOUT;
133                 break;
134         case event_watch_cond_except:
135                 pfd.events=POLLERR;
136                 break;
137         default:
138                 pfd.events=0;
139         }
140         pfd.revents=0;
141         poll(&pfd, 1, -1);
142 }
143
144 JNIEXPORT void JNICALL
145 Java_org_navitproject_navit_NavitWatch_WatchCallback( JNIEnv* env, jobject thiz, int id)
146 {
147         dbg(1,"enter %p %p\n",thiz, (void *)id);
148         callback_call_0((struct callback *)id);
149 }
150
151
152 JNIEXPORT void JNICALL
153 Java_org_navitproject_navit_NavitSensors_SensorCallback( JNIEnv* env, jobject thiz, int id, int sensor, float x, float y, float z)
154 {
155         dbg(1,"enter %p %p %f %f %f\n",thiz, (void *)id,x,y,z);
156         callback_call_4((struct callback *)id, sensor, &x, &y, &z);
157 }
158
159