android:versionName="@ANDROID_VERSION_NAME@"
android:installLocation="auto">
<application android:label="@string/app_name"
- android:icon="@drawable/icon">
+ android:icon="@drawable/icon"
+ android:name=".NavitAppConfig">
<activity android:name="Navit"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar"
android:versionName="@ANDROID_VERSION_NAME@"
android:installLocation="auto">
<application android:label="@string/app_name"
- android:icon="@drawable/icon">
+ android:icon="@drawable/icon"
+ android:name=".NavitAppConfig">
<activity android:name="Navit"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar"
\r
public class Navit extends Activity\r
{\r
- public static final class Navit_Address_Result_Struct\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
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 List<Navit_Address_Result_Struct> NavitAddressResultList_foundItems \r
- = new ArrayList<Navit_Address_Result_Struct>();\r
+\r
+ public static List<NavitAddress> NavitAddressResultList_foundItems \r
+ = new ArrayList<NavitAddress>();\r
\r
public static final int MAP_NUM_SECONDARY = 12;\r
static final String MAP_FILENAME_PATH = "/sdcard/navit/";\r
Intent search_intent = new Intent(this, NavitAddressSearchActivity.class);\r
search_intent.putExtra("title", Navit.get_text("Enter: City and Street")); //TRANS\r
search_intent.putExtra("address_string", NavitDialogs.Navit_last_address_search_string);\r
- String pm_temp = "0";\r
- if ( NavitDialogs.Navit_last_address_partial_match)\r
- {\r
- pm_temp = "1";\r
- }\r
- search_intent.putExtra("partial_match", pm_temp);\r
+ search_intent.putExtra("partial_match", NavitDialogs.Navit_last_address_partial_match);\r
this.startActivityForResult(search_intent, NavitAddressSearch_id);\r
break;\r
case 88 :\r
// exit\r
this.onStop();\r
this.exit();\r
- //msg = new Message();\r
- //b = new Bundle();\r
- //b.putInt("Callback", 5);\r
- //b.putString("cmd", "quit();");\r
- //msg.setData(b);\r
- //N_NavitGraphics.callback_handler.sendMessage(msg);\r
break;\r
}\r
return true;\r
}\r
\r
+ void setDestination(float latitude, float longitude, String address) {\r
+ Toast.makeText( getApplicationContext(),\r
+ Navit.get_text("setting destination to") + "\n" + address, Toast.LENGTH_LONG).show(); //TRANS\r
+\r
+ Message msg = Message.obtain(N_NavitGraphics.callback_handler, NavitGraphics.msg_type.CLB_SET_DESTINATION.ordinal());\r
+ Bundle b = new Bundle();\r
+ b.putFloat("lat", latitude);\r
+ b.putFloat("lon", longitude);\r
+ b.putString("q", address);\r
+ msg.setData(b);\r
+ msg.sendToTarget();\r
+ }\r
\r
protected void onActivityResult(int requestCode, int resultCode, Intent data)\r
{\r
}\r
break;\r
case NavitAddressSearch_id :\r
- try\r
- {\r
- if (resultCode == Activity.RESULT_OK)\r
- {\r
- try\r
- {\r
- String addr = data.getStringExtra("address_string");\r
- Boolean partial_match = data.getStringExtra("partial_match").equals("1");\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
- {\r
- // empty search string entered\r
- Toast.makeText(getApplicationContext(),\r
- Navit.get_text("No search string entered"), Toast.LENGTH_LONG).show(); //TRANS\r
- }\r
- else\r
- {\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
- catch (NumberFormatException e)\r
- {\r
- Log.d("Navit", "NumberFormatException selected_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(),\r
+ Navit.get_text("No search string 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
- else\r
- {\r
- // user pressed back key\r
- }\r
- }\r
- catch (Exception e)\r
- {\r
- Log.d("Navit", "error on onActivityResult");\r
}\r
break;\r
case Navit.NavitAddressResultList_id :\r
{\r
if (resultCode == Activity.RESULT_OK)\r
{\r
- Log.d("Navit", "adress result list id="\r
- + Integer.parseInt(data.getStringExtra("selected_id")));\r
- // get the coords for the destination\r
- int destination_id = Integer.parseInt(data.getStringExtra("selected_id"));\r
-\r
- // ok now set target\r
- Toast.makeText( getApplicationContext(),\r
- Navit.get_text("setting destination to") + "\n" \r
- + Navit.NavitAddressResultList_foundItems.get(destination_id).addr,\r
- Toast.LENGTH_LONG).show(); //TRANS\r
-\r
- Message msg = Message.obtain(N_NavitGraphics.callback_handler, NavitGraphics.msg_type.CLB_SET_DESTINATION.ordinal());\r
- Bundle b = new Bundle();\r
- b.putString("lat", String.valueOf(Navit.NavitAddressResultList_foundItems\r
- .get(destination_id).lat));\r
- b.putString("lon", String.valueOf(Navit.NavitAddressResultList_foundItems\r
- .get(destination_id).lon));\r
- b.putString("q",\r
- Navit.NavitAddressResultList_foundItems.get(destination_id).addr);\r
- msg.setData(b);\r
- msg.sendToTarget();\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
Intent search_intent = new Intent(this, NavitAddressSearchActivity.class);\r
search_intent.putExtra("title", Navit.get_text("Enter: City and Street")); //TRANS\r
search_intent.putExtra("address_string", search);\r
- String pm_temp = "0";\r
- if (NavitDialogs.Navit_last_address_partial_match)\r
- {\r
- pm_temp = "1";\r
- }\r
- search_intent.putExtra("partial_match", pm_temp);\r
+ search_intent.putExtra("partial_match", NavitDialogs.Navit_last_address_partial_match);\r
this.startActivityForResult(search_intent, NavitAddressSearch_id);\r
}\r
}\r
\r
public class NavitAddressResultListActivity extends ListActivity\r
{\r
-\r
- private int selected_id = -1;\r
- private Boolean is_empty = true;\r
- public String[] result_list = new String[]{"loading results ..."};\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
super.onCreate(savedInstanceState);\r
//Log.e("Navit", "all ok");\r
\r
- Navit.Navit_Address_Result_Struct tmp = new Navit.Navit_Address_Result_Struct();\r
+ Navit.NavitAddress tmp = new Navit.NavitAddress();\r
\r
- Log.e("Navit", "########### full result count: "\r
- + Navit.NavitAddressResultList_foundItems.size());\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.Navit_Address_Result_Struct> k = Navit.NavitAddressResultList_foundItems\r
+ for (Iterator<Navit.NavitAddress> k = Navit.NavitAddressResultList_foundItems\r
.iterator(); k.hasNext();)\r
{\r
tmp = k.next();\r
}\r
}\r
\r
- Log.e("Navit", "########### final result count: "\r
- + Navit.NavitAddressResultList_foundItems.size());\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.Navit_Address_Result_Struct> i = Navit.NavitAddressResultList_foundItems\r
+ for (Iterator<Navit.NavitAddress> i = Navit.NavitAddressResultList_foundItems\r
.iterator(); i.hasNext();)\r
{\r
tmp = i.next();\r
executeDone();\r
}\r
\r
- // @Override\r
- // public void onBackPressed()\r
- // {\r
- // executeDone();\r
- // super.onBackPressed();\r
- // }\r
-\r
private void executeDone()\r
{\r
Intent resultIntent = new Intent();\r
- resultIntent.putExtra("selected_id", String.valueOf(this.selected_id));\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
import java.lang.reflect.Field;\r
import java.util.Arrays;
import java.util.Comparator;
+import java.util.List;\r
import java.util.Locale;\r
\r
import android.app.Activity;\r
import android.view.View;\r
import android.view.View.OnClickListener;\r
import android.view.WindowManager;
+import android.widget.AdapterView;\r
+import android.widget.AdapterView.OnItemClickListener;\r
+import android.widget.ArrayAdapter;\r
import android.widget.Button;\r
import android.widget.CheckBox;\r
import android.widget.EditText;\r
import android.widget.ImageButton;\r
import android.widget.LinearLayout;\r
+import android.widget.ListView;\r
import android.widget.RelativeLayout;\r
import android.widget.RelativeLayout.LayoutParams;\r
import android.widget.TextView;
private CheckBox pm_checkbox;\r
private String mCountry;\r
private ImageButton mCountryButton;\r
-\r
+ \r
public RelativeLayout NavitAddressSearchActivity_layout;\r
\r
+ \r
private int getDrawableID(String resourceName)\r
{\r
int drawableId = 0;\r
pm_checkbox.setChecked(false);\r
pm_checkbox.setGravity(Gravity.CENTER);\r
\r
-\r
// search button\r
final Button btnSearch = new Button(this);\r
btnSearch.setText(Navit.get_text("Search")); //TRANS\r
}\r
});\r
\r
- Bundle extras = getIntent().getExtras();\r
+ ListView lastAddresses = new ListView(this);\r
+ NavitAppConfig navitConfig = (NavitAppConfig)getApplicationContext();\r
\r
+ final List<Navit.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
+ lastAddresses.setAdapter(addressList);\r
+ lastAddresses.setOnItemClickListener(new OnItemClickListener() {\r
+ @Override\r
+ public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {\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
+ 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
- String partial = extras.getString("partial_match");\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
\r
- if (partial != null && partial.length() > 0)\r
- pm_checkbox.setChecked(partial.equals("1"));\r
+ pm_checkbox.setChecked(partial);\r
\r
address_string = new EditText(this);\r
if (address != null)\r
panel.addView(address_string);\r
panel.addView(searchSettingsLayout);\r
panel.addView(btnSearch);\r
+ panel.addView(lastAddresses);\r
\r
setContentView(panel);\r
}\r
Intent resultIntent = new Intent();\r
resultIntent.putExtra("address_string", address_string.getText().toString());\r
resultIntent.putExtra("country", mCountry);\r
- if (pm_checkbox.isChecked())\r
- {\r
- resultIntent.putExtra("partial_match", "1");\r
- }\r
- else\r
- {\r
- resultIntent.putExtra("partial_match", "0");\r
- }\r
+ resultIntent.putExtra("partial_match", pm_checkbox.isChecked());\r
setResult(Activity.RESULT_OK, resultIntent);\r
finish();\r
}\r
--- /dev/null
+package org.navitproject.navit;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.navitproject.navit.Navit.NavitAddress;\r
+\r
+import android.app.Application;\r
+import android.content.SharedPreferences;\r
+\r
+public class NavitAppConfig extends Application {\r
+\r
+ private static final int MAX_LAST_ADDRESSES = 10;\r
+\r
+ private List<Navit.NavitAddress> mLastAddresses = null;\r
+ private int mLastAddressField;\r
+ private SharedPreferences mSettings;\r
+\r
+ @Override\r
+ public void onCreate() {\r
+ mSettings = getSharedPreferences(Navit.NAVIT_PREFS, MODE_PRIVATE);\r
+ super.onCreate();\r
+ }\r
+\r
+ public List<NavitAddress> getLastAddresses() {\r
+ if (mLastAddresses == null) {\r
+ mLastAddresses = new ArrayList<Navit.NavitAddress>();\r
+ int mLastAddressField = mSettings.getInt("LastAddress", -1);\r
+ if (mLastAddressField >= 0) {\r
+ int index = mLastAddressField;\r
+ do {\r
+ 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
+ }\r
+\r
+ if (--index < 0) index = MAX_LAST_ADDRESSES - 1;\r
+\r
+ } while (index != mLastAddressField);\r
+ }\r
+ }\r
+ return mLastAddresses;\r
+ }\r
+\r
+ public void addLastAddress(Navit.NavitAddress newAddress) {\r
+ getLastAddresses();\r
+\r
+ mLastAddresses.add(newAddress);\r
+ if (mLastAddresses.size() > MAX_LAST_ADDRESSES) mLastAddresses.remove(0);\r
+\r
+ mLastAddressField++;\r
+ if (mLastAddressField >= MAX_LAST_ADDRESSES) mLastAddressField = 0;\r
+\r
+ SharedPreferences.Editor editSettings = mSettings.edit();\r
+\r
+ editSettings.putInt("LastAddress", mLastAddressField);\r
+ editSettings.putString("LastAddress_" + String.valueOf(mLastAddressField), newAddress.addr);\r
+ editSettings.putFloat("LastAddress_Lat_" + String.valueOf(mLastAddressField), newAddress.lat);\r
+ editSettings.putFloat("LastAddress_Lon_" + String.valueOf(mLastAddressField), newAddress.lon);\r
+\r
+ editSettings.commit();\r
+ }\r
+}\r
import java.lang.reflect.Method;
import java.util.ArrayList;
-import org.navitproject.navit.Navit.Navit_Address_Result_Struct;
+import org.navitproject.navit.Navit.NavitAddress;
import android.app.Activity;
import android.content.Context;
MotionCallback(MotionCallbackID, msg.getData().getInt("x"), msg.getData().getInt("y"));
break;
case CLB_SET_DESTINATION:
- String lat = msg.getData().getString("lat");
- String lon = msg.getData().getString("lon");
+ String lat = Float.toString(msg.getData().getFloat("lat"));
+ String lon = Float.toString(msg.getData().getFloat("lon"));
String q = msg.getData().getString("q");
CallbackMessageChannel(3, lat + "#" + lon + "#" + q);
break;
// deactivate the spinner
NavitDialogs.NavitAddressSearchSpinnerActive = false;
- Navit.Navit_Address_Result_Struct tmp_addr = new Navit_Address_Result_Struct();
+ 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];
// 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);
+ 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);
+ 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
// 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);
+ 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);
+ 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
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 *phrases=search_split_phrases(str);
GList *ret = NULL;
dbg(0,"enter %s\n",addr);
ret=search_address_town(ret, sl, phrases, NULL, partial, jni);