From 6867c31a2d8a824220c9e1aa1bcad69bd11850ed Mon Sep 17 00:00:00 2001 From: frolovmo Date: Mon, 31 May 2010 13:59:13 +0000 Subject: [PATCH] add search POI draft git-svn-id: https://osmand.googlecode.com/svn/trunk@103 e29c36b1-1cfa-d876-8d93-3434fc2bb7b8 --- OsmAnd/AndroidManifest.xml | 6 +- OsmAnd/res/layout/search.xml | 14 +-- OsmAnd/res/layout/searchaddress.xml | 6 ++ OsmAnd/res/layout/searchpoi.xml | 11 +++ OsmAnd/res/layout/searchpoi_list.xml | 16 ++++ ...earchlist.xml => searchpoifolder_list.xml} | 12 ++- OsmAnd/res/layout/searchpoilist.xml | 11 +++ OsmAnd/res/values/strings.xml | 2 + .../osmand/activities/MainMenuActivity.java | 5 +- .../activities/search/SearchActivity.java | 41 ++++++++ .../activities/search/SearchAddress.java | 16 ++++ .../SearchPOIActivity.java} | 89 +++++++++-------- .../search/SearchPOIListActivity.java | 95 +++++++++++++++++++ 13 files changed, 268 insertions(+), 56 deletions(-) create mode 100644 OsmAnd/res/layout/searchaddress.xml create mode 100644 OsmAnd/res/layout/searchpoi.xml create mode 100644 OsmAnd/res/layout/searchpoi_list.xml rename OsmAnd/res/layout/{searchlist.xml => searchpoifolder_list.xml} (52%) create mode 100644 OsmAnd/res/layout/searchpoilist.xml create mode 100644 OsmAnd/src/com/osmand/activities/search/SearchActivity.java create mode 100644 OsmAnd/src/com/osmand/activities/search/SearchAddress.java rename OsmAnd/src/com/osmand/activities/{SearchActivity.java => search/SearchPOIActivity.java} (57%) create mode 100644 OsmAnd/src/com/osmand/activities/search/SearchPOIListActivity.java diff --git a/OsmAnd/AndroidManifest.xml b/OsmAnd/AndroidManifest.xml index 6535820da9..2afc0d9c41 100644 --- a/OsmAnd/AndroidManifest.xml +++ b/OsmAnd/AndroidManifest.xml @@ -14,9 +14,11 @@ - + + + + diff --git a/OsmAnd/res/layout/search.xml b/OsmAnd/res/layout/search.xml index 04134a0189..aefec27c8c 100644 --- a/OsmAnd/res/layout/search.xml +++ b/OsmAnd/res/layout/search.xml @@ -1,10 +1,12 @@ - - + android:layout_width="fill_parent" android:orientation="vertical" + android:layout_height="fill_parent" android:background="@color/menu_background"> + + + + + + \ No newline at end of file diff --git a/OsmAnd/res/layout/searchaddress.xml b/OsmAnd/res/layout/searchaddress.xml new file mode 100644 index 0000000000..fe20d9d7ce --- /dev/null +++ b/OsmAnd/res/layout/searchaddress.xml @@ -0,0 +1,6 @@ + + + diff --git a/OsmAnd/res/layout/searchpoi.xml b/OsmAnd/res/layout/searchpoi.xml new file mode 100644 index 0000000000..f4238a877e --- /dev/null +++ b/OsmAnd/res/layout/searchpoi.xml @@ -0,0 +1,11 @@ + + + + + + + \ No newline at end of file diff --git a/OsmAnd/res/layout/searchpoi_list.xml b/OsmAnd/res/layout/searchpoi_list.xml new file mode 100644 index 0000000000..67f3dd7bc7 --- /dev/null +++ b/OsmAnd/res/layout/searchpoi_list.xml @@ -0,0 +1,16 @@ + + + + + + + + + \ No newline at end of file diff --git a/OsmAnd/res/layout/searchlist.xml b/OsmAnd/res/layout/searchpoifolder_list.xml similarity index 52% rename from OsmAnd/res/layout/searchlist.xml rename to OsmAnd/res/layout/searchpoifolder_list.xml index 7aa243025b..609edee28d 100644 --- a/OsmAnd/res/layout/searchlist.xml +++ b/OsmAnd/res/layout/searchpoifolder_list.xml @@ -1,9 +1,11 @@ - + + - + - \ No newline at end of file + diff --git a/OsmAnd/res/layout/searchpoilist.xml b/OsmAnd/res/layout/searchpoilist.xml new file mode 100644 index 0000000000..15ba603a6f --- /dev/null +++ b/OsmAnd/res/layout/searchpoilist.xml @@ -0,0 +1,11 @@ + + + + + + + \ No newline at end of file diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index c1bb1c9f3d..6efb660846 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -33,4 +33,6 @@ search #FFFFFF #FF0000 +searchpoi_activity +Find more diff --git a/OsmAnd/src/com/osmand/activities/MainMenuActivity.java b/OsmAnd/src/com/osmand/activities/MainMenuActivity.java index 787dc3d576..68467f93c4 100644 --- a/OsmAnd/src/com/osmand/activities/MainMenuActivity.java +++ b/OsmAnd/src/com/osmand/activities/MainMenuActivity.java @@ -28,6 +28,7 @@ import com.osmand.LogUtil; import com.osmand.ProgressDialogImplementation; import com.osmand.R; import com.osmand.ResourceManager; +import com.osmand.activities.search.SearchActivity; public class MainMenuActivity extends Activity { @@ -126,11 +127,9 @@ public class MainMenuActivity extends Activity { searchButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { - Bundle bundle = new Bundle(); - bundle.putString(SearchActivity.ANENITY_TYPE, null); final Intent search = new Intent(MainMenuActivity.this, SearchActivity.class); - search.putExtras(bundle); +// search.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); startActivity(search); } }); diff --git a/OsmAnd/src/com/osmand/activities/search/SearchActivity.java b/OsmAnd/src/com/osmand/activities/search/SearchActivity.java new file mode 100644 index 0000000000..9c43b07708 --- /dev/null +++ b/OsmAnd/src/com/osmand/activities/search/SearchActivity.java @@ -0,0 +1,41 @@ +/** + * + */ +package com.osmand.activities.search; + +import android.app.TabActivity; +import android.content.Intent; +import android.os.Bundle; +import android.widget.Button; +import android.widget.TabHost; + +/** + * @author Maxim Frolov + * + */ +public class SearchActivity extends TabActivity { + + Button searchPOIButton; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); +// +// setContentView(R.layout.search); +// +// searchPOIButton = (Button) findViewById(R.id.SearchPOIButton); +// searchPOIButton.setOnClickListener(new OnClickListener() { +// @Override +// public void onClick(View v) { +// final Intent search = new Intent(SearchActivity.this, SearchPOIListActivity.class); +// search.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); +// startActivity(search); +// +// } +// }); + TabHost host = getTabHost(); + host.addTab(host.newTabSpec("Search_POI").setIndicator("Search POI").setContent(new Intent(this, SearchPOIListActivity.class))); + host.addTab(host.newTabSpec("Search_Adress").setIndicator("Search Address").setContent(new Intent(this, SearchAddress.class))); + } + +} diff --git a/OsmAnd/src/com/osmand/activities/search/SearchAddress.java b/OsmAnd/src/com/osmand/activities/search/SearchAddress.java new file mode 100644 index 0000000000..e666526366 --- /dev/null +++ b/OsmAnd/src/com/osmand/activities/search/SearchAddress.java @@ -0,0 +1,16 @@ +package com.osmand.activities.search; + + +import com.osmand.R; + +import android.app.Activity; +import android.os.Bundle; + +public class SearchAddress extends Activity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.searchaddress); + } +} diff --git a/OsmAnd/src/com/osmand/activities/SearchActivity.java b/OsmAnd/src/com/osmand/activities/search/SearchPOIActivity.java similarity index 57% rename from OsmAnd/src/com/osmand/activities/SearchActivity.java rename to OsmAnd/src/com/osmand/activities/search/SearchPOIActivity.java index 8a8a3feff3..a393da095d 100644 --- a/OsmAnd/src/com/osmand/activities/SearchActivity.java +++ b/OsmAnd/src/com/osmand/activities/search/SearchPOIActivity.java @@ -1,7 +1,7 @@ /** * */ -package com.osmand.activities; +package com.osmand.activities.search; import java.util.ArrayList; import java.util.List; @@ -10,11 +10,14 @@ import java.util.TreeMap; import android.app.ListActivity; import android.content.Intent; +import android.content.SharedPreferences; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.View.OnClickListener; import android.widget.ArrayAdapter; +import android.widget.Button; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; @@ -23,6 +26,7 @@ import com.osmand.Algoritms; import com.osmand.OsmandSettings; import com.osmand.R; import com.osmand.ResourceManager; +import com.osmand.activities.MapActivity; import com.osmand.data.Amenity; import com.osmand.data.Amenity.AmenityType; import com.osmand.osm.LatLon; @@ -32,45 +36,53 @@ import com.osmand.osm.MapUtils; * @author Maxim Frolov * */ -public class SearchActivity extends ListActivity { +public class SearchPOIActivity extends ListActivity { public static final String ANENITY_TYPE = "amenity_type"; - List amenityList = new ArrayList(); Map> filter; + private List amenityList; + + private Button searchPOILevel; + private int zoom = 12; + + private AmenityType amenityType; + + private AmenityAdapter amenityAdapter; + @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); - setContentView(R.layout.search); - createAmenityTypeList(); + setContentView(R.layout.searchpoi); + searchPOILevel = (Button) findViewById(R.id.SearchPOILevelButton); + searchPOILevel.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + + } + }); Bundle bundle = this.getIntent().getExtras(); String anemity = bundle.getString(ANENITY_TYPE); if (anemity != null) { - AmenityType amenityType = findAmenityType(anemity); - createAmenityFilter(); - List list = filter.get(amenityType); - if(list != null) { - setListAdapter(new AmenityAdapter(filter.get(amenityType))); + amenityType = findAmenityType(anemity); + createAmenityFilter(zoom); + amenityList = filter.get(amenityType); + if(amenityList != null) { + amenityAdapter = new AmenityAdapter(amenityList); + setListAdapter(amenityAdapter); } - } else { - setListAdapter(new AmenityAdapter(amenityList)); - } + } } - private void createAmenityTypeList() { - for (AmenityType type : AmenityType.values()) { - amenityList.add(Algoritms.capitalizeFirstLetterAndLowercase(type.toString())); - } - } - private void createAmenityFilter() { + private void createAmenityFilter(int zoom) { ResourceManager resourceManager = ResourceManager.getResourceManager(); filter = new TreeMap>(); LatLon lastKnownMapLocation = OsmandSettings.getLastKnownMapLocation(this); List closestAmenities = resourceManager.searchAmenities(lastKnownMapLocation.getLatitude(), - lastKnownMapLocation.getLongitude(), 12, 500); + lastKnownMapLocation.getLongitude(), zoom, 500); MapUtils.sortListOfMapObject(closestAmenities, lastKnownMapLocation.getLatitude(), lastKnownMapLocation.getLongitude()); for (Amenity n : closestAmenities) { AmenityType type = n.getType(); @@ -83,16 +95,12 @@ public class SearchActivity extends ListActivity { } public void onListItemClick(ListView parent, View v, int position, long id) { - AmenityType amenityType = findAmenityType(amenityList.get(position)); - // folder selected - if (amenityType != null) { - Bundle bundle = new Bundle(); - bundle.putString(ANENITY_TYPE, amenityList.get(position)); - Intent newIntent = new Intent(this.getApplicationContext(), SearchActivity.class); - newIntent.putExtras(bundle); - startActivityForResult(newIntent, 0); - } else { - // poi selected + SharedPreferences prefs = getSharedPreferences(OsmandSettings.SHARED_PREFERENCES_NAME, MODE_WORLD_READABLE); + if(prefs != null ){ + Amenity amenity = amenityList.get(position); + OsmandSettings.setLastKnownMapLocation(this,amenity.getLocation().getLatitude(),amenity.getLocation().getLongitude()); + Intent newIntent = new Intent(this.getApplicationContext(), MapActivity.class); + startActivity(newIntent); } } @@ -109,7 +117,7 @@ public class SearchActivity extends ListActivity { @SuppressWarnings("unchecked") class AmenityAdapter extends ArrayAdapter { AmenityAdapter(Object list) { - super(SearchActivity.this, R.layout.searchlist, (List) list); + super(SearchPOIActivity.this, R.layout.searchpoi_list, (List) list); } @Override @@ -117,25 +125,26 @@ public class SearchActivity extends ListActivity { int c = super.getCount(); return c > 20 ? 20 : c; } + + public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = getLayoutInflater(); - View row = inflater.inflate(R.layout.searchlist, parent, false); - TextView label = (TextView) row.findViewById(R.id.label); - ImageView icon = (ImageView) row.findViewById(R.id.icon); + View row = inflater.inflate(R.layout.searchpoi_list, parent, false); + TextView label = (TextView) row.findViewById(R.id.poi_label); + TextView distanceLabel = (TextView) row.findViewById(R.id.poidistance_label); + ImageView icon = (ImageView) row.findViewById(R.id.poi_icon); Object model = getModel(position); - if (model instanceof String) { - label.setText((String) model); - icon.setImageResource(R.drawable.folder); - } else if (model instanceof Amenity) { + if (model instanceof Amenity) { Amenity anemity = (Amenity) model; if (anemity != null) { - LatLon lastKnownMapLocation = OsmandSettings.getLastKnownMapLocation(SearchActivity.this); + LatLon lastKnownMapLocation = OsmandSettings.getLastKnownMapLocation(SearchPOIActivity.this); int dist = (int) (MapUtils.getDistance(anemity.getLocation(), lastKnownMapLocation.getLatitude(), lastKnownMapLocation .getLongitude())); - String str = anemity.getStringWithoutType() + " [" + dist + " m ]"; + String str = anemity.getStringWithoutType(); label.setText(str); icon.setImageResource(R.drawable.poi); + distanceLabel.setText(" " +dist + " m "); } } return (row); diff --git a/OsmAnd/src/com/osmand/activities/search/SearchPOIListActivity.java b/OsmAnd/src/com/osmand/activities/search/SearchPOIListActivity.java new file mode 100644 index 0000000000..9a50594165 --- /dev/null +++ b/OsmAnd/src/com/osmand/activities/search/SearchPOIListActivity.java @@ -0,0 +1,95 @@ +/** + * + */ +package com.osmand.activities.search; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import android.app.ListActivity; +import android.content.Intent; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ImageView; +import android.widget.ListView; +import android.widget.TextView; + +import com.osmand.Algoritms; +import com.osmand.R; +import com.osmand.data.Amenity; +import com.osmand.data.Amenity.AmenityType; + +/** + * @author Maxim Frolov + * + */ +public class SearchPOIListActivity extends ListActivity { + + + List amenityList = new ArrayList(); + Map> filter; + + @Override + public void onCreate(Bundle icicle) { + super.onCreate(icicle); + setContentView(R.layout.searchpoilist); + createAmenityTypeList(); + setListAdapter(new AmenityAdapter(amenityList)); + + } + + private void createAmenityTypeList() { + for (AmenityType type : AmenityType.values()) { + amenityList.add(Algoritms.capitalizeFirstLetterAndLowercase(type.toString())); + } + + } + + public void onListItemClick(ListView parent, View v, int position, long id) { + AmenityType amenityType = findAmenityType(amenityList.get(position)); + // folder selected + if (amenityType != null) { + Bundle bundle = new Bundle(); + bundle.putString(SearchPOIActivity.ANENITY_TYPE, amenityList.get(position)); + Intent newIntent = new Intent(this.getApplicationContext(), SearchPOIActivity.class); + newIntent.putExtras(bundle); + startActivityForResult(newIntent, 0); + } + } + + private AmenityType findAmenityType(String string) { + for (AmenityType type : AmenityType.values()) { + if (string.equals(Algoritms.capitalizeFirstLetterAndLowercase(type.toString()))) { + return type; + } + } + return null; + + } + + @SuppressWarnings("unchecked") + class AmenityAdapter extends ArrayAdapter { + AmenityAdapter(Object list) { + super(SearchPOIListActivity.this, R.layout.searchpoi_list, (List) list); + } + + public View getView(int position, View convertView, ViewGroup parent) { + LayoutInflater inflater = getLayoutInflater(); + View row = inflater.inflate(R.layout.searchpoifolder_list, parent, false); + TextView label = (TextView) row.findViewById(R.id.folder_label); + ImageView icon = (ImageView) row.findViewById(R.id.folder_icon); + Object model = getModel(position); + label.setText((String) model); + icon.setImageResource(R.drawable.folder); + return (row); + } + + private Object getModel(int position) { + return (((AmenityAdapter) getListAdapter()).getItem(position)); + } + } +}