5 #include <android/log.h>
13 #include "projection.h"
16 #include "navit_nls.h"
17 #include "transform.h"
21 #include "start_real.h"
26 jobject *android_activity;
30 android_find_class_global(char *name, jclass *ret)
32 *ret=(*jnienv)->FindClass(jnienv, name);
34 dbg(0,"Failed to get Class %s\n",name);
37 *ret = (*jnienv)->NewGlobalRef(jnienv, *ret);
42 android_find_method(jclass class, char *name, char *args, jmethodID *ret)
44 *ret = (*jnienv)->GetMethodID(jnienv, class, name, args);
46 dbg(0,"Failed to get Method %s with signature %s\n",name,args);
52 JNIEXPORT void JNICALL
53 Java_org_navitproject_navit_Navit_NavitMain( JNIEnv* env, jobject thiz, jobject activity, jobject lang, int version, jobject display_density_string, jobject path)
55 char *strings[]={NULL,NULL};
57 const char *displaydensitystr;
58 android_version=version;
59 __android_log_print(ANDROID_LOG_ERROR,"test","called");
61 android_activity = (*jnienv)->NewGlobalRef(jnienv, activity);
62 langstr=(*env)->GetStringUTFChars(env, lang, NULL);
63 dbg(0,"enter env=%p thiz=%p activity=%p lang=%s version=%d\n",env,thiz,android_activity,langstr,version);
64 setenv("LANG",langstr,1);
65 (*env)->ReleaseStringUTFChars(env, lang, langstr);
67 displaydensitystr=(*env)->GetStringUTFChars(env, display_density_string, NULL);
68 dbg(0,"*****displaydensity=%s\n",displaydensitystr);
69 setenv("ANDROID_DENSITY",displaydensitystr,1);
70 (*env)->ReleaseStringUTFChars(env, display_density_string, displaydensitystr);
71 strings[0]=(*env)->GetStringUTFChars(env, path, NULL);
72 main_real(1, strings);
73 (*env)->ReleaseStringUTFChars(env, path, strings[0]);
77 JNIEXPORT void JNICALL
78 Java_org_navitproject_navit_Navit_NavitDestroy( JNIEnv* env)
80 dbg(0, "shutdown navit\n");
84 JNIEXPORT void JNICALL
85 Java_org_navitproject_navit_NavitGraphics_SizeChangedCallback( JNIEnv* env, jobject thiz, int id, int w, int h)
87 dbg(0,"enter %p %d %d\n",(struct callback *)id,w,h);
89 callback_call_2((struct callback *)id,w,h);
92 JNIEXPORT void JNICALL
93 Java_org_navitproject_navit_NavitGraphics_ButtonCallback( JNIEnv* env, jobject thiz, int id, int pressed, int button, int x, int y)
95 dbg(1,"enter %p %d %d\n",(struct callback *)id,pressed,button);
97 callback_call_4((struct callback *)id,pressed,button,x,y);
100 JNIEXPORT void JNICALL
101 Java_org_navitproject_navit_NavitGraphics_MotionCallback( JNIEnv* env, jobject thiz, int id, int x, int y)
103 dbg(1,"enter %p %d %d\n",(struct callback *)id,x,y);
105 callback_call_2((struct callback *)id,x,y);
108 JNIEXPORT void JNICALL
109 Java_org_navitproject_navit_NavitGraphics_KeypressCallback( JNIEnv* env, jobject thiz, int id, jobject str)
112 dbg(0,"enter %p %p\n",(struct callback *)id,str);
113 s=(*env)->GetStringUTFChars(env, str, NULL);
116 callback_call_1((struct callback *)id,s);
117 (*env)->ReleaseStringUTFChars(env, str, s);
120 JNIEXPORT void JNICALL
121 Java_org_navitproject_navit_NavitTimeout_TimeoutCallback( JNIEnv* env, jobject thiz, int id)
123 void (*event_handler)(void *) = *(void **)id;
124 dbg(1,"enter %p %p\n",thiz, (void *)id);
125 event_handler((void*)id);
128 JNIEXPORT void JNICALL
129 Java_org_navitproject_navit_NavitVehicle_VehicleCallback( JNIEnv * env, jobject thiz, int id, jobject location)
131 callback_call_1((struct callback *)id, (void *)location);
134 JNIEXPORT void JNICALL
135 Java_org_navitproject_navit_NavitIdle_IdleCallback( JNIEnv* env, jobject thiz, int id)
137 dbg(1,"enter %p %p\n",thiz, (void *)id);
138 callback_call_0((struct callback *)id);
141 JNIEXPORT void JNICALL
142 Java_org_navitproject_navit_NavitWatch_poll( JNIEnv* env, jobject thiz, int func, int fd, int cond)
144 void (*pollfunc)(JNIEnv *env, int fd, int cond)=(void *)func;
146 pollfunc(env, fd, cond);
149 JNIEXPORT void JNICALL
150 Java_org_navitproject_navit_NavitWatch_WatchCallback( JNIEnv* env, jobject thiz, int id)
152 dbg(1,"enter %p %p\n",thiz, (void *)id);
153 callback_call_0((struct callback *)id);
157 JNIEXPORT void JNICALL
158 Java_org_navitproject_navit_NavitSensors_SensorCallback( JNIEnv* env, jobject thiz, int id, int sensor, float x, float y, float z)
160 dbg(1,"enter %p %p %f %f %f\n",thiz, (void *)id,x,y,z);
161 callback_call_4((struct callback *)id, sensor, &x, &y, &z);
165 android_return_search_result(struct jni_object *jni_o, char *str)
170 js2 = (*env2)->NewStringUTF(jni_o->env,str);
171 (*env2)->CallVoidMethod(jni_o->env, jni_o->jo, jni_o->jm, js2);
172 (*env2)->DeleteLocalRef(jni_o->env, js2);
175 JNIEXPORT void JNICALL
176 Java_org_navitproject_navit_NavitGraphics_CallbackSearchResultList( JNIEnv* env, jobject thiz, int partial, jobject country, jobject str)
179 const char *search_string =(*env)->GetStringUTFChars(env, str, NULL);
180 dbg(0,"search '%s'\n", search_string);
182 config_get_attr(config_get(), attr_navit, &attr, NULL);
184 jclass cls = (*env)->GetObjectClass(env,thiz);
185 jmethodID aMethodID = (*env)->GetMethodID(env, cls, "fillStringArray", "(Ljava/lang/String;)V");
188 struct jni_object my_jni_object;
190 struct mapset *ms4=navit_get_mapset(attr.u.navit);
191 struct search_list *sl = search_list_new(ms4);
192 struct attr country_attr;
193 const char *str_country=(*env)->GetStringUTFChars(env, country, NULL);
195 country_attr.type=attr_country_iso2;
196 country_attr.u.str=str_country;
198 search_list_search(sl, &country_attr, 0);
199 (*env)->ReleaseStringUTFChars(env, country, str_country);
201 my_jni_object.env=env;
202 my_jni_object.jo=thiz;
203 my_jni_object.jm=aMethodID;
205 /* TODO (rikky#1#): does return nothing yet, also should use a generic callback instead of jni_object */
206 ret=search_by_address(sl,search_string,partial,&my_jni_object);
207 search_list_destroy(sl);
209 dbg(0,"ret=%p\n",ret);
214 dbg(0,"**** Unable to get methodID: fillStringArray");
216 (*env)->ReleaseStringUTFChars(env, str, search_string);
220 JNIEXPORT jstring JNICALL
221 Java_org_navitproject_navit_NavitGraphics_CallbackLocalizedString( JNIEnv* env, jobject thiz, jobject str)
224 const char *localized_str;
226 s=(*env)->GetStringUTFChars(env, str, NULL);
227 //dbg(0,"*****string=%s\n",s);
229 localized_str=gettext(s);
230 //dbg(0,"localized string=%s",localized_str);
232 // jstring dataStringValue = (jstring) localized_str;
233 jstring js = (*env)->NewStringUTF(env,localized_str);
235 (*env)->ReleaseStringUTFChars(env, str, s);
240 JNIEXPORT void JNICALL
241 Java_org_navitproject_navit_NavitGraphics_CallbackMessageChannel( JNIEnv* env, jobject thiz, int channel, jobject str)
245 dbg(0,"enter %d %p\n",channel,str);
247 config_get_attr(config_get(), attr_navit, &attr, NULL);
253 navit_zoom_in_cursor(attr.u.navit, 2);
254 navit_draw(attr.u.navit);
258 navit_zoom_out_cursor(attr.u.navit, 2);
259 navit_draw(attr.u.navit);
263 struct mapset *ms = navit_get_mapset(attr.u.navit);
264 struct attr type, name, data, *attrs[4];
265 char *map_location=(*env)->GetStringUTFChars(env, str, NULL);
266 dbg(0,"*****string=%s\n",map_location);
268 type.u.str="binfile";
271 data.u.str=g_strdup(map_location);
274 name.u.str=g_strdup(map_location);
276 attrs[0]=&type; attrs[1]=&data; attrs[2]=&name; attrs[3]=NULL;
278 struct map * new_map = map_new(NULL, attrs);
282 mapset_add_attr(ms, &map_a);
283 navit_draw(attr.u.navit);
284 (*env)->ReleaseStringUTFChars(env, str, map_location);
289 struct mapset *ms = navit_get_mapset(attr.u.navit);
291 char *map_location=(*env)->GetStringUTFChars(env, str, NULL);
292 struct map * delete_map = mapset_get_map_by_name(ms, map_location);
294 dbg(0,"delete map %s (%p)", map_location, delete_map);
296 map_r.u.map=delete_map;
297 mapset_remove_attr(ms, &map_r);
298 navit_draw(attr.u.navit);
299 (*env)->ReleaseStringUTFChars(env, str, map_location);
303 // call a command (like in gui)
304 s=(*env)->GetStringUTFChars(env, str, NULL);
305 dbg(0,"*****string=%s\n",s);
306 command_evaluate(&attr,s);
307 (*env)->ReleaseStringUTFChars(env, str, s);
311 // navigate to display position
317 struct transformation *transform=navit_get_trans(attr.u.navit);
319 s=(*env)->GetStringUTFChars(env, str, NULL);
320 char parse_str[strlen(s) + 1];
321 strcpy(parse_str, s);
322 (*env)->ReleaseStringUTFChars(env, str, s);
323 dbg(0,"*****string=%s\n",parse_str);
325 // set destination to (pixel-x#pixel-y)
327 pstr = strtok (parse_str,"#");
330 pstr = strtok (NULL, "#");
333 dbg(0,"11x=%d\n",p.x);
334 dbg(0,"11y=%d\n",p.y);
336 transform_reverse(transform, &p, &c);
341 pc.pro = transform_get_projection(transform);
343 dbg(0,"22x=%d\n",pc.x);
344 dbg(0,"22y=%d\n",pc.y);
346 // start navigation asynchronous
347 navit_set_destination(attr.u.navit, &pc, parse_str, 1);
352 // navigate to geo position
354 s=(*env)->GetStringUTFChars(env, str, NULL);
355 char parse_str[strlen(s) + 1];
356 strcpy(parse_str, s);
357 (*env)->ReleaseStringUTFChars(env, str, s);
358 dbg(0,"*****string=%s\n",s);
360 // set destination to (lat#lon#title)
366 p = strtok (parse_str,"#");
367 g.lat = strtof(p, &stopstring);
369 p = strtok (NULL, "#");
370 g.lng = strtof(p, &stopstring);
372 name = strtok (NULL, "#");
374 dbg(0,"lat=%f\n",g.lat);
375 dbg(0,"lng=%f\n",g.lng);
376 dbg(0,"str1=%s\n",name);
379 transform_from_geo(projection_mg, &g, &c);
384 pc.pro=projection_mg;
386 // start navigation asynchronous
387 navit_set_destination(attr.u.navit, &pc, name, 1);
392 dbg(0, "Unknown command");
396 JNIEXPORT jstring JNICALL
397 Java_org_navitproject_navit_NavitGraphics_GetDefaultCountry( JNIEnv* env, jobject thiz, int channel, jobject str)
399 struct attr search_attr, country_name, country_iso2, *country_attr;
400 struct tracking *tracking;
401 struct search_list_result *res;
402 jstring return_string = NULL;
405 dbg(0,"enter %d %p\n",channel,str);
407 config_get_attr(config_get(), attr_navit, &attr, NULL);
409 country_attr=country_default();
410 tracking=navit_get_tracking(attr.u.navit);
411 if (tracking && tracking_get_attr(tracking, attr_country_id, &search_attr, NULL))
412 country_attr=&search_attr;
414 struct country_search *cs=country_search_new(country_attr, 0);
415 struct item *item=country_search_get_item(cs);
416 if (item && item_attr_get(item, attr_country_name, &country_name)) {
417 struct mapset *ms=navit_get_mapset(attr.u.navit);
418 struct search_list *search_list = search_list_new(ms);
419 search_attr.type=attr_country_all;
420 dbg(0,"country %s\n", country_name.u.str);
421 search_attr.u.str=country_name.u.str;
422 search_list_search(search_list, &search_attr, 0);
423 while((res=search_list_get_result(search_list)))
425 dbg(0,"Get result: %s\n", res->country->iso2);
427 if (item_attr_get(item, attr_country_iso2, &country_iso2))
428 return_string = (*env)->NewStringUTF(env,country_iso2.u.str);
430 country_search_destroy(cs);
433 return return_string;
436 JNIEXPORT jobjectArray JNICALL
437 Java_org_navitproject_navit_NavitGraphics_GetAllCountries( JNIEnv* env, jobject thiz)
439 struct attr search_attr;
440 struct search_list_result *res;
441 GList* countries = NULL;
442 int country_count = 0;
443 jobjectArray all_countries;
448 config_get_attr(config_get(), attr_navit, &attr, NULL);
450 struct mapset *ms=navit_get_mapset(attr.u.navit);
451 struct search_list *search_list = search_list_new(ms);
452 jobjectArray current_country = NULL;
453 search_attr.type=attr_country_all;
454 //dbg(0,"country %s\n", country_name.u.str);
455 search_attr.u.str=g_strdup("");//country_name.u.str;
456 search_list_search(search_list, &search_attr, 1);
457 while((res=search_list_get_result(search_list)))
459 dbg(0,"Get result: %s\n", res->country->iso2);
461 if (strlen(res->country->iso2)==2)
463 jstring j_iso2 = (*env)->NewStringUTF(env, res->country->iso2);
464 jstring j_name = (*env)->NewStringUTF(env, gettext(res->country->name));
466 current_country = (jobjectArray)(*env)->NewObjectArray(env, 2, (*env)->FindClass(env, "java/lang/String"), NULL);
468 (*env)->SetObjectArrayElement(env, current_country, 0, j_iso2);
469 (*env)->SetObjectArrayElement(env, current_country, 1, j_name);
471 (*env)->DeleteLocalRef(env, j_iso2);
472 (*env)->DeleteLocalRef(env, j_name);
474 countries = g_list_prepend(countries, current_country);
479 search_list_destroy(search_list);
480 all_countries = (jobjectArray)(*env)->NewObjectArray(env, country_count, (*env)->GetObjectClass(env, current_country), NULL);
484 (*env)->SetObjectArrayElement(env, all_countries, --country_count, countries->data);
485 countries = g_list_delete_link( countries, countries);
487 return all_countries;