summaryrefslogtreecommitdiff
path: root/navit/android/src/org
diff options
context:
space:
mode:
authorrikky <rikky@ffa7fe5e-494d-0410-b361-a75ebd5db220>2012-05-12 22:53:05 +0000
committerrikky <rikky@ffa7fe5e-494d-0410-b361-a75ebd5db220>2012-05-12 22:53:05 +0000
commitf86cf9fed245ebd428888783af0c0877e39029a5 (patch)
treec6fe5a8f5bc697b63a0ef8f093a1578c7c5f77e4 /navit/android/src/org
parent361c25f8cd482228adec560cff278ee89d0db231 (diff)
downloadnavit-f86cf9fed245ebd428888783af0c0877e39029a5.tar.gz
Fix:Android:Rewrite android search dialog handling. Fix for crashs/deadlocks and cleanup
git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit@5101 ffa7fe5e-494d-0410-b361-a75ebd5db220
Diffstat (limited to 'navit/android/src/org')
-rw-r--r--navit/android/src/org/navitproject/navit/Navit.java109
-rw-r--r--navit/android/src/org/navitproject/navit/NavitAddressResultListActivity.java137
-rw-r--r--navit/android/src/org/navitproject/navit/NavitAddressSearchActivity.java285
-rwxr-xr-xnavit/android/src/org/navitproject/navit/NavitAppConfig.java18
-rw-r--r--navit/android/src/org/navitproject/navit/NavitDialogs.java155
-rw-r--r--navit/android/src/org/navitproject/navit/NavitGraphics.java47
-rw-r--r--navit/android/src/org/navitproject/navit/NavitMapDownloader.java2
7 files changed, 226 insertions, 527 deletions
diff --git a/navit/android/src/org/navitproject/navit/Navit.java b/navit/android/src/org/navitproject/navit/Navit.java
index 06c61004d..7f5276ccf 100644
--- a/navit/android/src/org/navitproject/navit/Navit.java
+++ b/navit/android/src/org/navitproject/navit/Navit.java
@@ -22,9 +22,7 @@ package org.navitproject.navit;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
-import java.util.ArrayList;
import java.util.HashMap;
-import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.regex.Matcher;
@@ -65,14 +63,6 @@ import android.widget.Toast;
public class Navit extends Activity
{
- public static final class NavitAddress
- {
- String result_type; // TWN,STR,SHN
- String item_id; // H<ddddd>L<ddddd> -> item.id_hi item.id_lo
- float lat;
- float lon;
- String addr;
- }
public NavitDialogs dialogs;
private PowerManager.WakeLock wl;
@@ -86,18 +76,11 @@ public class Navit extends Activity
private static Intent startup_intent = null;
private static long startup_intent_timestamp = 0L;
public static String my_display_density = "mdpi";
- private boolean searchBoxShown = false;
- public static final int ADDRESS_RESULTS_DIALOG_MAX = 10;
public static final int NavitDownloaderSelectMap_id = 967;
- public static int search_results_towns = 0;
- public static int search_results_streets = 0;
- public static int search_results_streets_hn = 0;
public static final int MAP_NUM_PRIMARY = 11;
public static final int NavitAddressSearch_id = 70;
- public static final int NavitAddressResultList_id = 71;
public static String NavitLanguage;
-
- public static List<NavitAddress> NavitAddressResultList_foundItems = new ArrayList<NavitAddress>();
+ public static Resources NavitResources = null;
public static final int MAP_NUM_SECONDARY = 12;
static final String NAVIT_PACKAGE_NAME = "org.navitproject.navit";
@@ -115,9 +98,8 @@ public class Navit extends Activity
private boolean extractRes(String resname, String result) {
boolean needs_update = false;
- Resources res = getResources();
Log.e(TAG, "Res Name " + resname + ", result " + result);
- int id = res.getIdentifier(resname, "raw", NAVIT_PACKAGE_NAME);
+ int id = NavitResources.getIdentifier(resname, "raw", NAVIT_PACKAGE_NAME);
Log.e(TAG, "Res ID " + id);
if (id == 0)
return false;
@@ -147,7 +129,7 @@ public class Navit extends Activity
Log.e(TAG, "Extracting resource");
try {
- InputStream resourcestream = res.openRawResource(id);
+ InputStream resourcestream = NavitResources.openRawResource(id);
FileOutputStream resultfilestream = new FileOutputStream(resultfile);
byte[] buf = new byte[1024];
int i = 0;
@@ -217,6 +199,8 @@ public class Navit extends Activity
dialogs = new NavitDialogs(this);
+ NavitResources = getResources();
+
// only take arguments here, onResume gets called all the time (e.g. when screenblanks, etc.)
Navit.startup_intent = this.getIntent();
// hack! Remember time stamps, and only allow 4 secs. later in onResume to set target!
@@ -472,21 +456,16 @@ public class Navit extends Activity
public void start_targetsearch_from_intent(String target_address)
{
- NavitDialogs.Navit_last_address_partial_match = false;
- NavitDialogs.Navit_last_address_search_string = target_address;
-
- // clear results
- Navit.NavitAddressResultList_foundItems.clear();
-
- if (NavitDialogs.Navit_last_address_search_string.equals(""))
+ if (target_address == null || target_address.equals(""))
{
// empty search string entered
Toast.makeText(getApplicationContext(), getString(R.string.address_search_not_found), Toast.LENGTH_LONG).show(); //TRANS
}
else
{
- // show dialog
- dialogs.obtainMessage(NavitDialogs.MSG_SEARCH).sendToTarget();
+ Intent search_intent = new Intent(this, NavitAddressSearchActivity.class);
+ search_intent.putExtra("search_string", target_address);
+ this.startActivityForResult(search_intent, NavitAddressSearch_id);
}
}
@@ -532,9 +511,6 @@ public class Navit extends Activity
case 6 :
// ok startup address search activity
Intent search_intent = new Intent(this, NavitAddressSearchActivity.class);
- search_intent.putExtra("title", getString(R.string.address_search_title)); //TRANS
- search_intent.putExtra("address_string", NavitDialogs.Navit_last_address_search_string);
- search_intent.putExtra("partial_match", NavitDialogs.Navit_last_address_partial_match);
this.startActivityForResult(search_intent, NavitAddressSearch_id);
break;
case 99 :
@@ -572,55 +548,12 @@ public class Navit extends Activity
break;
case NavitAddressSearch_id :
if (resultCode == Activity.RESULT_OK) {
- Boolean addr_selected = data.getBooleanExtra("addr_selected", false);
-
- // address already choosen, or do we have to search?
- if (addr_selected) {
- setDestination( NavitAddressResultList_foundItems .get(0).lat
- , NavitAddressResultList_foundItems.get(0).lon
- , NavitAddressResultList_foundItems.get(0).addr);
- } else {
- String addr = data.getStringExtra("address_string");
- Boolean partial_match = data.getBooleanExtra("partial_match", false);
- 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();
- Navit.search_results_towns = 0;
- Navit.search_results_streets = 0;
- Navit.search_results_streets_hn = 0;
-
- if (addr.equals("")) {
- // empty search string entered
- Toast.makeText(getApplicationContext(),getString(R.string.address_search_no_text_entered), Toast.LENGTH_LONG).show(); //TRANS
- } else {
- // show dialog, and start search for the results
- // make it indirect, to give our activity a chance to startup
- // (remember we come straight from another activity and ours is still paused!)
- dialogs.obtainMessage(NavitDialogs.MSG_SEARCH).sendToTarget();
- }
- }
- }
- break;
- case Navit.NavitAddressResultList_id :
- try
- {
- if (resultCode == Activity.RESULT_OK)
- {
- int destination_id = data.getIntExtra("selected_id", 0);
-
- setDestination( NavitAddressResultList_foundItems .get(destination_id).lat
- , NavitAddressResultList_foundItems.get(destination_id).lon
- , NavitAddressResultList_foundItems.get(destination_id).addr);
- }
- }
- catch (Exception e)
- {
- Log.d("Navit", "error on onActivityResult");
+ Bundle destination = data.getExtras();
+ Toast.makeText( getApplicationContext(),getString(R.string.address_search_set_destination) + "\n" + destination.getString("q"), Toast.LENGTH_LONG).show(); //TRANS
+
+ Message msg = Message.obtain(N_NavitGraphics.callback_handler, NavitGraphics.msg_type.CLB_SET_DESTINATION.ordinal());
+ msg.setData(destination);
+ msg.sendToTarget();
}
break;
default :
@@ -672,16 +605,4 @@ public class Navit extends Activity
{
System.loadLibrary("navit");
}
-
- /*
- * Show a search activity with the string "search" filled in
- */
- private void executeSearch(String search)
- {
- Intent search_intent = new Intent(this, NavitAddressSearchActivity.class);
- search_intent.putExtra("title", getString(R.string.address_search_title)); //TRANS
- search_intent.putExtra("address_string", search);
- search_intent.putExtra("partial_match", NavitDialogs.Navit_last_address_partial_match);
- this.startActivityForResult(search_intent, NavitAddressSearch_id);
- }
}
diff --git a/navit/android/src/org/navitproject/navit/NavitAddressResultListActivity.java b/navit/android/src/org/navitproject/navit/NavitAddressResultListActivity.java
deleted file mode 100644
index 85671ed06..000000000
--- a/navit/android/src/org/navitproject/navit/NavitAddressResultListActivity.java
+++ /dev/null
@@ -1,137 +0,0 @@
-package org.navitproject.navit;
-
-/**
- * Navit, a modular navigation system.
- * Copyright (C) 2005-2008 Navit Team
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-import java.util.Iterator;
-
-import android.app.Activity;
-import android.app.ListActivity;
-import android.content.Intent;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.View;
-import android.widget.ArrayAdapter;
-import android.widget.ListView;
-
-public class NavitAddressResultListActivity extends ListActivity
-{
- private int selected_id = -1;
- private Boolean is_empty = true;
- public String[] result_list = new String[]{"loading results ..."};
-
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- //Log.e("Navit", "all ok");
-
- Navit.NavitAddress tmp = new Navit.NavitAddress();
-
- Log.e("Navit", "full result count: " + Navit.NavitAddressResultList_foundItems.size());
-
- // show "town names" as results only when we dont have any street names in resultlist
- if ((Navit.search_results_streets > 0) || (Navit.search_results_streets_hn > 0))
- {
- // clear out towns from result list
- for (Iterator<Navit.NavitAddress> k = Navit.NavitAddressResultList_foundItems
- .iterator(); k.hasNext();)
- {
- tmp = k.next();
- if (tmp.result_type.equals("TWN"))
- {
- k.remove();
- }
- }
- }
-
- Log.e("Navit", "final result count: " + Navit.NavitAddressResultList_foundItems.size());
-
- this.result_list = new String[Navit.NavitAddressResultList_foundItems.size()];
- int j = 0;
- for (Iterator<Navit.NavitAddress> i = Navit.NavitAddressResultList_foundItems
- .iterator(); i.hasNext();)
- {
- tmp = i.next();
- this.result_list[j] = tmp.addr;
- j++;
- }
-
- ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
- android.R.layout.simple_list_item_1, result_list);
- setListAdapter(adapter);
- is_empty = true;
- }
-
- public void add_item_(String item)
- {
- if (item == null)
- {
- // empty item?
- return;
- }
-
- if (this.is_empty)
- {
- // clear dummy text, and add this item
- this.result_list = new String[1];
- this.result_list[0] = item;
- }
- else
- {
- // add the item to the end of the list
- String[] tmp_list = this.result_list;
- this.result_list = new String[tmp_list.length + 1];
- for (int i = 0; i < tmp_list.length; i = i + 1)
- {
- this.result_list[i] = tmp_list[i];
- }
- this.result_list[tmp_list.length] = item;
- }
- ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
- android.R.layout.simple_list_item_1, result_list);
- setListAdapter(adapter);
- this.is_empty = false;
- }
-
- @Override
- protected void onListItemClick(ListView l, View v, int position, long id)
- {
- super.onListItemClick(l, v, position, id);
- this.selected_id = position;
- Log.e("Navit", "p:" + position);
- Log.e("Navit", "i:" + id);
-
- // close this activity
- executeDone();
- }
-
- private void executeDone()
- {
- Intent resultIntent = new Intent();
- resultIntent.putExtra("selected_id", selected_id);
- setResult(Activity.RESULT_OK, resultIntent);
-
- NavitAppConfig navitConfig = (NavitAppConfig)getApplicationContext();
- navitConfig.addLastAddress(Navit.NavitAddressResultList_foundItems.get(selected_id));
-
- finish();
- }
-
-}
diff --git a/navit/android/src/org/navitproject/navit/NavitAddressSearchActivity.java b/navit/android/src/org/navitproject/navit/NavitAddressSearchActivity.java
index c57b536ae..8866d5dca 100644
--- a/navit/android/src/org/navitproject/navit/NavitAddressSearchActivity.java
+++ b/navit/android/src/org/navitproject/navit/NavitAddressSearchActivity.java
@@ -19,15 +19,17 @@
package org.navitproject.navit;
-
import java.lang.reflect.Field;
-import java.util.Arrays;
-import java.util.Comparator;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
import java.util.List;
import java.util.Locale;
import android.app.Activity;
import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
@@ -37,7 +39,7 @@ import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
-import android.view.WindowManager;
+import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
@@ -48,41 +50,75 @@ import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;
+import android.widget.Toast;
import android.widget.RelativeLayout.LayoutParams;
-import android.widget.TextView;
-
+import android.widget.TextView;
+
+public class NavitAddressSearchActivity extends Activity {
+ public static final class NavitAddress {
+ public NavitAddress(int type, float latitude, float longitude, String address) {
+ result_type = type;
+ lat = latitude;
+ lon = longitude;
+ addr = address;
+ }
-public class NavitAddressSearchActivity extends Activity
-{
- private EditText address_string;
- private CheckBox pm_checkbox;
- private String mCountry;
- private ImageButton mCountryButton;
-
- public RelativeLayout NavitAddressSearchActivity_layout;
+ int result_type;
+ float lat;
+ float lon;
+ String addr;
+ }
+ private static final String TAG = "NavitAddress";
+ private static final int ADDRESS_RESULT_PROGRESS_MAX = 10;
- private int getDrawableID(String resourceName)
- {
+ private List<NavitAddress> Addresses_found = null;
+ private List<NavitAddress> addresses_shown = null;
+ private EditText address_string;
+ private CheckBox pm_checkbox;
+ private String mCountry;
+ private ImageButton mCountryButton;
+ ProgressDialog search_results_wait = null;
+ public RelativeLayout NavitAddressSearchActivity_layout;
+ private int search_results_towns = 0;
+ private int search_results_streets = 0;
+ private int search_results_streets_hn = 0;
+ private long search_handle = 0;
+
+ // TODO remember settings
+ private static String last_address_search_string = "";
+ private static Boolean last_address_partial_match = false;
+ private static String last_country = "";
+
+ 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) {
+ } catch (Exception e) {
Log.e("NavitAddressSearch", "Failure to get drawable id.", e);
}
return drawableId;
}
@Override
- protected void onCreate(Bundle savedInstanceState)
- {
+ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+
+ Bundle extras = getIntent().getExtras();
+ if ( extras != null )
+ {
+ String search_string = extras.getString("search_string");
+ if (search_string != null) {
+ pm_checkbox.setChecked(true);
+ address_string.setText(search_string);
+ executeSearch();
+ return;
+ }
+ }
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,
- WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
+ getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND, WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
LinearLayout panel = new LinearLayout(this);
panel.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
panel.setOrientation(LinearLayout.VERTICAL);
@@ -91,8 +127,7 @@ public class NavitAddressSearchActivity extends Activity
SharedPreferences settings = getSharedPreferences(Navit.NAVIT_PREFS, MODE_PRIVATE);
mCountry = settings.getString("DefaultCountry", null);
- if (mCountry == null)
- {
+ if (mCountry == null) {
Locale defaultLocale = Locale.getDefault();
mCountry = defaultLocale.getCountry().toLowerCase(defaultLocale);
SharedPreferences.Editor edit_settings = settings.edit();
@@ -104,85 +139,74 @@ public class NavitAddressSearchActivity extends Activity
mCountryButton.setImageResource(getDrawableID("country_" + mCountry + "_32_32"));
- mCountryButton.setOnClickListener(new OnClickListener()
- {
- public void onClick(View v)
- {
+ 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.setText(Navit.get_text("Enter Destination")); // TRANS
addr_view.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20f);
- addr_view.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
- LayoutParams.WRAP_CONTENT));
+ addr_view.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
addr_view.setPadding(4, 4, 4, 4);
// partial match checkbox
pm_checkbox = new CheckBox(this);
- pm_checkbox.setText(Navit.get_text("partial match")); //TRANS
- pm_checkbox.setChecked(false);
+ pm_checkbox.setText(Navit.get_text("partial match")); // TRANS
+ pm_checkbox.setChecked(last_address_partial_match);
pm_checkbox.setGravity(Gravity.CENTER);
// search button
final Button btnSearch = new Button(this);
- btnSearch.setText(Navit.get_text("Search")); //TRANS
- btnSearch.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
- LayoutParams.WRAP_CONTENT));
+ btnSearch.setText(Navit.get_text("Search")); // TRANS
+ btnSearch.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
btnSearch.setGravity(Gravity.CENTER);
- btnSearch.setOnClickListener(new OnClickListener()
- {
- public void onClick(View v)
- {
- executeDone();
+ btnSearch.setOnClickListener(new OnClickListener() {
+ public void onClick(View v) {
+ last_address_partial_match = pm_checkbox.isChecked();
+ last_address_search_string = address_string.getText().toString();
+ executeSearch();
}
});
ListView lastAddresses = new ListView(this);
- NavitAppConfig navitConfig = (NavitAppConfig)getApplicationContext();
+ NavitAppConfig navitConfig = (NavitAppConfig) getApplicationContext();
- final List<Navit.NavitAddress> addresses = navitConfig.getLastAddresses();
+ final List<NavitAddress> addresses = navitConfig.getLastAddresses();
int addressCount = addresses.size();
if (addressCount > 0) {
String[] strAddresses = new String[addressCount];
for (int addrIndex = 0; addrIndex < addressCount; addrIndex++) {
strAddresses[addrIndex] = addresses.get(addrIndex).addr;
}
- ArrayAdapter<String> addressList = new ArrayAdapter<String>(this,
- android.R.layout.simple_list_item_1, strAddresses);
+ ArrayAdapter<String> addressList =
+ new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, strAddresses);
lastAddresses.setAdapter(addressList);
lastAddresses.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
+ NavitAddress addressSelected = addresses.get(arg2);
Intent resultIntent = new Intent();
- resultIntent.putExtra("addr_selected", true);
-
- Navit.NavitAddressResultList_foundItems.clear();
- Navit.NavitAddressResultList_foundItems.add(addresses.get(arg2));
+ resultIntent.putExtra("lat", addressSelected.lat);
+ resultIntent.putExtra("lon", addressSelected.lon);
+ resultIntent.putExtra("q", addressSelected.addr);
+
setResult(Activity.RESULT_OK, resultIntent);
finish();
}
});
}
-
- Bundle extras = getIntent().getExtras();
- if ( extras != null )
- {
- String title = extras.getString("title");
- Boolean partial = extras.getBoolean("partial_match");
- String address = extras.getString("address_string");
- if ( title != null && title.length() > 0)
- this.setTitle(title);
+ String title = getString(R.string.address_search_title);
- pm_checkbox.setChecked(partial);
+ if (title != null && title.length() > 0)
+ this.setTitle(title);
- address_string = new EditText(this);
- if (address != null)
- address_string.setText(address);
- }
+ address_string = new EditText(this);
+ address_string.setText(last_address_search_string);
+ address_string.setSelectAllOnFocus(true);
LinearLayout searchSettingsLayout = new LinearLayout(this);
searchSettingsLayout.setOrientation(LinearLayout.HORIZONTAL);
@@ -198,23 +222,22 @@ public class NavitAddressSearchActivity extends Activity
setContentView(panel);
}
- private void requestCountryDialog()
- {
- final String [][]all_countries = NavitGraphics.GetAllCountries();
-
- 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() {
+ final String[][] all_countries = NavitGraphics.GetAllCountries();
+
+ 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);
AlertDialog.Builder mapModeChooser = new AlertDialog.Builder(this);
// ToDo also show icons and country code
- String []country_name = new String[all_countries.length];
+ String[] country_name = new String[all_countries.length];
- for (int country_index = 0; country_index < all_countries.length; country_index++)
- {
+ for (int country_index = 0; country_index < all_countries.length; country_index++) {
country_name[country_index] = all_countries[country_index][1];
}
@@ -227,19 +250,111 @@ public class NavitAddressSearchActivity extends Activity
edit_settings.commit();
mCountryButton.setImageResource(getDrawableID("country_" + mCountry + "_32_32"));
- }
+ }
});
mapModeChooser.show();
}
- private void executeDone()
- {
- Intent resultIntent = new Intent();
- resultIntent.putExtra("address_string", address_string.getText().toString());
- resultIntent.putExtra("country", mCountry);
- resultIntent.putExtra("partial_match", pm_checkbox.isChecked());
- setResult(Activity.RESULT_OK, resultIntent);
- finish();
+ /**
+ * start a search on the map
+ */
+ public void receiveAddress(int type, float latitude, float longitude, String address) {
+ Log.e(TAG, "(" + String.valueOf(latitude) + ", " + String.valueOf(longitude) + ") " + address);
+
+ switch (type) {
+ case 0:
+ search_results_towns++;
+ break;
+ case 1:
+ search_results_streets++;
+ break;
+ case 2:
+ search_results_streets_hn++;
+ break;
+
+ }
+ search_results_wait.setMessage(Navit.get_text("towns") + ":" + search_results_towns + " "
+ + Navit.get_text("Streets") + ":" + search_results_streets + "/"
+ + search_results_streets_hn);
+
+ search_results_wait.setProgress(Addresses_found.size() % (ADDRESS_RESULT_PROGRESS_MAX + 1));
+
+ Addresses_found.add(new NavitAddress(type, latitude, longitude, address));
+ }
+
+ public void finishAddressSearch() {
+ if (Addresses_found.isEmpty()) {
+ Toast.makeText( getApplicationContext(),getString(R.string.address_search_not_found) + "\n" + address_string.getText().toString(), Toast.LENGTH_LONG).show(); //TRANS
+ setResult(Activity.RESULT_CANCELED);
+ finish();
+ }
+ ListView addressesFound = new ListView(this);
+ ArrayAdapter<String> addressList =
+ new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
+
+ addresses_shown = new ArrayList<NavitAddress>();
+
+ for (NavitAddress currentAddress : Addresses_found) {
+ if (currentAddress.result_type != 0 || search_results_streets == 0) {
+ addressList.add(currentAddress.addr);
+ addresses_shown.add(currentAddress);
+ }
+ }
+
+ addressesFound.setAdapter(addressList);
+
+ addressesFound.setOnItemClickListener(new OnItemClickListener() {
+ public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
+ NavitAddress addressSelected = addresses_shown.get(arg2);
+ Intent resultIntent = new Intent();
+
+ resultIntent.putExtra("lat", addressSelected.lat);
+ resultIntent.putExtra("lon", addressSelected.lon);
+ resultIntent.putExtra("q", addressSelected.addr);
+
+ setResult(Activity.RESULT_OK, resultIntent);
+ finish();
+ }
+ });
+
+ setContentView(addressesFound);
+ search_results_wait.dismiss();
+ }
+
+ public native long CallbackStartAddressSearch(int partial_match, String country, String s);
+ public native void CallbackCancelAddressSearch(long handle);
+
+ @Override
+ protected Dialog onCreateDialog(int id) {
+ search_results_wait = new ProgressDialog(this);
+ search_results_wait.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
+ search_results_wait.setTitle("loading search results");
+ search_results_wait.setMessage("--");
+ search_results_wait.setCancelable(true);
+ search_results_wait.setProgress(0);
+ search_results_wait.setMax(10);
+
+ Addresses_found = new ArrayList<NavitAddress>();
+ search_results_towns = 0;
+ search_results_streets = 0;
+ search_results_streets_hn = 0;
+
+ search_handle = CallbackStartAddressSearch(pm_checkbox.isChecked() ? 1 : 0, mCountry, address_string.getText().toString());
+
+ search_results_wait.setOnCancelListener(new DialogInterface.OnCancelListener() {
+ @Override
+ public void onCancel(DialogInterface dialog) {
+ CallbackCancelAddressSearch(search_handle);
+ search_handle = 0;
+ search_results_wait.dismiss();
+ }
+ });
+ return search_results_wait;
+ }
+
+ void executeSearch() {
+ showDialog(0);
}
}
+
diff --git a/navit/android/src/org/navitproject/navit/NavitAppConfig.java b/navit/android/src/org/navitproject/navit/NavitAppConfig.java
index 2b5090d73..a1391335c 100755
--- a/navit/android/src/org/navitproject/navit/NavitAppConfig.java
+++ b/navit/android/src/org/navitproject/navit/NavitAppConfig.java
@@ -3,7 +3,7 @@ package org.navitproject.navit;
import java.util.ArrayList;
import java.util.List;
-import org.navitproject.navit.Navit.NavitAddress;
+import org.navitproject.navit.NavitAddressSearchActivity.NavitAddress;
import android.app.Application;
import android.content.SharedPreferences;
@@ -12,7 +12,7 @@ public class NavitAppConfig extends Application {
private static final int MAX_LAST_ADDRESSES = 10;
- private List<Navit.NavitAddress> mLastAddresses = null;
+ private List<NavitAddress> mLastAddresses = null;
private int mLastAddressField;
private SharedPreferences mSettings;
@@ -24,7 +24,7 @@ public class NavitAppConfig extends Application {
public List<NavitAddress> getLastAddresses() {
if (mLastAddresses == null) {
- mLastAddresses = new ArrayList<Navit.NavitAddress>();
+ mLastAddresses = new ArrayList<NavitAddress>();
int mLastAddressField = mSettings.getInt("LastAddress", -1);
if (mLastAddressField >= 0) {
int index = mLastAddressField;
@@ -32,11 +32,11 @@ public class NavitAppConfig extends Application {
String addr_str = mSettings.getString("LastAddress_" + String.valueOf(index), "");
if (addr_str.length() > 0) {
- Navit.NavitAddress address = new Navit.NavitAddress();
- address.addr = addr_str;
- address.lat = mSettings.getFloat("LastAddress_Lat_" + String.valueOf(index), 0);
- address.lon = mSettings.getFloat("LastAddress_Lon_" + String.valueOf(index), 0);
- mLastAddresses.add(address);
+ mLastAddresses.add(new NavitAddress(
+ 1,
+ mSettings.getFloat("LastAddress_Lat_" + String.valueOf(index), 0),
+ mSettings.getFloat("LastAddress_Lon_" + String.valueOf(index), 0),
+ addr_str));
}
if (--index < 0) index = MAX_LAST_ADDRESSES - 1;
@@ -47,7 +47,7 @@ public class NavitAppConfig extends Application {
return mLastAddresses;
}
- public void addLastAddress(Navit.NavitAddress newAddress) {
+ public void addLastAddress(NavitAddress newAddress) {
getLastAddresses();
mLastAddresses.add(newAddress);
diff --git a/navit/android/src/org/navitproject/navit/NavitDialogs.java b/navit/android/src/org/navitproject/navit/NavitDialogs.java
index ee91d5d72..1b52f666b 100644
--- a/navit/android/src/org/navitproject/navit/NavitDialogs.java
+++ b/navit/android/src/org/navitproject/navit/NavitDialogs.java
@@ -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);
- }
}
diff --git a/navit/android/src/org/navitproject/navit/NavitGraphics.java b/navit/android/src/org/navitproject/navit/NavitGraphics.java
index 58ef89fcd..c79315bd1 100644
--- a/navit/android/src/org/navitproject/navit/NavitGraphics.java
+++ b/navit/android/src/org/navitproject/navit/NavitGraphics.java
@@ -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);
/**
diff --git a/navit/android/src/org/navitproject/navit/NavitMapDownloader.java b/navit/android/src/org/navitproject/navit/NavitMapDownloader.java
index 2035332d9..b6c386dca 100644
--- a/navit/android/src/org/navitproject/navit/NavitMapDownloader.java
+++ b/navit/android/src/org/navitproject/navit/NavitMapDownloader.java
@@ -345,7 +345,7 @@ public class NavitMapDownloader extends Thread
Log.d(TAG, "stop_me -> true");
}
- public NavitMapDownloader(int map_id, int dialog_num)
+ public NavitMapDownloader(int map_id)
{
this.map_values = osm_maps[map_id];
}