summaryrefslogtreecommitdiff
path: root/navit/android.c
diff options
context:
space:
mode:
authorjandegr <jandegr@users.noreply.github.com>2019-09-26 21:43:50 +0200
committerPierre GRANDIN <pgrandin@users.noreply.github.com>2019-09-26 13:43:50 -0600
commitd18dec5ec22551ea9feeb6aedf5c226a6f998fe6 (patch)
tree6b514f5bfb063701efbb4f15f8c12ad3bd75c1eb /navit/android.c
parentf304cfc699a73f9c0677d5d3315cd7e3d5daea30 (diff)
downloadnavit-d18dec5ec22551ea9feeb6aedf5c226a6f998fe6.tar.gz
Fix:android:64 bit and cleanup2 (#877)
https://github.com/navit-gps/navit/pull/877
Diffstat (limited to 'navit/android.c')
-rw-r--r--navit/android.c591
1 files changed, 303 insertions, 288 deletions
diff --git a/navit/android.c b/navit/android.c
index 4c6d1ff1e..f35cb274a 100644
--- a/navit/android.c
+++ b/navit/android.c
@@ -11,7 +11,6 @@
#include "callback.h"
#include "country.h"
#include "projection.h"
-#include "coord.h"
#include "map.h"
#include "mapset.h"
#include "navit_nls.h"
@@ -24,8 +23,6 @@
JNIEnv *jnienv;
jobject *android_activity = NULL;
-jobject *android_application = NULL;
-int android_version;
struct android_search_priv {
struct jni_object search_result_obj;
@@ -39,6 +36,16 @@ struct android_search_priv {
int found;
};
+
+JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *aVm, void *aReserved) {
+ if ((*aVm)->GetEnv(aVm,(void**)&jnienv, JNI_VERSION_1_6) != JNI_OK) {
+ dbg(lvl_error,"Failed to get the environment");
+ return -1;
+ }
+ dbg(lvl_debug,"Found the environment");
+ return JNI_VERSION_1_6;
+}
+
int android_find_class_global(char *name, jclass *ret) {
*ret=(*jnienv)->FindClass(jnienv, name);
if (! *ret) {
@@ -68,126 +75,119 @@ int android_find_static_method(jclass class, char *name, char *args, jmethodID *
return 1;
}
-JNIEXPORT void JNICALL Java_org_navitproject_navit_Navit_NavitMain( JNIEnv* env, jobject thiz, jobject activity,
- jobject application, jobject lang, int version, jobject display_density_string, jobject path, jobject map_path,
- jboolean isLaunch) {
+
+/**
+ * @brief Starts the Navitlib for Android
+ *
+ * @param env provided by JVM
+ * @param thiz the calling Navit instance
+ * @param lang a string describing the language
+ * @param path relates to NAVIT_DATA_DIR on linux
+ * @param map_path where the binfiles are stored
+ */
+JNIEXPORT void JNICALL Java_org_navitproject_navit_Navit_navitMain( JNIEnv* env, jobject thiz,
+ jstring lang, jstring path, jstring map_path) {
const char *langstr;
- const char *displaydensitystr;
const char *map_file_path;
- android_version=version;
- __android_log_print(ANDROID_LOG_ERROR,"test","called");
jnienv=env;
- if (android_activity)
- (*jnienv)->DeleteGlobalRef(jnienv, android_activity);
- android_activity = (*jnienv)->NewGlobalRef(jnienv, activity);
- if (android_application)
- (*jnienv)->DeleteGlobalRef(jnienv, android_application);
- android_application = (*jnienv)->NewGlobalRef(jnienv, application);
+
+ android_activity = (*jnienv)->NewGlobalRef(jnienv, thiz);
+
langstr=(*env)->GetStringUTFChars(env, lang, NULL);
- dbg(lvl_debug,"enter env=%p thiz=%p activity=%p lang=%s version=%d",env,thiz,android_activity,langstr,version);
+ dbg(lvl_debug,"enter env=%p thiz=%p activity=%p lang=%s",env,thiz,android_activity,langstr);
setenv("LANG",langstr,1);
(*env)->ReleaseStringUTFChars(env, lang, langstr);
- displaydensitystr=(*env)->GetStringUTFChars(env, display_density_string, NULL);
- dbg(lvl_debug,"*****displaydensity=%s",displaydensitystr);
- setenv("ANDROID_DENSITY",displaydensitystr,1);
- (*env)->ReleaseStringUTFChars(env, display_density_string, displaydensitystr);
-
map_file_path=(*env)->GetStringUTFChars(env, map_path, NULL);
setenv("NAVIT_USER_DATADIR",map_file_path,1);
- (*env)->ReleaseStringUTFChars(env, display_density_string, map_file_path);
+ (*env)->ReleaseStringUTFChars(env, map_path, map_file_path);
- if (isLaunch) {
- const char *strings=(*env)->GetStringUTFChars(env, path, NULL);
- main_real(1, &strings);
- (*env)->ReleaseStringUTFChars(env, path, strings);
- }
+ const char *strings=(*env)->GetStringUTFChars(env, path, NULL);
+ main_real(1, &strings);
+ (*env)->ReleaseStringUTFChars(env, path, strings);
}
-JNIEXPORT void JNICALL Java_org_navitproject_navit_Navit_NavitDestroy( JNIEnv* env) {
+JNIEXPORT void JNICALL Java_org_navitproject_navit_Navit_navitDestroy( JNIEnv* env, jobject thiz) {
dbg(lvl_debug, "shutdown navit");
exit(0);
}
-JNIEXPORT void JNICALL Java_org_navitproject_navit_NavitGraphics_SizeChangedCallback( JNIEnv* env, jobject thiz, int id,
- int w, int h) {
- dbg(lvl_debug,"enter %p %d %d",(struct callback *)id,w,h);
- if (id)
- callback_call_2((struct callback *)id,w,h);
+JNIEXPORT void JNICALL Java_org_navitproject_navit_NavitGraphics_sizeChangedCallback( JNIEnv* env, jobject thiz,
+ jlong id, jint w, jint h) {
+ dbg(lvl_debug,"enter %p %d %d",(struct callback *)(intptr_t)id,w,h);
+ if (id) {
+ callback_call_2((struct callback *)(intptr_t)id, w, h);
+ }
}
-JNIEXPORT void JNICALL Java_org_navitproject_navit_NavitGraphics_PaddingChangedCallback(JNIEnv* env, jobject thiz,
- int id, int left, int top, int right, int bottom) {
- dbg(lvl_debug,"enter %p %d %d %d %d",(struct callback *)id, left, top, right, bottom);
+JNIEXPORT void JNICALL Java_org_navitproject_navit_NavitGraphics_paddingChangedCallback(JNIEnv* env, jobject thiz,
+ jlong id, jint left, jint top, jint right, jint bottom) {
+ dbg(lvl_debug,"enter %p %d %d %d %d",(struct callback *)(intptr_t)id, left, top, right, bottom);
if (id)
- callback_call_4((struct callback *)id, left, top, right, bottom);
+ callback_call_4((struct callback *)(intptr_t)id, left, top, right, bottom);
}
-JNIEXPORT void JNICALL Java_org_navitproject_navit_NavitGraphics_ButtonCallback( JNIEnv* env, jobject thiz, int id,
- int pressed, int button, int x, int y) {
- dbg(lvl_debug,"enter %p %d %d",(struct callback *)id,pressed,button);
+JNIEXPORT void JNICALL Java_org_navitproject_navit_NavitGraphics_buttonCallback( JNIEnv* env, jobject thiz,
+ jlong id, jint pressed, jint button, jint x, jint y) {
+ dbg(lvl_debug,"enter %p %d %d",(struct callback *)(intptr_t)id,pressed,button);
if (id)
- callback_call_4((struct callback *)id,pressed,button,x,y);
+ callback_call_4((struct callback *)(intptr_t)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(lvl_debug,"enter %p %d %d",(struct callback *)id,x,y);
+JNIEXPORT void JNICALL Java_org_navitproject_navit_NavitGraphics_motionCallback( JNIEnv* env, jobject thiz,
+ jlong id, jint x, jint y) {
+ dbg(lvl_debug,"enter %p %d %d",(struct callback *)(intptr_t)id,x,y);
if (id)
- callback_call_2((struct callback *)id,x,y);
+ callback_call_2((struct callback *)(intptr_t)id,x,y);
}
-JNIEXPORT void JNICALL Java_org_navitproject_navit_NavitGraphics_KeypressCallback( JNIEnv* env, jobject thiz, int id,
- jobject str) {
+JNIEXPORT void JNICALL Java_org_navitproject_navit_NavitGraphics_keypressCallback( JNIEnv* env, jobject thiz,
+ jlong id, jstring str) {
const char *s;
- dbg(lvl_debug,"enter %p %p",(struct callback *)id,str);
+ dbg(lvl_debug,"enter %p %p",(struct callback *)(intptr_t)id,str);
s=(*env)->GetStringUTFChars(env, str, NULL);
dbg(lvl_debug,"key=%s",s);
if (id)
- callback_call_1((struct callback *)id,s);
+ callback_call_1((struct callback *)(intptr_t)id,s);
(*env)->ReleaseStringUTFChars(env, str, s);
}
-JNIEXPORT void JNICALL Java_org_navitproject_navit_NavitTimeout_TimeoutCallback( JNIEnv* env, jobject thiz, int id) {
- void (*event_handler)(void *) = *(void **)id;
- dbg(lvl_debug,"enter %p %p",thiz, (void *)id);
- event_handler((void*)id);
-}
-
-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_NavitTimeout_timeoutCallback( JNIEnv* env, jobject thiz,
+ jlong id) {
+ dbg(lvl_debug,"enter %p %p %p",thiz,(void *)id, (void *)(intptr_t)id);
+ void (*event_handler)(void *) = *((void **)(intptr_t)id);
+ event_handler((void*)(intptr_t)id);
}
-JNIEXPORT void JNICALL Java_org_navitproject_navit_NavitIdle_IdleCallback( JNIEnv* env, jobject thiz, int id) {
- dbg(lvl_debug,"enter %p %p",thiz, (void *)id);
- callback_call_0((struct callback *)id);
+JNIEXPORT void JNICALL Java_org_navitproject_navit_NavitVehicle_vehicleCallback( JNIEnv * env, jobject thiz,
+ jlong id, jobject location) {
+ callback_call_1((struct callback *)(intptr_t)id, (void *)location);
}
-JNIEXPORT void JNICALL Java_org_navitproject_navit_NavitWatch_poll( JNIEnv* env, jobject thiz, int func, int fd,
- int cond) {
+JNIEXPORT void JNICALL Java_org_navitproject_navit_NavitWatch_poll( JNIEnv* env, jobject thiz, jlong func, jint fd,
+ jint cond) {
void (*pollfunc)(JNIEnv *env, int fd, int cond)=(void *)func;
pollfunc(env, fd, cond);
}
-JNIEXPORT void JNICALL Java_org_navitproject_navit_NavitWatch_WatchCallback( JNIEnv* env, jobject thiz, int id) {
- dbg(lvl_debug,"enter %p %p",thiz, (void *)id);
- callback_call_0((struct callback *)id);
+JNIEXPORT void JNICALL Java_org_navitproject_navit_NavitWatch_watchCallback( JNIEnv* env, jobject thiz, jlong id) {
+ dbg(lvl_debug,"enter %p %p",thiz, (void *)(intptr_t)id);
+ callback_call_0((struct callback *)(intptr_t)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(lvl_debug,"enter %p %p %f %f %f",thiz, (void *)id,x,y,z);
- callback_call_4((struct callback *)id, sensor, &x, &y, &z);
+JNIEXPORT void JNICALL Java_org_navitproject_navit_NavitSensors_sensorCallback( JNIEnv* env, jobject thiz,
+ jlong id, jint sensor, jfloat x, jfloat y, jfloat z) {
+ dbg(lvl_debug,"enter %p %p %f %f %f",thiz, (void *)(intptr_t)id,x,y,z);
+ callback_call_4((struct callback *)(intptr_t)id, sensor, &x, &y, &z);
}
-JNIEXPORT void JNICALL Java_org_navitproject_navit_NavitTraff_onFeedReceived(JNIEnv * env, jobject thiz, int id,
- jstring feed) {
+JNIEXPORT void JNICALL Java_org_navitproject_navit_NavitTraff_onFeedReceived(JNIEnv * env, jobject thiz,
+ jlong id, jstring feed) {
const char *s;
s = (*env)->GetStringUTFChars(env, feed, NULL);
if (id)
- callback_call_1((struct callback *) id, s);
+ callback_call_1((struct callback *)(intptr_t) id, s);
(*env)->ReleaseStringUTFChars(env, feed, s);
}
@@ -208,8 +208,8 @@ void android_return_search_result(struct jni_object *jni_o, int type, struct pco
(*env)->DeleteLocalRef(jni_o->env, jaddress);
}
-JNIEXPORT jstring JNICALL Java_org_navitproject_navit_NavitGraphics_CallbackLocalizedString( JNIEnv* env, jobject thiz,
- jobject str) {
+JNIEXPORT jstring JNICALL Java_org_navitproject_navit_NavitAppConfig_callbackLocalizedString( JNIEnv* env, jclass thiz,
+ jstring str) {
const char *s;
const char *localized_str;
@@ -221,19 +221,146 @@ JNIEXPORT jstring JNICALL Java_org_navitproject_navit_NavitGraphics_CallbackLoca
// jstring dataStringValue = (jstring) localized_str;
jstring js = (*env)->NewStringUTF(env,localized_str);
-
(*env)->ReleaseStringUTFChars(env, str, s);
-
return js;
}
-JNIEXPORT jint JNICALL Java_org_navitproject_navit_NavitGraphics_CallbackMessageChannel( JNIEnv* env, jobject thiz,
- int channel, jobject str) {
+
+JNIEXPORT jstring JNICALL Java_org_navitproject_navit_NavitGraphics_getDefaultCountry( JNIEnv* env, jobject thiz,
+ jint channel, jstring str) {
+ struct attr search_attr, country_name, country_iso2, *country_attr;
+ struct tracking *tracking;
+ struct search_list_result *res;
+ jstring return_string = NULL;
+
+ struct attr attr;
+ dbg(lvl_debug,"enter %d %p",channel,str);
+
+ config_get_attr(config_get(), attr_navit, &attr, NULL);
+
+ country_attr=country_default();
+ tracking=navit_get_tracking(attr.u.navit);
+ if (tracking && tracking_get_attr(tracking, attr_country_id, &search_attr, NULL)) {
+ country_attr = &search_attr;
+ }
+ if (country_attr) {
+ struct country_search *cs=country_search_new(country_attr, 0);
+ struct item *item=country_search_get_item(cs);
+ if (item && item_attr_get(item, attr_country_name, &country_name)) {
+ struct mapset *ms=navit_get_mapset(attr.u.navit);
+ struct search_list *search_list = search_list_new(ms);
+ search_attr.type=attr_country_all;
+ dbg(lvl_debug,"country %s", country_name.u.str);
+ search_attr.u.str=country_name.u.str;
+ search_list_search(search_list, &search_attr, 0);
+ while((res=search_list_get_result(search_list))) {
+ dbg(lvl_debug,"Get result: %s", res->country->iso2);
+ }
+ if (item_attr_get(item, attr_country_iso2, &country_iso2)) {
+ return_string = (*env)->NewStringUTF(env, country_iso2.u.str);
+ }
+ }
+ country_search_destroy(cs);
+ }
+
+ return return_string;
+}
+
+
+JNIEXPORT jobjectArray JNICALL Java_org_navitproject_navit_NavitGraphics_getAllCountries( JNIEnv* env,
+ jclass thiz) {
+ struct attr search_attr;
+ struct search_list_result *res;
+ GList* countries = NULL;
+ int country_count = 0;
+ jobjectArray all_countries;
+
+ struct attr attr;
+ dbg(lvl_debug,"enter");
+
+ config_get_attr(config_get(), attr_navit, &attr, NULL);
+
+ struct mapset *ms=navit_get_mapset(attr.u.navit);
+ struct search_list *search_list = search_list_new(ms);
+ jobjectArray current_country = NULL;
+ search_attr.type=attr_country_all;
+ //dbg(lvl_debug,"country %s", country_name.u.str);
+ search_attr.u.str=g_strdup("");//country_name.u.str;
+ search_list_search(search_list, &search_attr, 1);
+ while((res=search_list_get_result(search_list))) {
+ dbg(lvl_debug,"Get result: %s", res->country->iso2);
+
+ if (strlen(res->country->iso2)==2) {
+ jstring j_iso2 = (*env)->NewStringUTF(env, res->country->iso2);
+ jstring j_name = (*env)->NewStringUTF(env, navit_nls_gettext(res->country->name));
+
+ current_country = (jobjectArray)(*env)->NewObjectArray(env, 2, (*env)->FindClass(env, "java/lang/String"), NULL);
+
+ (*env)->SetObjectArrayElement(env, current_country, 0, j_iso2);
+ (*env)->SetObjectArrayElement(env, current_country, 1, j_name);
+
+ (*env)->DeleteLocalRef(env, j_iso2);
+ (*env)->DeleteLocalRef(env, j_name);
+
+ countries = g_list_prepend(countries, current_country);
+ country_count++;
+ }
+ }
+
+ search_list_destroy(search_list);
+ all_countries = (jobjectArray)(*env)->NewObjectArray(env, country_count, (*env)->GetObjectClass(env,current_country),
+ NULL);
+
+ while(countries) {
+ (*env)->SetObjectArrayElement(env, all_countries, --country_count, countries->data);
+ countries = g_list_delete_link( countries, countries);
+ }
+
+ return all_countries;
+}
+
+
+JNIEXPORT jstring JNICALL Java_org_navitproject_navit_NavitGraphics_getCoordForPoint( JNIEnv* env,
+ jobject thiz, jint x, jint y, jboolean absolute_coord) {
+
+ jstring return_string = NULL;
+
+ struct attr attr;
+ config_get_attr(config_get(), attr_navit, &attr, NULL);
+
+ struct transformation *transform=navit_get_trans(attr.u.navit);
+ struct point p;
+ struct coord c;
+ struct pcoord pc;
+
+ p.x = x;
+ p.y = y;
+
+ transform_reverse(transform, &p, &c);
+
+ pc.x = c.x;
+ pc.y = c.y;
+ pc.pro = transform_get_projection(transform);
+
+ char coord_str[32];
+ if (absolute_coord) {
+ pcoord_format_absolute(&pc, coord_str, sizeof(coord_str), ",");
+ } else {
+ pcoord_format_degree_short(&pc, coord_str, sizeof(coord_str), " ");
+ }
+
+ dbg(lvl_error,"Display point x=%d y=%d is \"%s\"",x,y,coord_str);
+ return_string = (*env)->NewStringUTF(env,coord_str);
+
+ return return_string;
+}
+
+JNIEXPORT jint JNICALL Java_org_navitproject_navit_NavitGraphics_callbackMessageChannel( JNIEnv* env, jclass thiz,
+ jint channel, jstring str) {
struct attr attr;
const char *s;
jint ret = 0;
dbg(lvl_debug,"enter %d %p",channel,str);
-
config_get_attr(config_get(), attr_navit, &attr, NULL);
switch(channel) {
@@ -247,84 +374,82 @@ JNIEXPORT jint JNICALL Java_org_navitproject_navit_NavitGraphics_CallbackMessage
navit_zoom_out_cursor(attr.u.navit, 2);
navit_draw(attr.u.navit);
break;
- case 6: { // add a map to the current mapset, return 1 on success
+ case 6: {// add a map to the current mapset, return 1 on success
struct mapset *ms = navit_get_mapset(attr.u.navit);
struct attr type, name, data, *attrs[4];
- const char *map_location=(*env)->GetStringUTFChars(env, str, NULL);
- dbg(lvl_debug,"*****string=%s",map_location);
- type.type=attr_type;
- type.u.str="binfile";
+ const char *map_location = (*env)->GetStringUTFChars(env, str, NULL);
+ dbg(lvl_debug, "*****string=%s", map_location);
+ type.type = attr_type;
+ type.u.str = "binfile";
- data.type=attr_data;
- data.u.str=g_strdup(map_location);
+ data.type = attr_data;
+ data.u.str = g_strdup(map_location);
- name.type=attr_name;
- name.u.str=g_strdup(map_location);
+ name.type = attr_name;
+ name.u.str = g_strdup(map_location);
- attrs[0]=&type;
- attrs[1]=&data;
- attrs[2]=&name;
- attrs[3]=NULL;
+ attrs[0] = &type;
+ attrs[1] = &data;
+ attrs[2] = &name;
+ attrs[3] = NULL;
- struct map * new_map = map_new(NULL, attrs);
+ struct map *new_map = map_new(NULL, attrs);
if (new_map) {
struct attr map_a;
- map_a.type=attr_map;
- map_a.u.map=new_map;
+ map_a.type = attr_map;
+ map_a.u.map = new_map;
ret = mapset_add_attr(ms, &map_a);
navit_draw(attr.u.navit);
}
(*env)->ReleaseStringUTFChars(env, str, map_location);
+ break;
}
- break;
- case 7: { // remove a map to the current mapset, return 1 on success
+ case 7: { // remove a map from the current mapset, return 1 on success
struct mapset *ms = navit_get_mapset(attr.u.navit);
struct attr map_r;
- const char *map_location=(*env)->GetStringUTFChars(env, str, NULL);
- struct map * delete_map = mapset_get_map_by_name(ms, map_location);
+ const char *map_location = (*env)->GetStringUTFChars(env, str, NULL);
+ struct map *delete_map = mapset_get_map_by_name(ms, map_location);
if (delete_map) {
- dbg(lvl_debug,"delete map %s (%p)", map_location, delete_map);
- map_r.type=attr_map;
- map_r.u.map=delete_map;
+ dbg(lvl_debug, "delete map %s (%p)", map_location, delete_map);
+ map_r.type = attr_map;
+ map_r.u.map = delete_map;
ret = mapset_remove_attr(ms, &map_r);
navit_draw(attr.u.navit);
}
(*env)->ReleaseStringUTFChars(env, str, map_location);
+ break;
}
- break;
case 5:
// call a command (like in gui)
- s=(*env)->GetStringUTFChars(env, str, NULL);
- dbg(lvl_debug,"*****string=%s",s);
- command_evaluate(&attr,s);
+ s = (*env)->GetStringUTFChars(env, str, NULL);
+ dbg(lvl_debug, "*****string=%s", s);
+ command_evaluate(&attr, s);
(*env)->ReleaseStringUTFChars(env, str, s);
break;
- case 4: {
- // navigate to display position
+ case 4: { // navigate to display position
char *pstr;
struct point p;
struct coord c;
struct pcoord pc;
+ struct transformation *transform = navit_get_trans(attr.u.navit);
- struct transformation *transform=navit_get_trans(attr.u.navit);
-
- s=(*env)->GetStringUTFChars(env, str, NULL);
+ s = (*env)->GetStringUTFChars(env, str, NULL);
char parse_str[strlen(s) + 1];
strcpy(parse_str, s);
(*env)->ReleaseStringUTFChars(env, str, s);
- dbg(lvl_debug,"*****string=%s",parse_str);
+ dbg(lvl_debug, "*****string=%s", parse_str);
// set destination to (pixel-x#pixel-y)
// pixel-x
- pstr = strtok (parse_str,"#");
+ pstr = strtok(parse_str, "#");
p.x = atoi(pstr);
// pixel-y
- pstr = strtok (NULL, "#");
+ pstr = strtok(NULL, "#");
p.y = atoi(pstr);
- dbg(lvl_debug,"11x=%d",p.x);
- dbg(lvl_debug,"11y=%d",p.y);
+ dbg(lvl_debug, "11x=%d", p.x);
+ dbg(lvl_debug, "11y=%d", p.y);
transform_reverse(transform, &p, &c);
@@ -333,22 +458,20 @@ JNIEXPORT jint JNICALL Java_org_navitproject_navit_NavitGraphics_CallbackMessage
pc.pro = transform_get_projection(transform);
char coord_str[32];
- pcoord_format_short(&pc, coord_str, sizeof(coord_str), " ");
-
+ //pcoord_format_short(&pc, coord_str, sizeof(coord_str), " ");
+ pcoord_format_degree_short(&pc, coord_str, sizeof(coord_str), " ");
dbg(lvl_debug,"Setting destination to %s",coord_str);
-
// start navigation asynchronous
navit_set_destination(attr.u.navit, &pc, coord_str, 1);
}
- break;
case 3: {
// navigate to geo position
char *name;
- s=(*env)->GetStringUTFChars(env, str, NULL);
+ s = (*env)->GetStringUTFChars(env, str, NULL);
char parse_str[strlen(s) + 1];
strcpy(parse_str, s);
(*env)->ReleaseStringUTFChars(env, str, s);
- dbg(lvl_debug,"*****string=%s",s);
+ dbg(lvl_debug, "*****string=%s", s);
// set destination to (lat#lon#title)
struct coord_geo g;
@@ -356,31 +479,34 @@ JNIEXPORT jint JNICALL Java_org_navitproject_navit_NavitGraphics_CallbackMessage
char *stopstring;
// lat
- p = strtok (parse_str,"#");
+ p = strtok(parse_str, "#");
g.lat = strtof(p, &stopstring);
// lon
- p = strtok (NULL, "#");
+ p = strtok(NULL, "#");
g.lng = strtof(p, &stopstring);
// description
- name = strtok (NULL, "#");
+ name = strtok(NULL, "#");
- dbg(lvl_debug,"lat=%f",g.lat);
- dbg(lvl_debug,"lng=%f",g.lng);
- dbg(lvl_debug,"str1=%s",name);
+ dbg(lvl_debug, "lat=%f", g.lat);
+ dbg(lvl_debug, "lng=%f", g.lng);
+ dbg(lvl_debug, "str1=%s", name);
struct coord c;
transform_from_geo(projection_mg, &g, &c);
struct pcoord pc;
- pc.x=c.x;
- pc.y=c.y;
- pc.pro=projection_mg;
-
+ pc.x = c.x;
+ pc.y = c.y;
+ pc.pro = projection_mg;
+ char coord_str[32];
+ if (!name || *name == '\0') {
+ pcoord_format_degree_short(&pc, coord_str, sizeof(coord_str), " ");
+ name = coord_str;
+ }
// start navigation asynchronous
navit_set_destination(attr.u.navit, &pc, name, 1);
-
+ break;
}
- break;
default:
dbg(lvl_error, "Unknown command: %d", channel);
}
@@ -388,123 +514,6 @@ JNIEXPORT jint JNICALL Java_org_navitproject_navit_NavitGraphics_CallbackMessage
return ret;
}
-JNIEXPORT jstring JNICALL Java_org_navitproject_navit_NavitGraphics_getCoordForPoint( JNIEnv* env, jobject thiz,
- jint id, int x, int y) {
-
- jstring return_string = NULL;
-
- struct attr attr;
- config_get_attr(config_get(), attr_navit, &attr, NULL);
-
- struct transformation *transform=navit_get_trans(attr.u.navit);
- struct point p;
- struct coord c;
- struct pcoord pc;
-
- p.x = x;
- p.y = y;
-
- transform_reverse(transform, &p, &c);
-
- pc.x = c.x;
- pc.y = c.y;
- pc.pro = transform_get_projection(transform);
-
- char coord_str[32];
- pcoord_format_short(&pc, coord_str, sizeof(coord_str), " ");
-
- dbg(lvl_debug,"Display point x=%d y=%d is \"%s\"",x,y,coord_str);
- return_string = (*env)->NewStringUTF(env,coord_str);
- return return_string;
-}
-
-JNIEXPORT jstring JNICALL Java_org_navitproject_navit_NavitGraphics_GetDefaultCountry( JNIEnv* env, jobject thiz,
- int channel, jobject str) {
- struct attr search_attr, country_name, country_iso2, *country_attr;
- struct tracking *tracking;
- struct search_list_result *res;
- jstring return_string = NULL;
-
- struct attr attr;
- dbg(lvl_debug,"enter %d %p",channel,str);
-
- config_get_attr(config_get(), attr_navit, &attr, NULL);
-
- country_attr=country_default();
- tracking=navit_get_tracking(attr.u.navit);
- if (tracking && tracking_get_attr(tracking, attr_country_id, &search_attr, NULL))
- country_attr=&search_attr;
- if (country_attr) {
- struct country_search *cs=country_search_new(country_attr, 0);
- struct item *item=country_search_get_item(cs);
- if (item && item_attr_get(item, attr_country_name, &country_name)) {
- struct mapset *ms=navit_get_mapset(attr.u.navit);
- struct search_list *search_list = search_list_new(ms);
- search_attr.type=attr_country_all;
- dbg(lvl_debug,"country %s", country_name.u.str);
- search_attr.u.str=country_name.u.str;
- search_list_search(search_list, &search_attr, 0);
- while((res=search_list_get_result(search_list))) {
- dbg(lvl_debug,"Get result: %s", res->country->iso2);
- }
- if (item_attr_get(item, attr_country_iso2, &country_iso2))
- return_string = (*env)->NewStringUTF(env,country_iso2.u.str);
- }
- country_search_destroy(cs);
- }
-
- return return_string;
-}
-
-JNIEXPORT jobjectArray JNICALL Java_org_navitproject_navit_NavitGraphics_GetAllCountries( JNIEnv* env, jobject thiz) {
- struct attr search_attr;
- struct search_list_result *res;
- GList* countries = NULL;
- int country_count = 0;
- jobjectArray all_countries;
-
- struct attr attr;
- dbg(lvl_debug,"enter");
-
- config_get_attr(config_get(), attr_navit, &attr, NULL);
-
- struct mapset *ms=navit_get_mapset(attr.u.navit);
- struct search_list *search_list = search_list_new(ms);
- jobjectArray current_country = NULL;
- search_attr.type=attr_country_all;
- //dbg(lvl_debug,"country %s", country_name.u.str);
- search_attr.u.str=g_strdup("");//country_name.u.str;
- search_list_search(search_list, &search_attr, 1);
- while((res=search_list_get_result(search_list))) {
- dbg(lvl_debug,"Get result: %s", res->country->iso2);
-
- if (strlen(res->country->iso2)==2) {
- jstring j_iso2 = (*env)->NewStringUTF(env, res->country->iso2);
- jstring j_name = (*env)->NewStringUTF(env, navit_nls_gettext(res->country->name));
-
- current_country = (jobjectArray)(*env)->NewObjectArray(env, 2, (*env)->FindClass(env, "java/lang/String"), NULL);
-
- (*env)->SetObjectArrayElement(env, current_country, 0, j_iso2);
- (*env)->SetObjectArrayElement(env, current_country, 1, j_name);
-
- (*env)->DeleteLocalRef(env, j_iso2);
- (*env)->DeleteLocalRef(env, j_name);
-
- countries = g_list_prepend(countries, current_country);
- country_count++;
- }
- }
-
- search_list_destroy(search_list);
- all_countries = (jobjectArray)(*env)->NewObjectArray(env, country_count, (*env)->GetObjectClass(env, current_country),
- NULL);
-
- while(countries) {
- (*env)->SetObjectArrayElement(env, all_countries, --country_count, countries->data);
- countries = g_list_delete_link( countries, countries);
- }
- return all_countries;
-}
static char *postal_str(struct search_list_result *res, int level) {
char *ret=NULL;
@@ -558,8 +567,8 @@ static char *town_str(struct search_list_result *res, int level) {
if (!county)
county_sep=county="";
- return g_strdup_printf("%s%s%s%s%s%s%s%s", postal, postal_sep, town, district_begin, district, district_end, county_sep,
- county);
+ return g_strdup_printf("%s%s%s%s%s%s%s%s", postal, postal_sep, town, district_begin, district,
+ district_end, county_sep, county);
}
static void android_search_end(struct android_search_priv *search_priv) {
@@ -592,41 +601,46 @@ static enum attr_type android_search_level[] = {
attr_house_number
};
+static void android_search_idle_result(struct android_search_priv *search_priv, struct search_list_result *res) {
+// commented out because otherwise cyclomatic complexity needleslly reported as too high
+// dbg(lvl_debug, "Town: %s, Street: %s",res->town ? res->town->common.town_name : "no town",
+// res->street ? res->street->name : "no street");
+ search_priv->found = 1;
+ switch (search_priv->search_attr.type) {
+ case attr_town_or_district_name: {
+ gchar *town = town_str(res, 1);
+ android_return_search_result(&search_priv->search_result_obj, 0, res->town->common.c, town);
+ g_free(town);
+ }
+ break;
+ case attr_street_name: {
+ gchar *town = town_str(res, 2);
+ gchar *address = g_strdup_printf("%.101s,%.101s, %.101s", res->country->name, town, res->street->name);
+ android_return_search_result(&search_priv->search_result_obj, 1, res->street->common.c, address);
+ g_free(address);
+ g_free(town);
+ }
+ break;
+ case attr_house_number: {
+ gchar *town = town_str(res, 3);
+ gchar *address = g_strdup_printf("%.101s, %.101s, %.101s %.15s", res->country->name, town,
+ res->street->name, res->house_number->house_number);
+ android_return_search_result(&search_priv->search_result_obj, 2, res->house_number->common.c, address);
+ g_free(address);
+ g_free(town);
+ }
+ break;
+ default:
+ dbg(lvl_error, "Unhandled search type %d", search_priv->search_attr.type);
+ }
+}
+
static void android_search_idle(struct android_search_priv *search_priv) {
dbg(lvl_debug, "enter android_search_idle");
struct search_list_result *res = search_list_get_result(search_priv->search_list);
if (res) {
- dbg(lvl_debug, "Town: %s, Street: %s",res->town ? res->town->common.town_name : "no town",
- res->street ? res->street->name : "no street");
- search_priv->found = 1;
- switch (search_priv->search_attr.type) {
- case attr_town_or_district_name: {
- gchar *town = town_str(res, 1);
- android_return_search_result(&search_priv->search_result_obj, 0, res->town->common.c, town);
- g_free(town);
- break;
- }
- case attr_street_name: {
- gchar *town = town_str(res, 2);
- gchar *address = g_strdup_printf("%.101s,%.101s, %.101s", res->country->name, town, res->street->name);
- android_return_search_result(&search_priv->search_result_obj, 1, res->street->common.c, address);
- g_free(address);
- g_free(town);
- break;
- }
- case attr_house_number: {
- gchar *town = town_str(res, 3);
- gchar *address = g_strdup_printf("%.101s, %.101s, %.101s %.15s", res->country->name, town, res->street->name,
- res->house_number->house_number);
- android_return_search_result(&search_priv->search_result_obj, 2, res->house_number->common.c, address);
- g_free(address);
- g_free(town);
- break;
- }
- default:
- dbg(lvl_error, "Unhandled search type %d", search_priv->search_attr.type);
- }
+ android_search_idle_result(search_priv, res);
} else {
int level = search_list_level(search_priv->search_attr.type) - 1;
@@ -672,7 +686,7 @@ static char *search_fix_spaces(const char *str) {
char c,*s,*d,*ret=g_strdup(str);
for (i = 0 ; i < len ; i++) {
- if (ret[i] == ',' || ret[i] == ',' || ret[i] == '/')
+ if (ret[i] == ',' || ret[i] == '/')
ret[i]=' ';
}
s=ret;
@@ -691,6 +705,7 @@ static char *search_fix_spaces(const char *str) {
len--;
}
} while (c);
+
return ret;
}
@@ -713,8 +728,8 @@ static void start_search(struct android_search_priv *search_priv, const char *se
dbg(lvl_debug,"leave");
}
-JNIEXPORT jlong JNICALL Java_org_navitproject_navit_NavitAddressSearchActivity_CallbackStartAddressSearch( JNIEnv* env,
- jobject thiz, int partial, jobject country, jobject str) {
+JNIEXPORT jlong JNICALL Java_org_navitproject_navit_NavitAddressSearchActivity_callbackStartAddressSearch( JNIEnv* env,
+ jobject thiz, jint partial, jstring country, jstring str) {
struct attr attr;
const char *search_string =(*env)->GetStringUTFChars(env, str, NULL);
dbg(lvl_debug,"search '%s'", search_string);
@@ -764,7 +779,7 @@ JNIEXPORT jlong JNICALL Java_org_navitproject_navit_NavitAddressSearchActivity_C
return (jlong)(long)search_priv;
}
-JNIEXPORT void JNICALL Java_org_navitproject_navit_NavitAddressSearchActivity_CallbackCancelAddressSearch( JNIEnv* env,
+JNIEXPORT void JNICALL Java_org_navitproject_navit_NavitAddressSearchActivity_callbackCancelAddressSearch( JNIEnv* env,
jobject thiz, jlong handle) {
struct android_search_priv *priv = (void*)(long)handle;