Fix:Core:Some android fixes
[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         (*env)->ReleaseStringUTFChars(env, lang, langstr);
59         main_real(1, strings);
60 }
61
62 JNIEXPORT void JNICALL
63 Java_org_navitproject_navit_NavitGraphics_SizeChangedCallback( JNIEnv* env, jobject thiz, int id, int w, int h)
64 {
65         dbg(0,"enter %p %d %d\n",(struct callback *)id,w,h);
66         if (id)
67                 callback_call_2((struct callback *)id,w,h);
68 }
69
70 JNIEXPORT void JNICALL
71 Java_org_navitproject_navit_NavitGraphics_ButtonCallback( JNIEnv* env, jobject thiz, int id, int pressed, int button, int x, int y)
72 {
73         dbg(1,"enter %p %d %d\n",(struct callback *)id,pressed,button);
74         if (id)
75                 callback_call_4((struct callback *)id,pressed,button,x,y);
76 }
77
78 JNIEXPORT void JNICALL
79 Java_org_navitproject_navit_NavitGraphics_MotionCallback( JNIEnv* env, jobject thiz, int id, int x, int y)
80 {
81         dbg(1,"enter %p %d %d\n",(struct callback *)id,x,y);
82         if (id)
83                 callback_call_2((struct callback *)id,x,y);
84 }
85
86 JNIEXPORT void JNICALL
87 Java_org_navitproject_navit_NavitTimeout_TimeoutCallback( JNIEnv* env, jobject thiz, int delete, int id)
88 {
89         dbg(1,"enter %p %d %p\n",thiz, delete, (void *)id);
90         callback_call_0((struct callback *)id);
91         if (delete) 
92                 (*jnienv)->DeleteGlobalRef(jnienv, thiz);
93 }
94
95 JNIEXPORT void JNICALL
96 Java_org_navitproject_navit_NavitVehicle_VehicleCallback( JNIEnv * env, jobject thiz, int id, jobject location)
97 {
98         callback_call_1((struct callback *)id, (void *)location);
99
100
101 JNIEXPORT void JNICALL
102 Java_org_navitproject_navit_NavitIdle_IdleCallback( JNIEnv* env, jobject thiz, int id)
103 {
104         dbg(1,"enter %p %p\n",thiz, (void *)id);
105         callback_call_0((struct callback *)id);
106 }
107
108 JNIEXPORT void JNICALL
109 Java_org_navitproject_navit_NavitWatch_poll( JNIEnv* env, jobject thiz, int fd, int cond)
110 {
111         struct pollfd pfd;
112         pfd.fd=fd;
113         dbg(1,"%p poll called for %d %d\n",env, fd, cond);
114         switch ((enum event_watch_cond)cond) {
115         case event_watch_cond_read:
116                 pfd.events=POLLIN;
117                 break;
118         case event_watch_cond_write:
119                 pfd.events=POLLOUT;
120                 break;
121         case event_watch_cond_except:
122                 pfd.events=POLLERR;
123                 break;
124         default:
125                 pfd.events=0;
126         }
127         pfd.revents=0;
128         poll(&pfd, 1, -1);
129 }
130
131 JNIEXPORT void JNICALL
132 Java_org_navitproject_navit_NavitWatch_WatchCallback( JNIEnv* env, jobject thiz, int id)
133 {
134         dbg(1,"enter %p %p\n",thiz, (void *)id);
135         callback_call_0((struct callback *)id);
136 }
137
138