From 605a9424b24e4d63915407301d0f0b933e4d0c69 Mon Sep 17 00:00:00 2001 From: rikky Date: Wed, 31 Aug 2011 21:45:59 +0000 Subject: [PATCH] Add:android:Add country selection to android search dialog git-svn-id: https://navit.svn.sourceforge.net/svnroot/navit/trunk@4742 ffa7fe5e-494d-0410-b361-a75ebd5db220 --- navit/navit/android.c | 121 ++++++++++++++- .../android/src/org/navitproject/navit/Navit.java | 6 +- .../navit/NavitAddressSearchActivity.java | 164 +++++++++++++++------ .../src/org/navitproject/navit/NavitDialogs.java | 9 +- .../src/org/navitproject/navit/NavitGraphics.java | 14 +- navit/navit/country.c | 38 ++--- navit/navit/search.c | 51 +++---- navit/navit/search.h | 2 +- 8 files changed, 288 insertions(+), 117 deletions(-) diff --git a/navit/navit/android.c b/navit/navit/android.c index fb0a87a..a299582 100644 --- a/navit/navit/android.c +++ b/navit/navit/android.c @@ -74,7 +74,7 @@ Java_org_navitproject_navit_Navit_NavitMain( JNIEnv* env, jobject thiz, jobject strings[0]=(*env)->GetStringUTFChars(env, path, NULL); main_real(1, strings); (*env)->ReleaseStringUTFChars(env, path, strings[0]); - + } JNIEXPORT void JNICALL @@ -127,7 +127,7 @@ Java_org_navitproject_navit_NavitTimeout_TimeoutCallback( JNIEnv* env, jobject t { dbg(1,"enter %p %d %p\n",thiz, delete, (void *)id); callback_call_0((struct callback *)id); - if (delete) + if (delete) (*jnienv)->DeleteGlobalRef(jnienv, thiz); } @@ -135,7 +135,7 @@ 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_NavitIdle_IdleCallback( JNIEnv* env, jobject thiz, int id) @@ -194,7 +194,7 @@ android_return_search_result(struct jni_object *jni_o, char *str) } JNIEXPORT void JNICALL -Java_org_navitproject_navit_NavitGraphics_CallbackSearchResultList( JNIEnv* env, jobject thiz, int partial, jobject str) +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); @@ -207,14 +207,25 @@ Java_org_navitproject_navit_NavitGraphics_CallbackSearchResultList( JNIEnv* env, if(aMethodID != 0) { struct jni_object my_jni_object; - GList *ret; + 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(ms4,search_string,partial,&my_jni_object); + /* 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); @@ -266,6 +277,7 @@ Java_org_navitproject_navit_NavitGraphics_CallbackMessageChannel( JNIEnv* env, j navit_zoom_out_cursor(attr.u.navit, 2); break; case 6: + // this procedure is not used at the moment!! // hopefully use a newly downloaded map, we just hope its set in navit.xml (make nicer soon) @@ -284,11 +296,12 @@ Java_org_navitproject_navit_NavitGraphics_CallbackMessageChannel( JNIEnv* env, j break; 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); s=(*env)->GetStringUTFChars(env, str, NULL); @@ -324,6 +337,7 @@ Java_org_navitproject_navit_NavitGraphics_CallbackMessageChannel( JNIEnv* env, j break; case 3: { + // navigate to geo position char *name; s=(*env)->GetStringUTFChars(env, str, NULL); char parse_str[strlen(s) + 1]; @@ -367,3 +381,96 @@ Java_org_navitproject_navit_NavitGraphics_CallbackMessageChannel( JNIEnv* env, j } } +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(0,"enter %d %p\n",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(0,"country %s\n", 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(0,"Get result: %s\n", 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(0,"enter\n"); + + 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; + search_attr.type=attr_country_all; + //dbg(0,"country %s\n", 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(0,"Get result: %s\n", res->country->iso2); + + if (strlen(res->country->iso2)==2) + { + jstring j_iso2 = (*env)->NewStringUTF(env, res->country->iso2); + jstring j_name = (*env)->NewStringUTF(env, 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; +} diff --git a/navit/navit/android/src/org/navitproject/navit/Navit.java b/navit/navit/android/src/org/navitproject/navit/Navit.java index 8b30c3d..1763a7f 100644 --- a/navit/navit/android/src/org/navitproject/navit/Navit.java +++ b/navit/navit/android/src/org/navitproject/navit/Navit.java @@ -659,14 +659,14 @@ public class Navit extends Activity break; case 5 : // toggle the normal POI layers (to avoid double POIs) - Message msg = Message.obtain(N_NavitGraphics.callback_handler, NavitGraphics.msg_type.CBL_CALL_CMD.ordinal()); + Message msg = Message.obtain(N_NavitGraphics.callback_handler, NavitGraphics.msg_type.CLB_CALL_CMD.ordinal()); Bundle b = new Bundle(); b.putString("cmd", "toggle_layer(\"POI Symbols\");"); msg.setData(b); msg.sendToTarget(); // toggle full POI icons on/off - msg = Message.obtain(N_NavitGraphics.callback_handler, NavitGraphics.msg_type.CBL_CALL_CMD.ordinal()); + msg = Message.obtain(N_NavitGraphics.callback_handler, NavitGraphics.msg_type.CLB_CALL_CMD.ordinal()); b = new Bundle(); b.putString("cmd", "toggle_layer(\"Android-POI-Icons-full\");"); msg.setData(b); @@ -728,9 +728,11 @@ public class Navit extends Activity { String addr = data.getStringExtra("address_string"); Boolean partial_match = data.getStringExtra("partial_match").equals("1"); + String country = data.getStringExtra("country"); NavitDialogs.Navit_last_address_partial_match = partial_match; NavitDialogs.Navit_last_address_search_string = addr; + NavitDialogs.Navit_last_country = country; // clear results Navit.NavitAddressResultList_foundItems.clear(); diff --git a/navit/navit/android/src/org/navitproject/navit/NavitAddressSearchActivity.java b/navit/navit/android/src/org/navitproject/navit/NavitAddressSearchActivity.java index 6de3d08..133ac33 100644 --- a/navit/navit/android/src/org/navitproject/navit/NavitAddressSearchActivity.java +++ b/navit/navit/android/src/org/navitproject/navit/NavitAddressSearchActivity.java @@ -20,30 +20,61 @@ package org.navitproject.navit; +import java.lang.reflect.Field; +import java.util.Locale; + +import android.R.color; import android.app.Activity; +import android.app.AlertDialog; +import android.content.DialogInterface; import android.content.Intent; +import android.content.SharedPreferences; import android.os.Bundle; +import android.os.Message; +import android.util.Log; import android.util.TypedValue; import android.view.Gravity; import android.view.View; import android.view.WindowManager; import android.view.View.OnClickListener; +import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; +import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.RelativeLayout; +import android.widget.Spinner; import android.widget.TextView; import android.widget.RelativeLayout.LayoutParams; public class NavitAddressSearchActivity extends Activity { - private EditText address_string; - private CheckBox pm_checkbox; + private EditText address_string; + private CheckBox pm_checkbox; + private String mCountry; + private ImageButton mCountryButton; public RelativeLayout NavitAddressSearchActivity_layout; + private int getDrawableID(String resourceName) + { + int drawableId = 0; + try { + Class res = R.drawable.class; + Field field = res.getField(resourceName); + drawableId = field.getInt(null); + } + catch (Exception e) { + Log.e("NavitAddressSearch", "Failure to get drawable id.", e); + } + + + return drawableId; + } + + @Override protected void onCreate(Bundle savedInstanceState) { @@ -56,6 +87,31 @@ public class NavitAddressSearchActivity extends Activity panel.setOrientation(LinearLayout.VERTICAL); // address: label and text field + SharedPreferences settings = getSharedPreferences(Navit.NAVIT_PREFS, MODE_PRIVATE); + mCountry = settings.getString("DefaultCountry", null); + + if (mCountry == null) + { + Locale defaultLocale = Locale.getDefault(); + mCountry = defaultLocale.getCountry().toLowerCase(defaultLocale); + SharedPreferences.Editor edit_settings = settings.edit(); + edit_settings.putString("DefaultCountry", mCountry); + edit_settings.commit(); + } + + mCountryButton = new ImageButton(this); + + mCountryButton.setImageResource(getDrawableID("country_" + mCountry + "_32_32")); + + mCountryButton.setOnClickListener(new OnClickListener() + { + public void onClick(View v) + { + requestCountryDialog(); + } + }); + + // address: label and text field TextView addr_view = new TextView(this); addr_view.setText(Navit.get_text("Enter Destination")); //TRANS addr_view.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20f); @@ -67,10 +123,11 @@ public class NavitAddressSearchActivity extends Activity pm_checkbox = new CheckBox(this); pm_checkbox.setText(Navit.get_text("partial match")); //TRANS pm_checkbox.setChecked(false); - pm_checkbox.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, - LayoutParams.WRAP_CONTENT)); +// pm_checkbox.setLayoutParams(new LayoutParams(LayoutParams, +// LayoutParams.WRAP_CONTENT)); pm_checkbox.setGravity(Gravity.CENTER); + // search button final Button btnSearch = new Button(this); @@ -86,67 +143,80 @@ public class NavitAddressSearchActivity extends Activity } }); - - // title - try - { - String s = getIntent().getExtras().getString("title"); - if (s.length() > 0) - { - this.setTitle(s); - } - } - catch (Exception e) - { - } + Bundle extras = getIntent().getExtras(); - // partial match - try + if ( extras != null ) { - String s = getIntent().getExtras().getString("partial_match"); - if (s.length() > 0) - { - if (s.equals("1")) - { - pm_checkbox.setChecked(true); - } - else - { - pm_checkbox.setChecked(false); - } - } - } - catch (Exception e) - { - } + String title = extras.getString("title"); + String partial = extras.getString("partial_match"); + String address = extras.getString("address_string"); + + if ( title != null && title.length() > 0) + this.setTitle(title); + + if (partial != null && partial.length() > 0) + pm_checkbox.setChecked(partial.equals("1")); - // address string - try - { address_string = new EditText(this); - address_string.setText(getIntent().getExtras().getString("address_string")); - } - catch (Exception e) - { + if (address != null) + address_string.setText(address); + } + LinearLayout searchSettingsLayout = new LinearLayout(this); + searchSettingsLayout.setOrientation(LinearLayout.HORIZONTAL); - // actually adding the views (that have layout set on them) to the panel + searchSettingsLayout.addView(mCountryButton); + searchSettingsLayout.addView(pm_checkbox); panel.addView(addr_view); panel.addView(address_string); - panel.addView(pm_checkbox); + panel.addView(searchSettingsLayout); panel.addView(btnSearch); setContentView(panel); } + private void requestCountryDialog() + { + //Message msg = Message.obtain(Navit.N_NavitGraphics.callback_handler, NavitGraphics.msg_type.CLB_COUNTRY_CHOOSER.ordinal()); + //msg.sendToTarget(); + final String [][]all_countries = NavitGraphics.GetAllCountries(); + + AlertDialog.Builder mapModeChooser = new AlertDialog.Builder(this); + // ToDo also show icons and country code + String []country_name = new String[all_countries.length]; + + for (int country_index = 0; country_index < all_countries.length; country_index++) + { + country_name[country_index] = all_countries[country_index][1]; + } + + mapModeChooser.setItems(country_name, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int item) { + SharedPreferences settings = getSharedPreferences(Navit.NAVIT_PREFS, MODE_PRIVATE); + mCountry = all_countries[item][0]; + SharedPreferences.Editor edit_settings = settings.edit(); + edit_settings.putString("DefaultCountry", mCountry); + edit_settings.commit(); + + mCountryButton.setImageResource(getDrawableID("country_" + mCountry + "_32_32")); + } + + }); + + + mapModeChooser.show(); + + + } + private void executeDone() { Intent resultIntent = new Intent(); - resultIntent.putExtra("address_string", NavitAddressSearchActivity.this.address_string - .getText().toString()); - if (NavitAddressSearchActivity.this.pm_checkbox.isChecked()) + resultIntent.putExtra("address_string", address_string.getText().toString()); + resultIntent.putExtra("country", mCountry); + if (pm_checkbox.isChecked()) { resultIntent.putExtra("partial_match", "1"); } diff --git a/navit/navit/android/src/org/navitproject/navit/NavitDialogs.java b/navit/navit/android/src/org/navitproject/navit/NavitDialogs.java index cdf4f95..20a8b4c 100644 --- a/navit/navit/android/src/org/navitproject/navit/NavitDialogs.java +++ b/navit/navit/android/src/org/navitproject/navit/NavitDialogs.java @@ -6,6 +6,7 @@ import android.app.Dialog; import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.Intent; +import android.content.SharedPreferences; import android.os.Bundle; import android.os.Handler; import android.os.Message; @@ -17,6 +18,7 @@ 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; @@ -227,7 +229,7 @@ public class NavitDialogs extends Handler{ { Message msg = mHandler.obtainMessage(); Bundle b = new Bundle(); - msg.what = 10; + msg.what = MSG_PROGRESS_BAR_SEARCH; b.putInt("dialog_num", this.dialog_num); b.putInt("max", Navit.ADDRESS_RESULTS_DIALOG_MAX); b.putInt("cur", this.spinner_current_value % (Navit.ADDRESS_RESULTS_DIALOG_MAX + 1)); @@ -270,7 +272,7 @@ public class NavitDialogs extends Handler{ // initialize the dialog with sane values Message msg = mHandler.obtainMessage(); Bundle b = new Bundle(); - msg.what = 10; + msg.what = MSG_PROGRESS_BAR_SEARCH; b.putInt("dialog_num", this.my_dialog_num); b.putInt("max", Navit.ADDRESS_RESULTS_DIALOG_MAX); b.putInt("cur", 0); @@ -288,9 +290,8 @@ public class NavitDialogs extends Handler{ // 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_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) diff --git a/navit/navit/android/src/org/navitproject/navit/NavitGraphics.java b/navit/navit/android/src/org/navitproject/navit/NavitGraphics.java index 4a83e34..ff89cc6 100644 --- a/navit/navit/android/src/org/navitproject/navit/NavitGraphics.java +++ b/navit/navit/android/src/org/navitproject/navit/NavitGraphics.java @@ -112,7 +112,7 @@ public class NavitGraphics menu.setHeaderTitle("Position..."); menu.add(1, 1, NONE, Navit.get_text("drive here")).setOnMenuItemClickListener(this); - menu.add(1, 2, NONE, Navit.get_text("Add to contacts")).setOnMenuItemClickListener(this); +// menu.add(1, 2, NONE, Navit.get_text("Add to contacts")).setOnMenuItemClickListener(this); } @Override @@ -717,7 +717,8 @@ public class NavitGraphics } static public enum msg_type { - CLB_ZOOM_IN, CLB_ZOOM_OUT, CLB_REDRAW, CLB_MOVE, CLB_BUTTON_UP, CLB_BUTTON_DOWN, CLB_SET_DESTINATION, CLB_SET_DISPLAY_DESTINATION, CBL_CALL_CMD + CLB_ZOOM_IN, CLB_ZOOM_OUT, CLB_REDRAW, CLB_MOVE, CLB_BUTTON_UP, CLB_BUTTON_DOWN, CLB_SET_DESTINATION + , CLB_SET_DISPLAY_DESTINATION, CLB_CALL_CMD, CLB_COUNTRY_CHOOSER }; static public msg_type[] msg_values = msg_type.values(); @@ -748,7 +749,7 @@ public class NavitGraphics int y = msg.arg2; CallbackMessageChannel(4, "" + x + "#" + y); break; - case CBL_CALL_CMD: + case CLB_CALL_CMD: String cmd = msg.getData().getString("cmd"); CallbackMessageChannel(5, cmd); break; @@ -758,6 +759,9 @@ public class NavitGraphics case CLB_BUTTON_DOWN: ButtonCallback(ButtonCallbackID, 1, 1, msg.getData().getInt("x"), msg.getData().getInt("y")); // down break; + case CLB_COUNTRY_CHOOSER: + + break; } } }; @@ -767,6 +771,8 @@ public class NavitGraphics public native int CallbackMessageChannel(int i, String s); public native void ButtonCallback(int id, int pressed, int button, int x, int y); public native void MotionCallback(int id, int x, int y); + public native String GetDefaultCountry(int id, String s); + public static native String[][] GetAllCountries(); private Canvas draw_canvas; private Bitmap draw_bitmap; private int SizeChangedCallbackID, ButtonCallbackID, MotionCallbackID, KeypressCallbackID; @@ -953,7 +959,7 @@ public class NavitGraphics , Navit.NavitAddressResultList_foundItems.size() % (Navit.ADDRESS_RESULTS_DIALOG_MAX + 1)); } - public native void CallbackSearchResultList(int partial_match, String s); + public native void CallbackSearchResultList(int partial_match, String country, String s); /** diff --git a/navit/navit/country.c b/navit/navit/country.c index c7d24c2..8a99904 100644 --- a/navit/navit/country.c +++ b/navit/navit/country.c @@ -299,18 +299,18 @@ struct country_search { static int country_attr_get(void *priv_data, enum attr_type attr_type, struct attr *attr) { - struct country_search *this_=priv_data; + struct country_search *this_=priv_data; struct country *country=this_->country; - attr->type=attr_type; - switch (attr_type) { - case attr_any: - while (this_->attr_next != attr_none) { - if (country_attr_get(this_, this_->attr_next, attr)) - return 1; - } - return 0; - case attr_label: + attr->type=attr_type; + switch (attr_type) { + case attr_any: + while (this_->attr_next != attr_none) { + if (country_attr_get(this_, this_->attr_next, attr)) + return 1; + } + return 0; + case attr_label: attr->u.str=gettext(country->name); this_->attr_next=attr_country_id; return 1; @@ -318,25 +318,25 @@ country_attr_get(void *priv_data, enum attr_type attr_type, struct attr *attr) attr->u.num=country->id; this_->attr_next=country->car ? attr_country_car : attr_country_iso2; return 1; - case attr_country_car: + case attr_country_car: attr->u.str=country->car; this_->attr_next=attr_country_iso2; return attr->u.str ? 1 : 0; - case attr_country_iso2: + case attr_country_iso2: attr->u.str=country->iso2; this_->attr_next=attr_country_iso3; return 1; - case attr_country_iso3: + case attr_country_iso3: attr->u.str=country->iso3; this_->attr_next=attr_country_name; return 1; - case attr_country_name: + case attr_country_name: attr->u.str=gettext(country->name); this_->attr_next=attr_none; return 1; - default: - return 0; - } + default: + return 0; + } } @@ -361,7 +361,7 @@ country_search_new(struct attr *search, int partial) ret->count=0; ret->item.type=type_country_label; - ret->item.id_hi=0; + ret->item.id_hi=0; ret->item.map=NULL; ret->item.meth=&country_meth; ret->item.priv_data=ret; @@ -382,7 +382,7 @@ match(struct country_search *this_, enum attr_type type, const char *name) else ret=(g_strcasecmp(this_->search.u.str, name) == 0); return ret; - + } diff --git a/navit/navit/search.c b/navit/navit/search.c index eb2e292..fd32d08 100644 --- a/navit/navit/search.c +++ b/navit/navit/search.c @@ -89,7 +89,7 @@ search_list_new(struct mapset *ms) ret=g_new0(struct search_list, 1); ret->ms=ms; - + return ret; } @@ -212,9 +212,9 @@ search_list_common_new(struct item *item, struct search_list_common *common) common->postal=map_convert_string(item->map, attr.u.str); else common->postal=NULL; - if (item_attr_get(item, attr_postal_mask, &attr)) + if (item_attr_get(item, attr_postal_mask, &attr)) common->postal_mask=map_convert_string(item->map, attr.u.str); - else + else common->postal_mask=NULL; } @@ -241,9 +241,9 @@ search_list_country_new(struct item *item) #if HAVE_API_ANDROID ret->iso2=g_malloc(strlen(attr.u.str)+1); strtolower(ret->iso2, attr.u.str); -#else +#else ret->iso2=g_strdup(attr.u.str); -#endif +#endif ret->flag=g_strdup_printf("country_%s", ret->iso2); } if (item_attr_get(item, attr_country_iso3, &attr)) @@ -270,7 +270,7 @@ search_list_town_new(struct item *item) struct search_list_town *ret=g_new0(struct search_list_town, 1); struct attr attr; struct coord c; - + ret->itemt=*item; ret->common.item=ret->common.unique=*item; if (item_attr_get(item, attr_town_streets_item, &attr)) { @@ -308,7 +308,7 @@ search_list_street_new(struct item *item) struct search_list_street *ret=g_new0(struct search_list_street, 1); struct attr attr; struct coord c; - + ret->common.item=ret->common.unique=*item; if (item_attr_get(item, attr_street_name, &attr)) ret->name=map_convert_string(item->map, attr.u.str); @@ -343,7 +343,7 @@ search_interpolate(struct interpolation *inter) dbg(1,"interpolate %s-%s %s\n",inter->first,inter->last,inter->curr); if (!inter->first || !inter->last) return NULL; - if (!inter->curr) + if (!inter->curr) inter->curr=g_strdup(inter->first); else { if (strcmp(inter->curr, inter->last)) { @@ -457,7 +457,7 @@ search_house_number_coordinate(struct item *item, struct interpolation *inter) hn_length=2; hn_pos=1; } - if (count == max) + if (count == max) dbg(0,"coordinate overflow\n"); for (i = 0 ; i < count-1 ; i++) { distances[i]=navit_sqrt(transform_distance_sq(&c[i],&c[i+1])); @@ -486,7 +486,7 @@ search_list_house_number_new(struct item *item, struct interpolation *inter, cha struct search_list_house_number *ret=g_new0(struct search_list_house_number, 1); struct attr attr; char *hn; - + ret->common.item=ret->common.unique=*item; //if (item_attr_get(item, attr_street_name, &attr)) // dbg(0,"xx1 %s\n",attr.u.str); @@ -608,14 +608,14 @@ search_postal_merge(char *mask, char *new) if (mask[i] != '.' && mask[i] != new[i]) break; i++; - + } if (mask[i]) { ret=g_strdup(mask); - while (mask[i]) + while (mask[i]) ret[i++]='.'; } - dbg(1,"merged %s with %s as %s\n", mask, new, ret); + dbg(1,"merged %s with %s as %s\n", mask, new, ret); return ret; } @@ -686,7 +686,7 @@ search_list_get_result(struct search_list *this_) if (! le->search) { //dbg(0,"partial=%d level=%d\n", le->partial, level); - if (! level) + if (! level) le->parent=NULL; else { @@ -784,7 +784,7 @@ search_list_get_result(struct search_list *this_) dbg(0,"streetname: %s\n",attr2.u.str); has_street_name=1; } - + p=search_list_house_number_new(this_->item, &this_->inter, le->attr->u.str, le->partial); if (!p) { @@ -800,7 +800,7 @@ search_list_get_result(struct search_list *this_) } else { dbg(0,"interpolation!\n"); } - + if(le->parent && has_street_name) { struct search_list_street *street=this_->levels[level-1].last->data; char *s1,*s2; @@ -1155,29 +1155,14 @@ search_address_town(GList *result_list, struct search_list *sl, GList *phrases, } GList * -search_by_address(struct mapset *ms, const char *addr, int partial, struct jni_object *jni) +search_by_address(struct search_list *sl, const char *addr, int partial, struct jni_object *jni) { char *str=search_fix_spaces(addr); GList *tmp,*phrases=search_split_phrases(str); GList *ret = NULL; - struct search_list *sl; - struct attr attr; - struct attr *country = country_default(); dbg(0,"enter %s\n",addr); - attr.type=attr_country_all; - tmp=phrases; - sl=search_list_new(ms); - while (tmp) - { - attr.u.str=tmp->data; - search_list_search(sl, &attr, partial); - ret=search_address_town(ret, sl, phrases, tmp, partial, jni); - tmp=g_list_next(tmp); - } - if (country) - search_list_search(sl, country, partial); ret=search_address_town(ret, sl, phrases, NULL, partial, jni); - + g_free(str); dbg(0,"leave %p\n",ret); return ret; diff --git a/navit/navit/search.h b/navit/navit/search.h index c61aca8..ea017ed 100644 --- a/navit/navit/search.h +++ b/navit/navit/search.h @@ -84,7 +84,7 @@ struct search_list_common *search_list_select(struct search_list *this_, enum at 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 mapset *ms, const char *addr, int partial, struct jni_object *jni); +GList * search_by_address(struct search_list *this_, const char *addr, int partial, struct jni_object *jni); /* end of prototypes */ #ifdef __cplusplus } -- 2.7.4