Fix:Android:Rewrite android search dialog handling. Fix for crashs/deadlocks and...
authorrikky <rikky@ffa7fe5e-494d-0410-b361-a75ebd5db220>
Sat, 12 May 2012 22:53:05 +0000 (22:53 +0000)
committerrikky <rikky@ffa7fe5e-494d-0410-b361-a75ebd5db220>
Sat, 12 May 2012 22:53:05 +0000 (22:53 +0000)
git-svn-id: https://navit.svn.sourceforge.net/svnroot/navit/trunk@5101 ffa7fe5e-494d-0410-b361-a75ebd5db220

navit/navit/android.c
navit/navit/android.h
navit/navit/android/src/org/navitproject/navit/Navit.java
navit/navit/android/src/org/navitproject/navit/NavitAddressResultListActivity.java [deleted file]
navit/navit/android/src/org/navitproject/navit/NavitAddressSearchActivity.java
navit/navit/android/src/org/navitproject/navit/NavitAppConfig.java
navit/navit/android/src/org/navitproject/navit/NavitDialogs.java
navit/navit/android/src/org/navitproject/navit/NavitGraphics.java
navit/navit/android/src/org/navitproject/navit/NavitMapDownloader.java
navit/navit/search.c
navit/navit/search.h

index b44a6b4..dcd0f9b 100644 (file)
 #include "start_real.h"
 #include "track.h"
 
-
 JNIEnv *jnienv;
 jobject *android_activity;
 int android_version;
 
+struct android_search_priv
+{
+       struct jni_object search_result_obj;
+       struct event_idle *idle_ev;
+       struct callback *idle_clb;
+       struct search_list *search_list;
+       struct attr search_attr;
+       gchar **phrases;
+       int current_phrase_per_level[4];
+       int partial;
+       int found;
+};
+
 int
 android_find_class_global(char *name, jclass *ret)
 {
@@ -52,7 +64,6 @@ android_find_method(jclass class, char *name, char *args, jmethodID *ret)
 JNIEXPORT void JNICALL
 Java_org_navitproject_navit_Navit_NavitMain( JNIEnv* env, jobject thiz, jobject activity, jobject lang, int version, jobject display_density_string, jobject path)
 {
-       char *strings[]={NULL,NULL};
        const char *langstr;
        const char *displaydensitystr;
        android_version=version;
@@ -68,10 +79,9 @@ Java_org_navitproject_navit_Navit_NavitMain( JNIEnv* env, jobject thiz, jobject
        dbg(0,"*****displaydensity=%s\n",displaydensitystr);
        setenv("ANDROID_DENSITY",displaydensitystr,1);
        (*env)->ReleaseStringUTFChars(env, display_density_string, displaydensitystr);
-       strings[0]=(*env)->GetStringUTFChars(env, path, NULL);
-       main_real(1, strings);
-       (*env)->ReleaseStringUTFChars(env, path, strings[0]);
-
+       const char *strings=(*env)->GetStringUTFChars(env, path, NULL);
+       main_real(1, &strings);
+       (*env)->ReleaseStringUTFChars(env, path, strings);
 }
 
 JNIEXPORT void JNICALL
@@ -153,7 +163,6 @@ Java_org_navitproject_navit_NavitWatch_WatchCallback( JNIEnv* env, jobject thiz,
        callback_call_0((struct callback *)id);
 }
 
-
 JNIEXPORT void JNICALL
 Java_org_navitproject_navit_NavitSensors_SensorCallback( JNIEnv* env, jobject thiz, int id, int sensor, float x, float y, float z)
 {
@@ -161,62 +170,25 @@ Java_org_navitproject_navit_NavitSensors_SensorCallback( JNIEnv* env, jobject th
        callback_call_4((struct callback *)id, sensor, &x, &y, &z);
 }
 
+// type: 0=town, 1=street, 2=House#
 void
-android_return_search_result(struct jni_object *jni_o, char *str)
+android_return_search_result(struct jni_object *jni_o, int type, struct pcoord *location, const char *address)
 {
-       jstring js2 = NULL;
-       JNIEnv* env2;
-       env2=jni_o->env;
-       js2 = (*env2)->NewStringUTF(jni_o->env,str);
-       (*env2)->CallVoidMethod(jni_o->env, jni_o->jo, jni_o->jm, js2);
-       (*env2)->DeleteLocalRef(jni_o->env, js2);
+       struct coord_geo geo_location;
+       struct coord c;
+       jstring jaddress = NULL;
+       JNIEnv* env;
+       env=jni_o->env;
+       jaddress = (*env)->NewStringUTF(jni_o->env,address);
+
+       c.x=location->x;
+       c.y=location->y;
+       transform_to_geo(location->pro, &c, &geo_location);
+
+       (*env)->CallVoidMethod(jni_o->env, jni_o->jo, jni_o->jm, type, geo_location.lat, geo_location.lng, jaddress);
+       (*env)->DeleteLocalRef(jni_o->env, jaddress);
 }
 
-JNIEXPORT void JNICALL
-Java_org_navitproject_navit_NavitGraphics_CallbackSearchResultList( JNIEnv* env, jobject thiz, int partial, jobject country, jobject str)
-{
-       struct attr attr;
-       const char *search_string =(*env)->GetStringUTFChars(env, str, NULL);
-       dbg(0,"search '%s'\n", search_string);
-
-       config_get_attr(config_get(), attr_navit, &attr, NULL);
-
-       jclass cls = (*env)->GetObjectClass(env,thiz);
-       jmethodID aMethodID = (*env)->GetMethodID(env, cls, "fillStringArray", "(Ljava/lang/String;)V");
-       if(aMethodID != 0)
-       {
-               struct jni_object my_jni_object;
-               GList *ret = NULL;
-               struct mapset *ms4=navit_get_mapset(attr.u.navit);
-               struct search_list *sl = search_list_new(ms4);
-               struct attr country_attr;
-               const char *str_country=(*env)->GetStringUTFChars(env, country, NULL);
-
-               country_attr.type=attr_country_iso2;
-               country_attr.u.str=str_country;
-
-               search_list_search(sl, &country_attr, 0);
-               (*env)->ReleaseStringUTFChars(env, country, str_country);
-
-               my_jni_object.env=env;
-               my_jni_object.jo=thiz;
-               my_jni_object.jm=aMethodID;
-
-               /* TODO (rikky#1#): does return nothing yet, also should use a generic callback instead of jni_object */
-               ret=search_by_address(sl,search_string,partial,&my_jni_object);
-               search_list_destroy(sl);
-
-               dbg(0,"ret=%p\n",ret);
-
-               g_list_free(ret);
-       }
-       else
-               dbg(0,"**** Unable to get methodID: fillStringArray");
-
-       (*env)->ReleaseStringUTFChars(env, str, search_string);
-}
-
-
 JNIEXPORT jstring JNICALL
 Java_org_navitproject_navit_NavitGraphics_CallbackLocalizedString( JNIEnv* env, jobject thiz, jobject str)
 {
@@ -262,7 +234,7 @@ Java_org_navitproject_navit_NavitGraphics_CallbackMessageChannel( JNIEnv* env, j
        {
                struct mapset *ms = navit_get_mapset(attr.u.navit);
                struct attr type, name, data, *attrs[4];
-               char *map_location=(*env)->GetStringUTFChars(env, str, NULL);
+               const char *map_location=(*env)->GetStringUTFChars(env, str, NULL);
                dbg(0,"*****string=%s\n",map_location);
                type.type=attr_type;
                type.u.str="binfile";
@@ -288,7 +260,7 @@ Java_org_navitproject_navit_NavitGraphics_CallbackMessageChannel( JNIEnv* env, j
        {
                struct mapset *ms = navit_get_mapset(attr.u.navit);
                struct attr map_r;
-               char *map_location=(*env)->GetStringUTFChars(env, str, NULL);
+               const char *map_location=(*env)->GetStringUTFChars(env, str, NULL);
                struct map * delete_map =  mapset_get_map_by_name(ms, map_location);
 
                dbg(0,"delete map %s (%p)", map_location, delete_map);
@@ -486,3 +458,285 @@ Java_org_navitproject_navit_NavitGraphics_GetAllCountries( JNIEnv* env, jobject
        }
        return all_countries;
 }
+
+static char *
+postal_str(struct search_list_result *res, int level)
+{
+       char *ret=NULL;
+       if (res->town->common.postal)
+               ret=res->town->common.postal;
+       if (res->town->common.postal_mask)
+               ret=res->town->common.postal_mask;
+       if (level == 1)
+               return ret;
+       if (res->street->common.postal)
+               ret=res->street->common.postal;
+       if (res->street->common.postal_mask)
+               ret=res->street->common.postal_mask;
+       if (level == 2)
+               return ret;
+       if (res->house_number->common.postal)
+               ret=res->house_number->common.postal;
+       if (res->house_number->common.postal_mask)
+               ret=res->house_number->common.postal_mask;
+       return ret;
+}
+
+static char *
+district_str(struct search_list_result *res, int level)
+{
+       char *ret=NULL;
+       if (res->town->common.district_name)
+               ret=res->town->common.district_name;
+       if (level == 1)
+               return ret;
+       if (res->street->common.district_name)
+               ret=res->street->common.district_name;
+       if (level == 2)
+               return ret;
+       if (res->house_number->common.district_name)
+               ret=res->house_number->common.district_name;
+       return ret;
+}
+
+static char *
+town_str(struct search_list_result *res, int level)
+{
+       char *town=res->town->common.town_name;
+       char *district=district_str(res, level);
+       char *postal=postal_str(res, level);
+       char *postal_sep=" ";
+       char *district_begin=" (";
+       char *district_end=")";
+       char *county_sep = ", Co. ";
+       char *county = res->town->common.county_name;
+       if (!postal)
+               postal_sep=postal="";
+       if (!district)
+               district_begin=district_end=district="";
+       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);
+}
+
+static void
+android_search_end(struct android_search_priv *search_priv)
+{
+       dbg(1, "End search");
+       JNIEnv* env = search_priv->search_result_obj.env;
+       if (search_priv->idle_ev) {
+               event_remove_idle(search_priv->idle_ev);
+               search_priv->idle_ev=NULL;
+       }
+       if (search_priv->idle_clb) {
+               callback_destroy(search_priv->idle_clb);
+               search_priv->idle_clb=NULL;
+       }
+       jclass cls = (*env)->GetObjectClass(env,search_priv->search_result_obj.jo);
+       jmethodID finish_MethodID = (*env)->GetMethodID(env, cls, "finishAddressSearch", "()V");
+       if(finish_MethodID != 0) {
+               (*env)->CallVoidMethod(env, search_priv->search_result_obj.jo, finish_MethodID);
+       } else {
+               dbg(0, "Error method finishAddressSearch not found");
+       }
+
+       search_list_destroy(search_priv->search_list);
+       g_strfreev(search_priv->phrases);
+       g_free(search_priv);
+}
+
+static enum attr_type android_search_level[] = {
+       attr_town_or_district_name,
+       attr_street_name,
+       attr_house_number
+};
+
+static void
+android_search_idle(struct android_search_priv *search_priv)
+{
+       dbg(1, "enter android_search_idle");
+
+       struct search_list_result *res = search_list_get_result(search_priv->search_list);
+       if (res) {
+               dbg(1, "Town: %s, Street: %s\n",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(0, "Unhandled search type %d", search_priv->search_attr.type);
+               }
+       } else {
+               int level = search_list_level(search_priv->search_attr.type) - 1;
+
+               if (search_priv->found) {
+                       search_priv->found = 0;
+                       if (search_priv->search_attr.type != attr_house_number) {
+                               level++;
+                       }
+               }
+               dbg(2, "test phrase: %d,%d, %d, level %d", search_priv->current_phrase_per_level[0], search_priv->current_phrase_per_level[1], search_priv->current_phrase_per_level[2] , level)
+               do {
+                       while (!search_priv->phrases[++search_priv->current_phrase_per_level[level]]) {
+                               dbg(2, "next phrase: %d,%d, %d, level %d", search_priv->current_phrase_per_level[0], search_priv->current_phrase_per_level[1], search_priv->current_phrase_per_level[2] , level)
+                               if (level > 0) {
+                                       search_priv->current_phrase_per_level[level] = -1;
+                                       level--;
+                               } else {
+                                       android_search_end(search_priv);
+                                       return;
+                               }
+                       }
+               } while (level > 0 ? search_priv->current_phrase_per_level[level] == search_priv->current_phrase_per_level[level-1] : 0);
+               dbg(2, "used phrase: %d,%d, %d, level %d, '%s'", search_priv->current_phrase_per_level[0], search_priv->current_phrase_per_level[1], search_priv->current_phrase_per_level[2] , level, attr_to_name(android_search_level[level]))
+               dbg(1, "Search for '%s'", search_priv->phrases[search_priv->current_phrase_per_level[level]]);
+               search_priv->search_attr.type = android_search_level[level];
+               search_priv->search_attr.u.str = search_priv->phrases[search_priv->current_phrase_per_level[level]];
+               struct attr test;
+               test.type = android_search_level[level];
+               test.u.str = search_priv->phrases[search_priv->current_phrase_per_level[level]];
+               search_list_search(search_priv->search_list, &test, search_priv->partial);
+       }
+       dbg(2, "leave");
+}
+
+static char *
+search_fix_spaces(const char *str)
+{
+       int i;
+       int len=strlen(str);
+       char c,*s,*d,*ret=g_strdup(str);
+
+       for (i = 0 ; i < len ; i++) {
+               if (ret[i] == ',' || ret[i] == ',' || ret[i] == '/')
+                       ret[i]=' ';
+       }
+       s=ret;
+       d=ret;
+       len=0;
+       do {
+               c=*s++;
+               if (c != ' ' || len != 0) {
+                       *d++=c;
+                       len++;
+               }
+               while (c == ' ' && *s == ' ')
+                       s++;
+               if (c == ' ' && *s == '\0') {
+                       d--;
+                       len--;
+               }
+       } while (c);
+       return ret;
+}
+
+static void start_search(struct android_search_priv *search_priv, const char *search_string)
+{
+       dbg(1,"enter %s\n", search_string);
+       char *str=search_fix_spaces(search_string);
+       search_priv->phrases = g_strsplit(str, " ", 0);
+       //ret=search_address_town(ret, sl, phrases, NULL, partial, jni);
+
+       dbg(1,"First search phrase %s", search_priv->phrases[0]);
+       search_priv->search_attr.u.str= search_priv->phrases[0];
+       search_priv->search_attr.type=attr_town_or_district_name;
+       search_list_search(search_priv->search_list, &search_priv->search_attr, search_priv->partial);
+
+       search_priv->idle_clb = callback_new_1(callback_cast(android_search_idle), search_priv);
+       search_priv->idle_ev = event_add_idle(50,search_priv->idle_clb);
+       //callback_call_0(search_priv->idle_clb);
+
+       g_free(str);
+       dbg(1,"leave\n");
+}
+
+JNIEXPORT jlong JNICALL
+Java_org_navitproject_navit_NavitAddressSearchActivity_CallbackStartAddressSearch( JNIEnv* env, jobject thiz, int partial, jobject country, jobject str)
+{
+       struct attr attr;
+       const char *search_string =(*env)->GetStringUTFChars(env, str, NULL);
+       dbg(0,"search '%s'\n", search_string);
+
+       config_get_attr(config_get(), attr_navit, &attr, NULL);
+
+       jclass cls = (*env)->GetObjectClass(env,thiz);
+       jmethodID aMethodID = (*env)->GetMethodID(env, cls, "receiveAddress", "(IFFLjava/lang/String;)V");
+       struct android_search_priv *search_priv = NULL;
+
+       if(aMethodID != 0)
+       {
+               struct mapset *ms4=navit_get_mapset(attr.u.navit);
+               struct attr country_attr;
+               const char *str_country=(*env)->GetStringUTFChars(env, country, NULL);
+               struct search_list_result *slr;
+               int count = 0;
+
+               search_priv = g_new0( struct android_search_priv, 1);
+               search_priv->search_list = search_list_new(ms4);
+               search_priv->partial = partial;
+               search_priv->current_phrase_per_level[1] = -1;
+               search_priv->current_phrase_per_level[2] = -1;
+
+               country_attr.type=attr_country_iso2;
+               country_attr.u.str=g_strdup(str_country);
+               search_list_search(search_priv->search_list, &country_attr, 0);
+
+               while ((slr=search_list_get_result(search_priv->search_list)))
+               {
+                       count++;
+               }
+               if (!count)
+                       dbg(0,"Country not found");
+
+               dbg(1,"search in country '%s'\n", str_country);
+               (*env)->ReleaseStringUTFChars(env, country, str_country);
+
+               search_priv->search_result_obj.env = env;
+               search_priv->search_result_obj.jo = (*env)->NewGlobalRef(env, thiz);
+               search_priv->search_result_obj.jm = aMethodID;
+
+               start_search(search_priv, search_string);
+       }
+       else
+               dbg(0,"**** Unable to get methodID: fillStringArray");
+
+       (*env)->ReleaseStringUTFChars(env, str, search_string);
+
+       return (jlong)(long)search_priv;
+}
+
+JNIEXPORT void JNICALL
+Java_org_navitproject_navit_NavitAddressSearchActivity_CallbackCancelAddressSearch( JNIEnv* env, jobject thiz, jlong handle)
+{
+       struct android_search_priv *priv = (void*)(long)handle;
+
+       if (priv)
+               android_search_end(priv);
+       else
+               dbg(0, "Error: Cancel search failed");
+}
index 84643e7..24774d0 100644 (file)
@@ -1,5 +1,3 @@
-#ifdef HAVE_API_ANDROID
-
 #include <jni.h>
 extern JNIEnv *jnienv;
 extern jobject *android_activity;
@@ -13,11 +11,3 @@ struct jni_object {
        jobject jo;
        jmethodID jm;
 };
-
-#else
-
-struct jni_object {
-       int dummy;
-};
-
-#endif
index 06c6100..7f5276c 100644 (file)
@@ -22,9 +22,7 @@ package org.navitproject.navit;
 import java.io.File;\r
 import java.io.FileOutputStream;\r
 import java.io.InputStream;\r
-import java.util.ArrayList;\r
 import java.util.HashMap;\r
-import java.util.List;\r
 import java.util.Locale;\r
 import java.util.Map;\r
 import java.util.regex.Matcher;\r
@@ -65,14 +63,6 @@ import android.widget.Toast;
 \r
 public class Navit extends Activity\r
 {\r
-       public static final class NavitAddress\r
-       {\r
-               String  result_type;    // TWN,STR,SHN\r
-               String  item_id;        // H<ddddd>L<ddddd> -> item.id_hi item.id_lo\r
-               float   lat;\r
-               float   lon;\r
-               String  addr;\r
-       }\r
 \r
        public NavitDialogs              dialogs;\r
        private PowerManager.WakeLock    wl;\r
@@ -86,18 +76,11 @@ public class Navit extends Activity
        private static Intent            startup_intent                 = null;\r
        private static long              startup_intent_timestamp       = 0L;\r
        public static String             my_display_density             = "mdpi";\r
-       private boolean                  searchBoxShown                 = false;\r
-       public static final int          ADDRESS_RESULTS_DIALOG_MAX     = 10;\r
        public static final int          NavitDownloaderSelectMap_id    = 967;\r
-       public static int                search_results_towns           = 0;\r
-       public static int                search_results_streets         = 0;\r
-       public static int                search_results_streets_hn      = 0;\r
        public static final int          MAP_NUM_PRIMARY                = 11;\r
        public static final int          NavitAddressSearch_id          = 70;\r
-       public static final int          NavitAddressResultList_id      = 71;\r
        public static String             NavitLanguage;\r
-\r
-       public static List<NavitAddress> NavitAddressResultList_foundItems = new ArrayList<NavitAddress>();\r
+       public static Resources          NavitResources                 = null;\r
 \r
        public static final int          MAP_NUM_SECONDARY              = 12;\r
        static final String              NAVIT_PACKAGE_NAME             = "org.navitproject.navit";\r
@@ -115,9 +98,8 @@ public class Navit extends Activity
 \r
        private boolean extractRes(String resname, String result) {\r
                boolean needs_update = false;\r
-               Resources res = getResources();\r
                Log.e(TAG, "Res Name " + resname + ", result " + result);\r
-               int id = res.getIdentifier(resname, "raw", NAVIT_PACKAGE_NAME);\r
+               int id = NavitResources.getIdentifier(resname, "raw", NAVIT_PACKAGE_NAME);\r
                Log.e(TAG, "Res ID " + id);\r
                if (id == 0)\r
                        return false;\r
@@ -147,7 +129,7 @@ public class Navit extends Activity
                        Log.e(TAG, "Extracting resource");\r
 \r
                        try {\r
-                               InputStream resourcestream = res.openRawResource(id);\r
+                               InputStream resourcestream = NavitResources.openRawResource(id);\r
                                FileOutputStream resultfilestream = new FileOutputStream(resultfile);\r
                                byte[] buf = new byte[1024];\r
                                int i = 0;\r
@@ -217,6 +199,8 @@ public class Navit extends Activity
 \r
                dialogs = new NavitDialogs(this);\r
 \r
+               NavitResources = getResources();\r
+\r
                // only take arguments here, onResume gets called all the time (e.g. when screenblanks, etc.)\r
                Navit.startup_intent = this.getIntent();\r
                // hack! Remember time stamps, and only allow 4 secs. later in onResume to set target!\r
@@ -472,21 +456,16 @@ public class Navit extends Activity
 \r
        public void start_targetsearch_from_intent(String target_address)\r
        {\r
-               NavitDialogs.Navit_last_address_partial_match = false;\r
-               NavitDialogs.Navit_last_address_search_string = target_address;\r
-\r
-               // clear results\r
-               Navit.NavitAddressResultList_foundItems.clear();\r
-\r
-               if (NavitDialogs.Navit_last_address_search_string.equals(""))\r
+               if (target_address == null || target_address.equals(""))\r
                {\r
                        // empty search string entered\r
                        Toast.makeText(getApplicationContext(), getString(R.string.address_search_not_found), Toast.LENGTH_LONG).show(); //TRANS\r
                }\r
                else\r
                {\r
-                       // show dialog\r
-                       dialogs.obtainMessage(NavitDialogs.MSG_SEARCH).sendToTarget();\r
+                       Intent search_intent = new Intent(this, NavitAddressSearchActivity.class);\r
+                       search_intent.putExtra("search_string", target_address);\r
+                       this.startActivityForResult(search_intent, NavitAddressSearch_id);\r
                }\r
        }\r
 \r
@@ -532,9 +511,6 @@ public class Navit extends Activity
                        case 6 :\r
                                // ok startup address search activity\r
                                Intent search_intent = new Intent(this, NavitAddressSearchActivity.class);\r
-                               search_intent.putExtra("title", getString(R.string.address_search_title)); //TRANS\r
-                               search_intent.putExtra("address_string", NavitDialogs.Navit_last_address_search_string);\r
-                               search_intent.putExtra("partial_match", NavitDialogs.Navit_last_address_partial_match);\r
                                this.startActivityForResult(search_intent, NavitAddressSearch_id);\r
                                break;\r
                        case 99 :\r
@@ -572,55 +548,12 @@ public class Navit extends Activity
                        break;\r
                case NavitAddressSearch_id :\r
                        if (resultCode == Activity.RESULT_OK) {\r
-                               Boolean addr_selected = data.getBooleanExtra("addr_selected", false);\r
-                               \r
-                               // address already choosen, or do we have to search?\r
-                               if (addr_selected) {\r
-                                       setDestination( NavitAddressResultList_foundItems .get(0).lat\r
-                                                     , NavitAddressResultList_foundItems.get(0).lon\r
-                                                     , NavitAddressResultList_foundItems.get(0).addr);\r
-                               } else {\r
-                                       String addr = data.getStringExtra("address_string");\r
-                                       Boolean partial_match = data.getBooleanExtra("partial_match", false);\r
-                                       String country = data.getStringExtra("country");\r
-       \r
-                                       NavitDialogs.Navit_last_address_partial_match = partial_match;\r
-                                       NavitDialogs.Navit_last_address_search_string = addr;\r
-                                       NavitDialogs.Navit_last_country = country;\r
-       \r
-                                       // clear results\r
-                                       Navit.NavitAddressResultList_foundItems.clear();\r
-                                       Navit.search_results_towns = 0;\r
-                                       Navit.search_results_streets = 0;\r
-                                       Navit.search_results_streets_hn = 0;\r
-       \r
-                                       if (addr.equals("")) {\r
-                                               // empty search string entered\r
-                                               Toast.makeText(getApplicationContext(),getString(R.string.address_search_no_text_entered), Toast.LENGTH_LONG).show(); //TRANS\r
-                                       } else {\r
-                                               // show dialog, and start search for the results\r
-                                               // make it indirect, to give our activity a chance to startup\r
-                                               // (remember we come straight from another activity and ours is still paused!)\r
-                                               dialogs.obtainMessage(NavitDialogs.MSG_SEARCH).sendToTarget();\r
-                                       }\r
-                               }\r
-                       }\r
-                       break;\r
-               case Navit.NavitAddressResultList_id :\r
-                       try\r
-                       {\r
-                               if (resultCode == Activity.RESULT_OK)\r
-                               {\r
-                                       int destination_id = data.getIntExtra("selected_id", 0);\r
-                                       \r
-                                       setDestination( NavitAddressResultList_foundItems .get(destination_id).lat\r
-                                                     , NavitAddressResultList_foundItems.get(destination_id).lon\r
-                                                     , NavitAddressResultList_foundItems.get(destination_id).addr);\r
-                               }\r
-                       }\r
-                       catch (Exception e)\r
-                       {\r
-                               Log.d("Navit", "error on onActivityResult");\r
+                               Bundle destination = data.getExtras();\r
+                               Toast.makeText( getApplicationContext(),getString(R.string.address_search_set_destination) + "\n" + destination.getString("q"), Toast.LENGTH_LONG).show(); //TRANS\r
+\r
+                               Message msg = Message.obtain(N_NavitGraphics.callback_handler, NavitGraphics.msg_type.CLB_SET_DESTINATION.ordinal());\r
+                               msg.setData(destination);\r
+                               msg.sendToTarget();\r
                        }\r
                        break;\r
                default :\r
@@ -672,16 +605,4 @@ public class Navit extends Activity
        {\r
                System.loadLibrary("navit");\r
        }\r
-\r
-       /*\r
-        * Show a search activity with the string "search" filled in\r
-        */\r
-       private void executeSearch(String search)\r
-       {\r
-               Intent search_intent = new Intent(this, NavitAddressSearchActivity.class);\r
-               search_intent.putExtra("title", getString(R.string.address_search_title)); //TRANS\r
-               search_intent.putExtra("address_string", search);\r
-               search_intent.putExtra("partial_match", NavitDialogs.Navit_last_address_partial_match);\r
-               this.startActivityForResult(search_intent, NavitAddressSearch_id);\r
-       }\r
 }\r
diff --git a/navit/navit/android/src/org/navitproject/navit/NavitAddressResultListActivity.java b/navit/navit/android/src/org/navitproject/navit/NavitAddressResultListActivity.java
deleted file mode 100644 (file)
index 85671ed..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-package org.navitproject.navit;\r
-\r
-/**\r
- * Navit, a modular navigation system.\r
- * Copyright (C) 2005-2008 Navit Team\r
- *\r
- * This program is free software; you can redistribute it and/or\r
- * modify it under the terms of the GNU General Public License\r
- * version 2 as published by the Free Software Foundation.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program; if not, write to the\r
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,\r
- * Boston, MA  02110-1301, USA.\r
- */\r
-\r
-import java.util.Iterator;\r
-\r
-import android.app.Activity;\r
-import android.app.ListActivity;\r
-import android.content.Intent;\r
-import android.os.Bundle;\r
-import android.util.Log;\r
-import android.view.View;\r
-import android.widget.ArrayAdapter;\r
-import android.widget.ListView;\r
-\r
-public class NavitAddressResultListActivity extends ListActivity\r
-{\r
-       private int              selected_id        = -1;\r
-       private Boolean          is_empty           = true;\r
-       public String[]          result_list        = new String[]{"loading results ..."};\r
-\r
-       @Override\r
-       public void onCreate(Bundle savedInstanceState)\r
-       {\r
-               super.onCreate(savedInstanceState);\r
-               //Log.e("Navit", "all ok");\r
-\r
-               Navit.NavitAddress tmp = new Navit.NavitAddress();\r
-\r
-               Log.e("Navit", "full result count: " + Navit.NavitAddressResultList_foundItems.size());\r
-\r
-               // show "town names" as results only when we dont have any street names in resultlist\r
-               if ((Navit.search_results_streets > 0) || (Navit.search_results_streets_hn > 0))\r
-               {\r
-                       // clear out towns from result list\r
-                       for (Iterator<Navit.NavitAddress> k = Navit.NavitAddressResultList_foundItems\r
-                                       .iterator(); k.hasNext();)\r
-                       {\r
-                               tmp = k.next();\r
-                               if (tmp.result_type.equals("TWN"))\r
-                               {\r
-                                       k.remove();\r
-                               }\r
-                       }\r
-               }\r
-\r
-               Log.e("Navit", "final result count: " + Navit.NavitAddressResultList_foundItems.size());\r
-\r
-               this.result_list = new String[Navit.NavitAddressResultList_foundItems.size()];\r
-               int j = 0;\r
-               for (Iterator<Navit.NavitAddress> i = Navit.NavitAddressResultList_foundItems\r
-                               .iterator(); i.hasNext();)\r
-               {\r
-                       tmp = i.next();\r
-                       this.result_list[j] = tmp.addr;\r
-                       j++;\r
-               }\r
-\r
-               ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,\r
-                               android.R.layout.simple_list_item_1, result_list);\r
-               setListAdapter(adapter);\r
-               is_empty = true;\r
-       }\r
-\r
-       public void add_item_(String item)\r
-       {\r
-               if (item == null)\r
-               {\r
-                       // empty item?\r
-                       return;\r
-               }\r
-\r
-               if (this.is_empty)\r
-               {\r
-                       // clear dummy text, and add this item\r
-                       this.result_list = new String[1];\r
-                       this.result_list[0] = item;\r
-               }\r
-               else\r
-               {\r
-                       // add the item to the end of the list\r
-                       String[] tmp_list = this.result_list;\r
-                       this.result_list = new String[tmp_list.length + 1];\r
-                       for (int i = 0; i < tmp_list.length; i = i + 1)\r
-                       {\r
-                               this.result_list[i] = tmp_list[i];\r
-                       }\r
-                       this.result_list[tmp_list.length] = item;\r
-               }\r
-               ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,\r
-                               android.R.layout.simple_list_item_1, result_list);\r
-               setListAdapter(adapter);\r
-               this.is_empty = false;\r
-       }\r
-\r
-       @Override\r
-       protected void onListItemClick(ListView l, View v, int position, long id)\r
-       {\r
-               super.onListItemClick(l, v, position, id);\r
-               this.selected_id = position;\r
-               Log.e("Navit", "p:" + position);\r
-               Log.e("Navit", "i:" + id);\r
-\r
-               // close this activity\r
-               executeDone();\r
-       }\r
-\r
-       private void executeDone()\r
-       {\r
-               Intent resultIntent = new Intent();\r
-               resultIntent.putExtra("selected_id", selected_id);\r
-               setResult(Activity.RESULT_OK, resultIntent);\r
-               \r
-               NavitAppConfig navitConfig = (NavitAppConfig)getApplicationContext();\r
-               navitConfig.addLastAddress(Navit.NavitAddressResultList_foundItems.get(selected_id));\r
-\r
-               finish();\r
-       }\r
-\r
-}\r
index c57b536..8866d5d 100644 (file)
 \r
 package org.navitproject.navit;\r
 \r
-\r
 import java.lang.reflect.Field;\r
-import java.util.Arrays;
-import java.util.Comparator;
+import java.util.ArrayList;\r
+import java.util.Arrays;\r
+import java.util.Comparator;\r
 import java.util.List;\r
 import java.util.Locale;\r
 \r
 import android.app.Activity;\r
 import android.app.AlertDialog;\r
+import android.app.Dialog;\r
+import android.app.ProgressDialog;\r
 import android.content.DialogInterface;\r
 import android.content.Intent;\r
 import android.content.SharedPreferences;\r
@@ -37,7 +39,7 @@ import android.util.TypedValue;
 import android.view.Gravity;\r
 import android.view.View;\r
 import android.view.View.OnClickListener;\r
-import android.view.WindowManager;
+import android.view.WindowManager;\r
 import android.widget.AdapterView;\r
 import android.widget.AdapterView.OnItemClickListener;\r
 import android.widget.ArrayAdapter;\r
@@ -48,41 +50,75 @@ import android.widget.ImageButton;
 import android.widget.LinearLayout;\r
 import android.widget.ListView;\r
 import android.widget.RelativeLayout;\r
+import android.widget.Toast;\r
 import android.widget.RelativeLayout.LayoutParams;\r
-import android.widget.TextView;
-\r
+import android.widget.TextView;\r
+\r
+public class NavitAddressSearchActivity extends Activity {\r
+       public static final class NavitAddress {\r
+               public NavitAddress(int type, float latitude, float longitude, String address) {\r
+                       result_type = type;\r
+                       lat = latitude;\r
+                       lon = longitude;\r
+                       addr = address;\r
+               }\r
 \r
-public class NavitAddressSearchActivity extends Activity\r
-{\r
-       private EditText     address_string;\r
-       private CheckBox     pm_checkbox;\r
-       private String       mCountry;\r
-       private ImageButton  mCountryButton;\r
-       \r
-       public RelativeLayout   NavitAddressSearchActivity_layout;\r
+               int    result_type;\r
+               float  lat;\r
+               float  lon;\r
+               String addr;\r
+       }\r
 \r
+       private static final String TAG                         = "NavitAddress";\r
+       private static final int    ADDRESS_RESULT_PROGRESS_MAX = 10;\r
        \r
-       private int getDrawableID(String resourceName)\r
-       {\r
+       private List<NavitAddress> Addresses_found              = null;\r
+       private List<NavitAddress> addresses_shown              = null;\r
+       private EditText           address_string;\r
+       private CheckBox           pm_checkbox;\r
+       private String             mCountry;\r
+       private ImageButton        mCountryButton;\r
+       ProgressDialog             search_results_wait          = null;\r
+       public RelativeLayout      NavitAddressSearchActivity_layout;\r
+       private int                search_results_towns           = 0;\r
+       private int                search_results_streets         = 0;\r
+       private int                search_results_streets_hn      = 0;\r
+       private long               search_handle                  = 0;\r
+\r
+       // TODO remember settings\r
+       private static String               last_address_search_string = "";\r
+       private static Boolean              last_address_partial_match = false;\r
+       private static String               last_country = "";\r
+\r
+       private int getDrawableID(String resourceName) {\r
                int drawableId = 0;\r
                try {\r
                        Class<?> res = R.drawable.class;\r
                        Field field = res.getField(resourceName);\r
                        drawableId = field.getInt(null);\r
-               }\r
-               catch (Exception e) {\r
+               } catch (Exception e) {\r
                        Log.e("NavitAddressSearch", "Failure to get drawable id.", e);\r
                }\r
                return drawableId;\r
        }\r
 \r
        @Override\r
-       protected void onCreate(Bundle savedInstanceState)\r
-       {\r
+       protected void onCreate(Bundle savedInstanceState) {\r
                super.onCreate(savedInstanceState);\r
+               \r
+               Bundle extras = getIntent().getExtras();\r
+               if ( extras != null )\r
+               {\r
+                       String search_string = extras.getString("search_string");\r
+                       if (search_string != null) {\r
+                               pm_checkbox.setChecked(true);\r
+                               address_string.setText(search_string);\r
+                               executeSearch();\r
+                               return;\r
+                       }\r
+               }\r
 \r
-               getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,\r
-                               WindowManager.LayoutParams.FLAG_BLUR_BEHIND);\r
+               getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND, WindowManager.LayoutParams.FLAG_BLUR_BEHIND);\r
                LinearLayout panel = new LinearLayout(this);\r
                panel.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));\r
                panel.setOrientation(LinearLayout.VERTICAL);\r
@@ -91,8 +127,7 @@ public class NavitAddressSearchActivity extends Activity
                SharedPreferences settings = getSharedPreferences(Navit.NAVIT_PREFS, MODE_PRIVATE);\r
                mCountry = settings.getString("DefaultCountry", null);\r
 \r
-               if (mCountry == null)\r
-               {\r
+               if (mCountry == null) {\r
                        Locale defaultLocale = Locale.getDefault();\r
                        mCountry = defaultLocale.getCountry().toLowerCase(defaultLocale);\r
                        SharedPreferences.Editor edit_settings = settings.edit();\r
@@ -104,85 +139,74 @@ public class NavitAddressSearchActivity extends Activity
 \r
                mCountryButton.setImageResource(getDrawableID("country_" + mCountry + "_32_32"));\r
 \r
-               mCountryButton.setOnClickListener(new OnClickListener()\r
-               {\r
-                       public void onClick(View v)\r
-                       {\r
+               mCountryButton.setOnClickListener(new OnClickListener() {\r
+                       public void onClick(View v) {\r
                                requestCountryDialog();\r
                        }\r
                });\r
 \r
                // address: label and text field\r
                TextView addr_view = new TextView(this);\r
-               addr_view.setText(Navit.get_text("Enter Destination")); //TRANS\r
+               addr_view.setText(Navit.get_text("Enter Destination")); // TRANS\r
                addr_view.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20f);\r
-               addr_view.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,\r
-                               LayoutParams.WRAP_CONTENT));\r
+               addr_view.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));\r
                addr_view.setPadding(4, 4, 4, 4);\r
 \r
                // partial match checkbox\r
                pm_checkbox = new CheckBox(this);\r
-               pm_checkbox.setText(Navit.get_text("partial match")); //TRANS\r
-               pm_checkbox.setChecked(false);\r
+               pm_checkbox.setText(Navit.get_text("partial match")); // TRANS\r
+               pm_checkbox.setChecked(last_address_partial_match);\r
                pm_checkbox.setGravity(Gravity.CENTER);\r
 \r
                // search button\r
                final Button btnSearch = new Button(this);\r
-               btnSearch.setText(Navit.get_text("Search")); //TRANS\r
-               btnSearch.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,\r
-                               LayoutParams.WRAP_CONTENT));\r
+               btnSearch.setText(Navit.get_text("Search")); // TRANS\r
+               btnSearch.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));\r
                btnSearch.setGravity(Gravity.CENTER);\r
-               btnSearch.setOnClickListener(new OnClickListener()\r
-               {\r
-                       public void onClick(View v)\r
-                       {\r
-                               executeDone();\r
+               btnSearch.setOnClickListener(new OnClickListener() {\r
+                       public void onClick(View v) {\r
+                               last_address_partial_match = pm_checkbox.isChecked();\r
+                               last_address_search_string = address_string.getText().toString();\r
+                               executeSearch();\r
                        }\r
                });\r
 \r
                ListView lastAddresses = new ListView(this);\r
-               NavitAppConfig navitConfig = (NavitAppConfig)getApplicationContext();\r
+               NavitAppConfig navitConfig = (NavitAppConfig) getApplicationContext();\r
 \r
-               final List<Navit.NavitAddress> addresses = navitConfig.getLastAddresses();\r
+               final List<NavitAddress> addresses = navitConfig.getLastAddresses();\r
                int addressCount = addresses.size();\r
                if (addressCount > 0) {\r
                        String[] strAddresses = new String[addressCount];\r
                        for (int addrIndex = 0; addrIndex < addressCount; addrIndex++) {\r
                                strAddresses[addrIndex] = addresses.get(addrIndex).addr;\r
                        }\r
-                       ArrayAdapter<String> addressList = new ArrayAdapter<String>(this,\r
-                                       android.R.layout.simple_list_item_1, strAddresses);\r
+                       ArrayAdapter<String> addressList =\r
+                               new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, strAddresses);\r
                        lastAddresses.setAdapter(addressList);\r
                        lastAddresses.setOnItemClickListener(new OnItemClickListener() {\r
                                public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {\r
+                                       NavitAddress addressSelected = addresses.get(arg2);\r
                                        Intent resultIntent = new Intent();\r
-                                       resultIntent.putExtra("addr_selected", true);\r
-                                       \r
-                                       Navit.NavitAddressResultList_foundItems.clear();\r
-                                       Navit.NavitAddressResultList_foundItems.add(addresses.get(arg2));\r
                                        \r
+                                       resultIntent.putExtra("lat", addressSelected.lat);\r
+                                       resultIntent.putExtra("lon", addressSelected.lon);\r
+                                       resultIntent.putExtra("q", addressSelected.addr);\r
+\r
                                        setResult(Activity.RESULT_OK, resultIntent);\r
                                        finish();\r
                                }\r
                        });\r
                }\r
-               \r
-               Bundle extras = getIntent().getExtras();\r
-               if ( extras != null )\r
-               {\r
-                       String title = extras.getString("title");\r
-                       Boolean partial = extras.getBoolean("partial_match");\r
-                       String address = extras.getString("address_string");\r
 \r
-                       if ( title != null && title.length() > 0)\r
-                               this.setTitle(title);\r
+               String title = getString(R.string.address_search_title);\r
 \r
-                       pm_checkbox.setChecked(partial);\r
+               if (title != null && title.length() > 0)\r
+                       this.setTitle(title);\r
 \r
-                       address_string = new EditText(this);\r
-                       if (address != null)\r
-                               address_string.setText(address);\r
-               }\r
+               address_string = new EditText(this);\r
+               address_string.setText(last_address_search_string);\r
+               address_string.setSelectAllOnFocus(true);\r
 \r
                LinearLayout searchSettingsLayout = new LinearLayout(this);\r
                searchSettingsLayout.setOrientation(LinearLayout.HORIZONTAL);\r
@@ -198,23 +222,22 @@ public class NavitAddressSearchActivity extends Activity
                setContentView(panel);\r
        }\r
 \r
-       private void requestCountryDialog()\r
-       {\r
-               final String [][]all_countries = NavitGraphics.GetAllCountries();\r
-
-               Comparator<String[]> country_comperator = new Comparator<String[]>(){
-                       public int compare(String[] object1, String[] object2) {
-                               return object1[1].compareTo(object2[1]);
-                       }};
-
-               Arrays.sort(all_countries, country_comperator );
+       private void requestCountryDialog() {\r
+               final String[][] all_countries = NavitGraphics.GetAllCountries();\r
+\r
+               Comparator<String[]> country_comperator = new Comparator<String[]>() {\r
+                       public int compare(String[] object1, String[] object2) {\r
+                               return object1[1].compareTo(object2[1]);\r
+                       }\r
+               };\r
+\r
+               Arrays.sort(all_countries, country_comperator);\r
 \r
                AlertDialog.Builder mapModeChooser = new AlertDialog.Builder(this);\r
                // ToDo also show icons and country code\r
-               String []country_name = new String[all_countries.length];\r
+               String[] country_name = new String[all_countries.length];\r
 \r
-               for (int country_index = 0; country_index < all_countries.length; country_index++)\r
-               {\r
+               for (int country_index = 0; country_index < all_countries.length; country_index++) {\r
                        country_name[country_index] = all_countries[country_index][1];\r
                }\r
 \r
@@ -227,19 +250,111 @@ public class NavitAddressSearchActivity extends Activity
                                edit_settings.commit();\r
 \r
                                mCountryButton.setImageResource(getDrawableID("country_" + mCountry + "_32_32"));\r
-                       }\r
+                       }\r
                });\r
 \r
                mapModeChooser.show();\r
        }\r
 \r
-       private void executeDone()\r
-       {\r
-               Intent resultIntent = new Intent();\r
-               resultIntent.putExtra("address_string", address_string.getText().toString());\r
-               resultIntent.putExtra("country", mCountry);\r
-               resultIntent.putExtra("partial_match", pm_checkbox.isChecked());\r
-               setResult(Activity.RESULT_OK, resultIntent);\r
-               finish();\r
+       /**\r
+        * start a search on the map\r
+        */\r
+       public void receiveAddress(int type, float latitude, float longitude, String address) {\r
+               Log.e(TAG, "(" + String.valueOf(latitude) + ", " + String.valueOf(longitude) + ") " + address);\r
+\r
+               switch (type) {\r
+               case 0:\r
+                       search_results_towns++;\r
+                       break;\r
+               case 1:\r
+                       search_results_streets++;\r
+                       break;\r
+               case 2:\r
+                       search_results_streets_hn++;\r
+                       break;\r
+\r
+               }\r
+               search_results_wait.setMessage(Navit.get_text("towns") + ":" + search_results_towns + " "\r
+                       + Navit.get_text("Streets") + ":" + search_results_streets + "/"\r
+                       + search_results_streets_hn);\r
+\r
+               search_results_wait.setProgress(Addresses_found.size() % (ADDRESS_RESULT_PROGRESS_MAX + 1));\r
+\r
+               Addresses_found.add(new NavitAddress(type, latitude, longitude, address));\r
+       }\r
+\r
+       public void finishAddressSearch() {\r
+               if (Addresses_found.isEmpty()) {\r
+                       Toast.makeText( getApplicationContext(),getString(R.string.address_search_not_found) + "\n" + address_string.getText().toString(), Toast.LENGTH_LONG).show(); //TRANS\r
+                       setResult(Activity.RESULT_CANCELED);\r
+                       finish();\r
+               }\r
+               ListView addressesFound = new ListView(this);\r
+               ArrayAdapter<String> addressList =\r
+                   new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);\r
+               \r
+               addresses_shown = new ArrayList<NavitAddress>();\r
+               \r
+               for (NavitAddress currentAddress : Addresses_found) {\r
+                       if (currentAddress.result_type != 0 || search_results_streets == 0) {\r
+                               addressList.add(currentAddress.addr);\r
+                               addresses_shown.add(currentAddress);\r
+                       }\r
+               }\r
+\r
+               addressesFound.setAdapter(addressList);\r
+\r
+               addressesFound.setOnItemClickListener(new OnItemClickListener() {\r
+                       public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {\r
+                               NavitAddress addressSelected = addresses_shown.get(arg2);\r
+                               Intent resultIntent = new Intent();\r
+                               \r
+                               resultIntent.putExtra("lat", addressSelected.lat);\r
+                               resultIntent.putExtra("lon", addressSelected.lon);\r
+                               resultIntent.putExtra("q", addressSelected.addr);\r
+\r
+                               setResult(Activity.RESULT_OK, resultIntent);\r
+                               finish();\r
+                       }\r
+               });\r
+\r
+               setContentView(addressesFound);\r
+               search_results_wait.dismiss();\r
+       }\r
+\r
+       public native long CallbackStartAddressSearch(int partial_match, String country, String s);\r
+       public native void CallbackCancelAddressSearch(long handle);\r
+\r
+       @Override\r
+       protected Dialog onCreateDialog(int id) {\r
+               search_results_wait = new ProgressDialog(this);\r
+               search_results_wait.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);\r
+               search_results_wait.setTitle("loading search results");\r
+               search_results_wait.setMessage("--");\r
+               search_results_wait.setCancelable(true);\r
+               search_results_wait.setProgress(0);\r
+               search_results_wait.setMax(10);\r
+               \r
+               Addresses_found = new ArrayList<NavitAddress>();\r
+               search_results_towns = 0;\r
+               search_results_streets = 0;\r
+               search_results_streets_hn = 0;\r
+\r
+               search_handle = CallbackStartAddressSearch(pm_checkbox.isChecked() ? 1 : 0, mCountry, address_string.getText().toString());\r
+\r
+               search_results_wait.setOnCancelListener(new DialogInterface.OnCancelListener() {\r
+                       @Override\r
+                       public void onCancel(DialogInterface dialog) {\r
+                               CallbackCancelAddressSearch(search_handle);\r
+                               search_handle = 0;\r
+                               search_results_wait.dismiss();\r
+                       }\r
+               });\r
+               return search_results_wait;\r
+       }\r
+       \r
+       void executeSearch() {\r
+               showDialog(0);\r
        }\r
 }\r
+\r
index 2b5090d..a139133 100755 (executable)
@@ -3,7 +3,7 @@ package org.navitproject.navit;
 import java.util.ArrayList;\r
 import java.util.List;\r
 \r
-import org.navitproject.navit.Navit.NavitAddress;\r
+import org.navitproject.navit.NavitAddressSearchActivity.NavitAddress;\r
 \r
 import android.app.Application;\r
 import android.content.SharedPreferences;\r
@@ -12,7 +12,7 @@ public class NavitAppConfig extends Application {
 \r
        private static final int         MAX_LAST_ADDRESSES = 10;\r
 \r
-       private List<Navit.NavitAddress> mLastAddresses     = null;\r
+       private List<NavitAddress> mLastAddresses     = null;\r
        private int                      mLastAddressField;\r
        private SharedPreferences        mSettings;\r
 \r
@@ -24,7 +24,7 @@ public class NavitAppConfig extends Application {
 \r
        public List<NavitAddress> getLastAddresses() {\r
                if (mLastAddresses == null) {\r
-                       mLastAddresses = new ArrayList<Navit.NavitAddress>();\r
+                       mLastAddresses = new ArrayList<NavitAddress>();\r
                        int mLastAddressField = mSettings.getInt("LastAddress", -1);\r
                        if (mLastAddressField >= 0) {\r
                                int index = mLastAddressField;\r
@@ -32,11 +32,11 @@ public class NavitAppConfig extends Application {
                                        String addr_str = mSettings.getString("LastAddress_" + String.valueOf(index), "");\r
 \r
                                        if (addr_str.length() > 0) {\r
-                                               Navit.NavitAddress address = new Navit.NavitAddress();\r
-                                               address.addr = addr_str;\r
-                                               address.lat = mSettings.getFloat("LastAddress_Lat_" + String.valueOf(index), 0);\r
-                                               address.lon = mSettings.getFloat("LastAddress_Lon_" + String.valueOf(index), 0);\r
-                                               mLastAddresses.add(address);\r
+                                               mLastAddresses.add(new NavitAddress(\r
+                                                       1,\r
+                                                       mSettings.getFloat("LastAddress_Lat_" + String.valueOf(index), 0),\r
+                                                       mSettings.getFloat("LastAddress_Lon_" + String.valueOf(index), 0),\r
+                                                       addr_str));\r
                                        }\r
 \r
                                        if (--index < 0) index = MAX_LAST_ADDRESSES - 1;\r
@@ -47,7 +47,7 @@ public class NavitAppConfig extends Application {
                return mLastAddresses;\r
        }\r
 \r
-       public void addLastAddress(Navit.NavitAddress newAddress) {\r
+       public void addLastAddress(NavitAddress newAddress) {\r
                getLastAddresses();\r
 \r
                mLastAddresses.add(newAddress);\r
index ee91d5d..1b52f66 100644 (file)
@@ -4,7 +4,6 @@ package org.navitproject.navit;
 import android.app.Dialog;
 import android.app.ProgressDialog;
 import android.content.DialogInterface;
-import android.content.Intent;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
@@ -12,32 +11,20 @@ import android.util.Log;
 import android.widget.Toast;
 
 public class NavitDialogs extends Handler{
-
-       public static Boolean             NavitAddressSearchSpinnerActive  = false;
-       public static String              Navit_last_address_search_string = "";
-       public static Boolean             Navit_last_address_partial_match = false;
-       public static String              Navit_last_country = "";
-
        // Dialogs
        public static final int           DIALOG_MAPDOWNLOAD               = 1;
-       public static final int           DIALOG_SEARCHRESULTS_WAIT        = 3;
 
        // dialog messages
        static final int MSG_MAP_DOWNLOAD_FINISHED   = 0;
        static final int MSG_PROGRESS_BAR          = 1;
        static final int MSG_TOAST                 = 2;
        static final int MSG_TOAST_LONG            = 3;
-       static final int MSG_SEARCH                = 4;
-       static final int MSG_PROGRESS_BAR_SEARCH   = 5;
        static final int MSG_POSITION_MENU         = 6;
        static final int MSG_START_MAP_DOWNLOAD    = 7;
        static final int MSG_REMOVE_DIALOG_GENERIC = 99;
        static Handler mHandler;
 
        private ProgressDialog                    mapdownloader_dialog     = null;
-       private ProgressDialog                    search_results_wait      = null;
-       private SearchResultsThread               searchresultsThread      = null;
-       private SearchResultsThreadSpinner        searchresultsSpinner     = null;
        private NavitMapDownloader                mapdownloader            = null;
 
        private Navit mActivity;
@@ -63,7 +50,6 @@ public class NavitDialogs extends Handler{
                mHandler.sendMessage(msg);
        }
 
-
        @Override
        public void handleMessage(Message msg)
        {
@@ -92,21 +78,6 @@ public class NavitDialogs extends Handler{
                case MSG_TOAST_LONG :
                        Toast.makeText(mActivity, msg.getData().getString("text"), Toast.LENGTH_LONG).show();
                        break;
-               case MSG_PROGRESS_BAR_SEARCH :
-                       // change values - generic
-                       int what_dialog_generic = msg.getData().getInt("dialog_num");
-                       if (what_dialog_generic == DIALOG_SEARCHRESULTS_WAIT)
-                       {
-                               search_results_wait.setMax(msg.getData().getInt("value1"));
-                               search_results_wait.setProgress(msg.getData().getInt("value2"));
-                               search_results_wait.setTitle(msg.getData().getString("title"));
-                               search_results_wait.setMessage(msg.getData().getString("text"));
-                       }
-                       break;
-               case MSG_SEARCH :
-                       // show dialog - generic
-                       mActivity.showDialog(DIALOG_SEARCHRESULTS_WAIT);
-                       break;
                case MSG_START_MAP_DOWNLOAD:
                {
                        int download_map_id = msg.arg1;
@@ -118,7 +89,7 @@ public class NavitDialogs extends Handler{
                        {
                                mActivity.showDialog(NavitDialogs.DIALOG_MAPDOWNLOAD);
 
-                               mapdownloader = new NavitMapDownloader(download_map_id, NavitDialogs.DIALOG_MAPDOWNLOAD);
+                               mapdownloader = new NavitMapDownloader(download_map_id);
                                mapdownloader.start();
                        }
                }
@@ -135,22 +106,6 @@ public class NavitDialogs extends Handler{
        {
                switch (id)
                {
-                       case DIALOG_SEARCHRESULTS_WAIT :
-                               search_results_wait = new ProgressDialog(mActivity);
-                               search_results_wait.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
-                               search_results_wait.setTitle("--");
-                               search_results_wait.setMessage("--");
-                               search_results_wait.setCancelable(false);
-                               search_results_wait.setProgress(0);
-                               search_results_wait.setMax(10);
-                               searchresultsThread = new SearchResultsThread(this, DIALOG_SEARCHRESULTS_WAIT);
-                               searchresultsThread.start();
-
-                               NavitAddressSearchSpinnerActive = true;
-                               searchresultsSpinner = new SearchResultsThreadSpinner(this, DIALOG_SEARCHRESULTS_WAIT);
-                               post(searchresultsSpinner);
-
-                               return search_results_wait;
                        case DIALOG_MAPDOWNLOAD :
                                mapdownloader_dialog = new ProgressDialog(mActivity);
                                mapdownloader_dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
@@ -177,112 +132,4 @@ public class NavitDialogs extends Handler{
                // should never get here!!
                return null;
        }
-
-       public class SearchResultsThreadSpinner implements Runnable
-       {
-               int             dialog_num;
-               int             spinner_current_value;
-
-               SearchResultsThreadSpinner(Handler h, int dialog_num)
-               {
-                       this.dialog_num = dialog_num;
-                       this.spinner_current_value = 0;
-                       Log.e("Navit", "SearchResultsThreadSpinnerThread created");
-               }
-               public void run()
-               {
-                       if ( NavitAddressSearchSpinnerActive ) {
-                               
-                               sendDialogMessage( MSG_PROGRESS_BAR_SEARCH
-                                                , Navit.get_text("getting search results")
-                                                , Navit.get_text("searching ...")
-                                                , dialog_num
-                                                , Navit.ADDRESS_RESULTS_DIALOG_MAX
-                                                , spinner_current_value % (Navit.ADDRESS_RESULTS_DIALOG_MAX + 1));
-                               
-                               spinner_current_value++;
-                               postDelayed(this, 700);
-                       }
-               }
-       }
-
-
-       public class SearchResultsThread extends Thread
-       {
-               Handler                         mHandler;
-               int                                     my_dialog_num;
-
-               SearchResultsThread(Handler h, int dialog_num)
-               {
-                       this.mHandler = h;
-                       this.my_dialog_num = dialog_num;
-                       Log.e("Navit", "SearchResultsThread created");
-               }
-
-               public void run()
-               {
-                       Log.e("Navit", "SearchResultsThread started");
-                       Message msg;
-                       Bundle  bundle;
-                       // initialize the dialog with sane values
-                       sendDialogMessage( MSG_PROGRESS_BAR_SEARCH
-                                        , Navit.get_text("getting search results")
-                                        , Navit.get_text("searching ...")
-                                        , my_dialog_num
-                                        , Navit.ADDRESS_RESULTS_DIALOG_MAX
-                                        , 0);
-
-                       int partial_match_i = 0;
-                       if (Navit_last_address_partial_match)
-                       {
-                               partial_match_i = 1;
-                       }
-
-                       // start the search, this could take a long time!!
-                       Log.e("Navit", "SearchResultsThread run1");
-                       Navit_last_address_search_string = filter_bad_chars(Navit_last_address_search_string);
-                       Navit.N_NavitGraphics.CallbackSearchResultList(partial_match_i, Navit_last_country, Navit_last_address_search_string);
-                       Log.e("Navit", "SearchResultsThread run2");
-                       NavitAddressSearchSpinnerActive = false;
-
-                       if (Navit.NavitAddressResultList_foundItems.size() > 0)
-                       {
-                               open_search_result_list();
-                       }
-                       else
-                       {
-                               // not results found, show toast
-                               msg = mHandler.obtainMessage(MSG_TOAST);
-                               bundle = new Bundle();
-                               bundle.putString("text", Navit.get_text("No Results found!")); //TRANS
-                               msg.setData(bundle);
-                               mHandler.sendMessage(msg);
-                       }
-
-                       // ok, remove dialog
-                       msg = mHandler.obtainMessage(MSG_REMOVE_DIALOG_GENERIC);
-                       bundle = new Bundle();
-                       bundle.putInt("dialog_num", this.my_dialog_num);
-                       msg.setData(bundle);
-                       mHandler.sendMessage(msg);
-
-                       Log.e("Navit", "SearchResultsThread ended");
-               }
-
-               public String filter_bad_chars(String in)
-               {
-                       String out = in;
-                       out = out.replaceAll("\\n", " "); // newline -> space
-                       out = out.replaceAll("\\r", " "); // return -> space
-                       out = out.replaceAll("\\t", " "); // tab -> space
-                       return out;
-               }
-       }
-       
-       public void open_search_result_list()
-       {
-               // open result list
-               Intent address_result_list_activity = new Intent(mActivity, NavitAddressResultListActivity.class);
-               mActivity.startActivityForResult(address_result_list_activity, Navit.NavitAddressResultList_id);
-       }
 }
index 58ef89f..c79315b 100644 (file)
@@ -23,8 +23,6 @@ import java.io.File;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 
-import org.navitproject.navit.Navit.NavitAddress;
-
 import android.app.Activity;
 import android.content.Context;
 import android.graphics.Bitmap;
@@ -893,51 +891,6 @@ public class NavitGraphics
        }
 
 
-       /**
-        * start a search on the map
-        */
-       public void fillStringArray(String s)
-       {
-               // Log.e("NavitGraphics", "**** fillStringArray s=" + s);
-               // deactivate the spinner
-               NavitDialogs.NavitAddressSearchSpinnerActive = false;
-
-               Navit.NavitAddress tmp_addr = new NavitAddress();
-               String[] tmp_s = s.split(":");
-               tmp_addr.result_type = tmp_s[0];
-               tmp_addr.item_id = tmp_s[1];
-               tmp_addr.lat = Float.parseFloat(tmp_s[2]);
-               tmp_addr.lon = Float.parseFloat(tmp_s[3]);
-               // the rest ist address
-               tmp_addr.addr = s.substring(4 + tmp_s[0].length() + tmp_s[1].length() + tmp_s[2].length()
-                               + tmp_s[3].length(), s.length());
-               Navit.NavitAddressResultList_foundItems.add(tmp_addr);
-
-               if (tmp_addr.result_type.equals("TWN"))
-               {
-                       Navit.search_results_towns++;
-               }
-               else if (tmp_addr.result_type.equals("STR"))
-               {
-                       Navit.search_results_streets++;
-               }
-               else if (tmp_addr.result_type.equals("SHN"))
-               {
-                       Navit.search_results_streets_hn++;
-               }
-               
-               // make the dialog move its bar ...
-               NavitDialogs.sendDialogMessage( NavitDialogs.MSG_PROGRESS_BAR_SEARCH
-                               , Navit.get_text("loading search results")
-                               , Navit.get_text("towns") + ":" + Navit.search_results_towns + " "
-                                       + Navit.get_text("Streets") + ":" + Navit.search_results_streets + "/"
-                                       + Navit.search_results_streets_hn
-                               , NavitDialogs.DIALOG_SEARCHRESULTS_WAIT
-                               , Navit.ADDRESS_RESULTS_DIALOG_MAX
-                               , Navit.NavitAddressResultList_foundItems.size() % (Navit.ADDRESS_RESULTS_DIALOG_MAX + 1));
-       }
-
-       public native void CallbackSearchResultList(int partial_match, String country, String s);
 
 
        /**
index 2035332..b6c386d 100644 (file)
@@ -345,7 +345,7 @@ public class NavitMapDownloader extends Thread
                Log.d(TAG, "stop_me -> true");\r
        }\r
 \r
-       public NavitMapDownloader(int map_id, int dialog_num)\r
+       public NavitMapDownloader(int map_id)\r
        {\r
                this.map_values = osm_maps[map_id];\r
        }\r
index 9de1efd..19db782 100644 (file)
@@ -107,7 +107,7 @@ static void search_list_search_free(struct search_list *sl, int level);
  * @param attr_type attribute value
  * @return corresponding search list level (country=0, town=1, ...)
  */
-static int
+int
 search_list_level(enum attr_type attr_type)
 {
        switch(attr_type) {
@@ -1022,308 +1022,3 @@ void
 search_init(void)
 {
 }
-
-
-static char *
-search_fix_spaces(const char *str)
-{
-       int i;
-       int len=strlen(str);
-       char c,*s,*d,*ret=g_strdup(str);
-
-       for (i = 0 ; i < len ; i++) {
-               if (ret[i] == ',' || ret[i] == ',' || ret[i] == '/')
-                       ret[i]=' ';
-       }
-       s=ret;
-       d=ret;
-       len=0;
-       do {
-               c=*s++;
-               if (c != ' ' || len != 0) {
-                       *d++=c;
-                       len++;
-               }
-               while (c == ' ' && *s == ' ')
-                       s++;
-               if (c == ' ' && *s == '\0') {
-                       d--;
-                       len--;
-               }
-       } while (c);
-       return ret;
-}
-
-static GList *
-search_split_phrases(char *str)
-{
-       char *tmp,*s,*d;
-       GList *ret=NULL;
-       s=str;
-       do {
-               tmp=g_strdup(s);
-               d=tmp+strlen(s)-1;
-               ret=g_list_append(ret, g_strdup(s));
-               while (d >= tmp) {
-                       if (*d == ' ') {
-                               *d = '\0';
-                               ret=g_list_append(ret, g_strdup(tmp));
-                       }
-                       d--;
-               }
-               g_free(tmp);
-               do {
-                       s++;
-                       if (*s == ' ') {
-                               s++;
-                               break;
-                       }
-               } while (*s != '\0');
-       } while (*s != '\0');
-       return ret;
-}
-
-static GList *
-search_address_housenumber_real(GList *result_list, struct search_list *sl, char *street_name, GList *phrases, GList *exclude1, GList *exclude2, GList *exclude3, int partial, struct jni_object *jni)
-{
-       // here we search actually for the housenumber
-       struct search_list_result *slr;
-       struct coord_geo g;
-       struct coord c;
-
-       dbg(1,"street:%s\n",street_name);
-       while ((slr=search_list_get_result(sl)))
-       {
-               // does the streetname of the housenumber match the street we want?
-               if (slr->street != NULL)
-               if ((street_name != NULL)&&(slr->street->name != NULL))
-               {
-                       //dbg(0,"ffffff 1.1 %s %s",street_name,slr->street->name);
-                       if (strcmp(slr->street->name, street_name)==0)
-                       {
-                               char *buffer;
-                               // coords of result
-                               c.x=slr->house_number->common.c->x;
-                               c.y=slr->house_number->common.c->y;
-                               transform_to_geo(slr->house_number->common.c->pro, &c, &g);
-                               //dbg(0,"g=%f %f\n",g.lat,g.lng);
-                               //dbg(0,"###### Result with housenumber: streetname=%s\n",slr->street->name);
-                               //dbg(0,"###### Result with housenumber: %s %s(%s) %s %s\n",slr->house_number->common.postal,slr->house_number->common.town_name, slr->house_number->common.district_name,slr->street->name,slr->house_number->house_number);
-                               // SHN -> street with house number
-                               // return a string like: "SHN:H111L5555:16.766:48.76:full address name is at the end"
-                               // ca. 9 chars : ca. 9 chars : max. 100 max. 100 max. 100 max. 15 chars -> this sould be max. about 335 chars long
-                               if (slr->town->common.postal == NULL)
-                               {
-                                       buffer=g_strdup_printf("SHN:H%dL%d:%f:%f:%.101s, %.101s, %.101s %.15s",slr->street->common.item.id_hi,slr->street->common.item.id_lo,g.lat,g.lng,slr->country->name,slr->town->common.town_name,slr->street->name,slr->house_number->house_number);
-                               }
-                               else
-                               {
-                                       buffer=g_strdup_printf("SHN:H%dL%d:%f:%f:%.101s, %.7s %.101s, %.101s %.15s",slr->street->common.item.id_hi,slr->street->common.item.id_lo,g.lat,g.lng,slr->country->name,slr->town->common.postal,slr->town->common.town_name,slr->street->name,slr->house_number->house_number);
-                               }
-                               // deactivated now * result_list=g_list_prepend(result_list,g_strdup(buffer));
-#ifdef HAVE_API_ANDROID
-                               // return results to android as they come in ...
-                               android_return_search_result(jni,buffer);
-#endif
-                               g_free(buffer);
-                       }
-               }
-
-       }
-       return result_list;
-}
-
-static GList *
-search_address_housenumber(GList *result_list, struct search_list *sl, GList *phrases, GList *exclude1, GList *exclude2, GList *exclude3, int partial, struct jni_object *jni)
-{
-       // title is wrong
-       // this is actually "street search" and "housenumber search" is at the bottom of this function
-       //
-       // housenumbers are not found as of now (2011-02-28)
-       //
-
-       //dbg(0,"enter\n");
-       struct search_list_result *slr;
-       GList *tmp=phrases;
-       int count=0;
-       struct attr attr;
-       struct coord_geo g;
-       struct coord c;
-       struct attr attr2;
-       attr.type=attr_street_name;
-       while ((slr=search_list_get_result(sl)))
-       {
-               char *buffer;
-               //dbg(0,"%p %p\n",slr->country,slr->town);
-               //dbg(0,"%p\n",slr->street);
-               // dbg(0,"###### Result without housenumber: country=%s country_name=%s town=%s street=%s\n",slr->country->iso2,slr->country->name,slr->town->common.town_name,slr->street->name);
-               //dbg(0,"###### Result without housenumber: postal:%s\n",slr->town->common.postal);
-               //dbg(0,"###### Result without housenumber: postal_mask:%s\n",slr->town->common.postal_mask);
-               //dbg(0,"###### Result without housenumber: STR postal:%s\n",slr->street->common.postal);
-               //dbg(0,"###### Result without housenumber: STR postal_mask:%s\n",slr->street->common.postal_mask);
-               //dbg(0,"###### Result without housenumber: item id_hi:%d id_lo:%d\n",slr->street->common.item.id_hi,slr->street->common.item.id_lo);
-
-               // coords of result
-               c.x=slr->street->common.c->x;
-               c.y=slr->street->common.c->y;
-               transform_to_geo(slr->street->common.c->pro, &c, &g);
-               //dbg(0,"g=%f %f\n",g.lat,g.lng);
-
-               //dbg(0,"xx1");
-               // STR -> street
-               // return a string like: "STR:H1111L5555:16.766:-48.76:full address name is at the end"
-               // ca. 9 chars : ca. 9 chars : max. 100 max. 100 max. 100 chars -> this sould be max. about 320 chars long
-               if (slr->town->common.postal == NULL)
-               {
-                       buffer=g_strdup_printf("STR:H%dL%d:%f:%f:%.101s,%.101s, %.101s",slr->street->common.item.id_hi,slr->street->common.item.id_lo,g.lat,g.lng,slr->country->name,slr->town->common.town_name,slr->street->name);
-               }
-               else
-               {
-                       buffer=g_strdup_printf("STR:H%dL%d:%f:%f:%.101s,%.7s %.101s, %.101s",slr->street->common.item.id_hi,slr->street->common.item.id_lo,g.lat,g.lng,slr->country->name,slr->town->common.postal,slr->town->common.town_name,slr->street->name);
-               }
-               // deactivated now * result_list=g_list_prepend(result_list,g_strdup(buffer));
-
-#ifdef HAVE_API_ANDROID
-               // return results to android as they come in ...
-               android_return_search_result(jni,buffer);
-#endif
-               count++;
-
-               while (tmp)
-               {
-                       if (tmp != exclude1 && tmp != exclude2 && tmp != exclude3 && slr->street)
-                       {
-                               attr2.type=attr_house_number;
-                               attr2.u.str=tmp->data;
-                               search_list_search(sl, &attr2, partial);
-                               //dbg(0,"hn str=%s\n",attr2.u.str);
-                               result_list=search_address_housenumber_real(result_list, sl, slr->street->name, phrases, exclude1, exclude2, exclude3, partial, jni);
-                       }
-                       tmp=g_list_next(tmp);
-               }
-               g_free(buffer);
-       }
-       if (!count)
-       {
-               return result_list;
-       }
-       return result_list;
-}
-
-static GList *
-search_address_street(GList *result_list, struct search_list *sl, GList *phrases, GList *exclude1, GList *exclude2, int partial, struct jni_object *jni)
-{
-       // title is wrong
-       // this is actually "town search" !!
-
-       //dbg(0,"enter\n");
-       struct search_list_result *slr;
-       GList *tmp=phrases;
-       int count=0;
-       struct coord_geo g;
-       struct coord c;
-       struct attr attr;
-       attr.type=attr_street_name;
-       while ((slr=search_list_get_result(sl)))
-       {
-               char *buffer;
-               //dbg(0,"##### sss1");
-               // dbg(0,"###### Result town: country=%s country_name=%s town=%s",slr->country->iso2,slr->country->name,slr->town->common.town_name);
-               // dbg(0,"###### Result town: postal=%s postal_mask=%s",slr->town->common.postal,slr->town->common.postal_mask);
-
-               // coords of result
-               c.x=slr->town->common.c->x;
-               c.y=slr->town->common.c->y;
-               transform_to_geo(slr->town->common.c->pro, &c, &g);
-
-               // TWN -> town
-               if (slr->town->common.postal == NULL)
-               {
-                       buffer=g_strdup_printf("TWN:H%dL%d:%f:%f:%.101s, %.101s",slr->town->common.item.id_hi,slr->town->common.item.id_lo,g.lat,g.lng,slr->country->name,slr->town->common.town_name);
-               }
-               else
-               {
-                       buffer=g_strdup_printf("TWN:H%dL%d:%f:%f:%.101s, %.7s %.101s",slr->town->common.item.id_hi,slr->town->common.item.id_lo,g.lat,g.lng,slr->country->name,slr->town->common.postal,slr->town->common.town_name);
-               }
-               // deactivated now * result_list=g_list_prepend(result_list,g_strdup(buffer));
-#ifdef HAVE_API_ANDROID
-               // return results to android as they come in ...
-               android_return_search_result(jni,buffer);
-#endif
-
-
-#if 0
-               dbg(0,"%s %s %s %s",slr->country->car,slr->town->name,slr->town->district,slr->street->name);
-#endif
-               /*
-               dbg(0,"%s %s %s\n",slr->country->iso2,slr->town->county,slr->street->name);
-               struct attr attr77;
-               if (item_attr_get(&slr->town->itemt, attr_label, &attr77))
-               {
-                       dbg(0,"***search result T=%s",attr77.u.str);
-               }
-               */
-               count++;
-               g_free(buffer);
-       }
-       if (!count)
-               return result_list;
-       //dbg(0,"count %d\n",count);
-       while (tmp)
-       {
-               if (tmp != exclude1 && tmp != exclude2)
-               {
-                       attr.u.str=tmp->data;
-                       search_list_search(sl, &attr, partial);
-                       result_list=search_address_housenumber(result_list, sl, phrases, exclude1, exclude2, tmp, partial, jni);
-               }
-               tmp=g_list_next(tmp);
-       }
-       return result_list;
-}
-
-static GList *
-search_address_town(GList *result_list, struct search_list *sl, GList *phrases, GList *exclude, int partial, struct jni_object *jni)
-{
-       GList *tmp=phrases;
-       int count=0;
-       struct attr attr;
-       struct search_list_result *slr;
-       //dbg(0,"enter\n");
-       attr.type=attr_town_or_district_name;
-       while ((slr=search_list_get_result(sl)))
-       {
-               count++;
-       }
-       if (!count)
-               return result_list;
-       //dbg(0,"count %d\n",count);
-       while (tmp)
-       {
-               if (tmp != exclude)
-               {
-                       attr.u.str=tmp->data;
-                       search_list_search(sl, &attr, partial);
-                       result_list=search_address_street(result_list, sl, phrases, exclude, tmp, partial, jni);
-               }
-               tmp=g_list_next(tmp);
-       }
-       //dbg(0,"ret");
-       return result_list;
-}
-
-GList *
-search_by_address(struct search_list *sl, const char *addr, int partial, struct jni_object *jni)
-{
-       char *str=search_fix_spaces(addr);
-       GList *phrases=search_split_phrases(str);
-       GList *ret = NULL;
-       dbg(0,"enter %s\n",addr);
-       ret=search_address_town(ret, sl, phrases, NULL, partial, jni);
-
-       g_free(str);
-       dbg(0,"leave %p\n",ret);
-       return ret;
-}
-
-
index 79a4720..429b5d6 100644 (file)
@@ -77,6 +77,7 @@ struct search_list;
 struct search_list_result;
 struct jni_object;
 struct search_list *search_list_new(struct mapset *ms);
+int search_list_level(enum attr_type attr_type);
 void search_list_search(struct search_list *this_, struct attr *search_attr, int partial);
 char *search_postal_merge(char *mask, char *new_);
 char *search_postal_merge_replace(char *mask, char *new_);
@@ -85,7 +86,6 @@ char *search_list_get_unique(struct search_list *this_, char *unique);
 struct search_list_result *search_list_get_result(struct search_list *this_);
 void search_list_destroy(struct search_list *this_);
 void search_init(void);
-GList * search_by_address(struct search_list *this_, const char *addr, int partial, struct jni_object *jni);
 /* end of prototypes */
 #ifdef __cplusplus
 }