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