add direction to poi
git-svn-id: https://osmand.googlecode.com/svn/trunk@290 e29c36b1-1cfa-d876-8d93-3434fc2bb7b8
This commit is contained in:
parent
01662401f0
commit
24ccb2e33e
13 changed files with 392 additions and 65 deletions
|
@ -12,7 +12,8 @@ public class ToDoConstants {
|
||||||
* Write activity to show something about authors / donation ....
|
* Write activity to show something about authors / donation ....
|
||||||
*/
|
*/
|
||||||
public int DESCRIBE_ABOUT_AUTHORS = 8;
|
public int DESCRIBE_ABOUT_AUTHORS = 8;
|
||||||
|
|
||||||
|
// Prepare update : android description, sites, screenshots
|
||||||
|
|
||||||
// TODO ANDROID
|
// TODO ANDROID
|
||||||
// 42. Revise UI (icons/layouts). Support different devices. Add inactive/focus(!) icon versions.
|
// 42. Revise UI (icons/layouts). Support different devices. Add inactive/focus(!) icon versions.
|
||||||
|
@ -41,10 +42,10 @@ public class ToDoConstants {
|
||||||
// double tap to zoom [done]
|
// double tap to zoom [done]
|
||||||
// forbid rotate map to landscape [ done]
|
// forbid rotate map to landscape [ done]
|
||||||
// REFACTOR Settings activity ( for check box properties!) [partially done]
|
// REFACTOR Settings activity ( for check box properties!) [partially done]
|
||||||
|
// show POI choose near by or last map selection [done]
|
||||||
|
// Show poi direction (using sensor) [done]
|
||||||
|
|
||||||
// show POI choose near by or last map selection.
|
// hide center point (enable only when trackball using)?
|
||||||
// Show poi direction (using sensor)
|
|
||||||
// hide center point (enable only when trackball using)
|
|
||||||
// Fix bugs with test data (bug with follow turn / left time / add turn)
|
// Fix bugs with test data (bug with follow turn / left time / add turn)
|
||||||
// Improvement : Show stops in the transport route
|
// Improvement : Show stops in the transport route
|
||||||
|
|
||||||
|
|
|
@ -3,13 +3,13 @@
|
||||||
android:layout_width="fill_parent" android:layout_height="wrap_content"
|
android:layout_width="fill_parent" android:layout_height="wrap_content"
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<ImageView android:id="@+id/poi_icon" android:layout_width="25px"
|
<ImageView android:id="@+id/poi_icon" android:layout_width="26px" android:layout_height="26px"
|
||||||
android:paddingLeft="2px" android:paddingRight="2px"
|
android:paddingLeft="2px" android:paddingRight="2px"
|
||||||
android:paddingTop="2px" android:layout_height="fill_parent" />
|
android:paddingTop="2px" />
|
||||||
|
|
||||||
<TextView android:id="@+id/poidistance_label"
|
<TextView android:id="@+id/poidistance_label"
|
||||||
android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center"
|
android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center"
|
||||||
android:textSize="22px" android:maxWidth="75dp" android:minWidth="75dp"/>
|
android:textSize="22px" android:maxWidth="80dp" android:minWidth="80dp"/>
|
||||||
<TextView android:id="@+id/poi_label" android:layout_width="wrap_content"
|
<TextView android:id="@+id/poi_label" android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content" android:textSize="22px" />
|
android:layout_height="wrap_content" android:textSize="22px" />
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
|
<string name="search_near_map">Искать возле видимой карты</string>
|
||||||
|
<string name="search_nearby">Искать рядом</string>
|
||||||
<string name="map_orientation_default">По умолчанию</string>
|
<string name="map_orientation_default">По умолчанию</string>
|
||||||
<string name="map_orientation_portrait">Портрет</string>
|
<string name="map_orientation_portrait">Портрет</string>
|
||||||
<string name="map_orientation_landscape">Пейзаж</string>
|
<string name="map_orientation_landscape">Пейзаж</string>
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
|
<string name="search_near_map">Search near last map location</string>
|
||||||
|
<string name="search_nearby">Search nearby</string>
|
||||||
<string name="map_orientation_default">Default</string>
|
<string name="map_orientation_default">Default</string>
|
||||||
<string name="map_orientation_portrait">Portrait</string>
|
<string name="map_orientation_portrait">Portrait</string>
|
||||||
<string name="map_orientation_landscape">Landscape</string>
|
<string name="map_orientation_landscape">Landscape</string>
|
||||||
|
|
|
@ -99,6 +99,12 @@ public class PoiFilter {
|
||||||
return amenityList;
|
return amenityList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<Amenity> searchAgain(double lat, double lon){
|
||||||
|
List<Amenity> amenityList = ResourceManager.getResourceManager().searchAmenities(this, lat, lon, zoom, maxCount);
|
||||||
|
MapUtils.sortListOfMapObject(amenityList, lat, lon);
|
||||||
|
return amenityList;
|
||||||
|
}
|
||||||
|
|
||||||
public String getName(){
|
public String getName(){
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,19 +30,21 @@ import android.widget.ScrollView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import com.osmand.OsmandSettings;
|
||||||
import com.osmand.PoiFilter;
|
import com.osmand.PoiFilter;
|
||||||
import com.osmand.PoiFiltersHelper;
|
import com.osmand.PoiFiltersHelper;
|
||||||
import com.osmand.R;
|
import com.osmand.R;
|
||||||
import com.osmand.PoiFiltersHelper.PoiFilterDbHelper;
|
import com.osmand.PoiFiltersHelper.PoiFilterDbHelper;
|
||||||
import com.osmand.activities.search.SearchPOIActivity;
|
import com.osmand.activities.search.SearchPOIActivity;
|
||||||
import com.osmand.data.AmenityType;
|
import com.osmand.data.AmenityType;
|
||||||
|
import com.osmand.osm.LatLon;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Frolov
|
* @author Frolov
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class EditPOIFilterActivity extends ListActivity {
|
public class EditPOIFilterActivity extends ListActivity {
|
||||||
|
public static final String AMENITY_FILTER = "com.osmand.amenity_filter"; //$NON-NLS-1$
|
||||||
private Button filterLevel;
|
private Button filterLevel;
|
||||||
private PoiFilter filter;
|
private PoiFilter filter;
|
||||||
private PoiFilterDbHelper helper;
|
private PoiFilterDbHelper helper;
|
||||||
|
@ -56,16 +58,31 @@ public class EditPOIFilterActivity extends ListActivity {
|
||||||
filterLevel.setOnClickListener(new OnClickListener() {
|
filterLevel.setOnClickListener(new OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
Intent newIntent = new Intent(EditPOIFilterActivity.this, SearchPOIActivity.class);
|
AlertDialog.Builder b = new AlertDialog.Builder(EditPOIFilterActivity.this);
|
||||||
Bundle bundle = new Bundle();
|
b.setItems(new String[]{getString(R.string.search_nearby), getString(R.string.search_near_map)}, new DialogInterface.OnClickListener(){
|
||||||
bundle.putString(SearchPOIActivity.AMENITY_FILTER, filter.getFilterId());
|
@Override
|
||||||
newIntent.putExtras(bundle);
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
startActivity(newIntent);
|
Bundle bundle = new Bundle();
|
||||||
|
Intent newIntent = new Intent(EditPOIFilterActivity.this, SearchPOIActivity.class);
|
||||||
|
bundle.putString(SearchPOIActivity.AMENITY_FILTER, filter.getFilterId());
|
||||||
|
if(which == 1){
|
||||||
|
LatLon last = OsmandSettings.getLastKnownMapLocation(EditPOIFilterActivity.this);
|
||||||
|
if(last != null){
|
||||||
|
bundle.putDouble(SearchPOIActivity.SEARCH_LAT, last.getLatitude());
|
||||||
|
bundle.putDouble(SearchPOIActivity.SEARCH_LON, last.getLongitude());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
newIntent.putExtras(bundle);
|
||||||
|
startActivity(newIntent);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
b.show();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Bundle bundle = this.getIntent().getExtras();
|
Bundle bundle = this.getIntent().getExtras();
|
||||||
String filterId = bundle.getString(SearchPOIActivity.AMENITY_FILTER);
|
String filterId = bundle.getString(AMENITY_FILTER);
|
||||||
filter = PoiFiltersHelper.getFilterById(this, filterId);
|
filter = PoiFiltersHelper.getFilterById(this, filterId);
|
||||||
|
|
||||||
setListAdapter(new AmenityAdapter(AmenityType.getCategories()));
|
setListAdapter(new AmenityAdapter(AmenityType.getCategories()));
|
||||||
|
|
|
@ -89,7 +89,7 @@ public class FavouritesActivity extends ListActivity {
|
||||||
AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) aItem.getMenuInfo();
|
AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) aItem.getMenuInfo();
|
||||||
final FavouritePoint point = (FavouritePoint) favouritesList.get(menuInfo.position);
|
final FavouritePoint point = (FavouritePoint) favouritesList.get(menuInfo.position);
|
||||||
if(aItem.getItemId() == NAVIGATE_TO){
|
if(aItem.getItemId() == NAVIGATE_TO){
|
||||||
OsmandSettings.setMapLocationToShow(this, point.getLatitude(), point.getLongitude(), getString(R.string.favorite)+" : " + point.getName()); //$NON-NLS-1$
|
// OsmandSettings.setMapLocationToShow(this, point.getLatitude(), point.getLongitude(), getString(R.string.favorite)+" : " + point.getName()); //$NON-NLS-1$
|
||||||
OsmandSettings.setPointToNavigate(this, point.getLatitude(), point.getLongitude());
|
OsmandSettings.setPointToNavigate(this, point.getLatitude(), point.getLongitude());
|
||||||
Intent newIntent = new Intent(FavouritesActivity.this, MapActivity.class);
|
Intent newIntent = new Intent(FavouritesActivity.this, MapActivity.class);
|
||||||
startActivity(newIntent);
|
startActivity(newIntent);
|
||||||
|
|
|
@ -122,14 +122,16 @@ public class NavigatePointActivity extends Activity {
|
||||||
// TODO there is a bug in android implementation : doesn't convert if min = 59.23 or sec = 59.32 or deg=179.3
|
// TODO there is a bug in android implementation : doesn't convert if min = 59.23 or sec = 59.32 or deg=179.3
|
||||||
double lat = Location.convert(((TextView) findViewById(R.id.LatitudeEdit)).getText().toString());
|
double lat = Location.convert(((TextView) findViewById(R.id.LatitudeEdit)).getText().toString());
|
||||||
double lon = Location.convert(((TextView) findViewById(R.id.LongitudeEdit)).getText().toString());
|
double lon = Location.convert(((TextView) findViewById(R.id.LongitudeEdit)).getText().toString());
|
||||||
// in case when it is dialog
|
|
||||||
if(activity != null) {
|
|
||||||
activity.setMapLocation(lat, lon);
|
|
||||||
} else {
|
|
||||||
OsmandSettings.setMapLocationToShow(this, lat, lon, MessageFormat.format(getString(R.string.search_history_navigate_to), lat, lon));
|
|
||||||
}
|
|
||||||
if(navigate){
|
if(navigate){
|
||||||
OsmandSettings.setPointToNavigate(this, lat, lon);
|
OsmandSettings.setPointToNavigate(this, lat, lon);
|
||||||
|
} else {
|
||||||
|
// in case when it is dialog
|
||||||
|
if(activity != null) {
|
||||||
|
activity.setMapLocation(lat, lon);
|
||||||
|
} else {
|
||||||
|
OsmandSettings.setMapLocationToShow(this, lat, lon, MessageFormat.format(getString(R.string.search_history_navigate_to), lat, lon));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
close();
|
close();
|
||||||
} catch (RuntimeException e) {
|
} catch (RuntimeException e) {
|
||||||
|
|
|
@ -217,9 +217,10 @@ public class SearchAddressActivity extends Activity {
|
||||||
if (l != null) {
|
if (l != null) {
|
||||||
if(navigateTo){
|
if(navigateTo){
|
||||||
OsmandSettings.setPointToNavigate(SearchAddressActivity.this, l.getLatitude(), l.getLongitude());
|
OsmandSettings.setPointToNavigate(SearchAddressActivity.this, l.getLatitude(), l.getLongitude());
|
||||||
}
|
} else {
|
||||||
OsmandSettings.setMapLocationToShow(SearchAddressActivity.this, l.getLatitude(), l.getLongitude(), historyName);
|
OsmandSettings.setMapLocationToShow(SearchAddressActivity.this, l.getLatitude(), l.getLongitude(), historyName);
|
||||||
OsmandSettings.setLastKnownMapZoom(SearchAddressActivity.this, zoom);
|
OsmandSettings.setLastKnownMapZoom(SearchAddressActivity.this, zoom);
|
||||||
|
}
|
||||||
|
|
||||||
startActivity(new Intent(SearchAddressActivity.this, MapActivity.class));
|
startActivity(new Intent(SearchAddressActivity.this, MapActivity.class));
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,26 @@ import java.util.List;
|
||||||
|
|
||||||
import android.app.ListActivity;
|
import android.app.ListActivity;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.graphics.Canvas;
|
||||||
|
import android.graphics.Color;
|
||||||
|
import android.graphics.ColorFilter;
|
||||||
|
import android.graphics.Paint;
|
||||||
|
import android.graphics.Path;
|
||||||
|
import android.graphics.Paint.Style;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.hardware.Sensor;
|
||||||
|
import android.hardware.SensorEvent;
|
||||||
|
import android.hardware.SensorEventListener;
|
||||||
|
import android.hardware.SensorManager;
|
||||||
|
import android.location.Location;
|
||||||
|
import android.location.LocationListener;
|
||||||
|
import android.location.LocationManager;
|
||||||
|
import android.location.LocationProvider;
|
||||||
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.os.Message;
|
||||||
|
import android.util.Log;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
@ -22,6 +41,8 @@ import android.widget.ListView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import com.osmand.Algoritms;
|
||||||
|
import com.osmand.LogUtil;
|
||||||
import com.osmand.OsmandSettings;
|
import com.osmand.OsmandSettings;
|
||||||
import com.osmand.PoiFilter;
|
import com.osmand.PoiFilter;
|
||||||
import com.osmand.PoiFiltersHelper;
|
import com.osmand.PoiFiltersHelper;
|
||||||
|
@ -37,31 +58,44 @@ import com.osmand.osm.OpeningHoursParser.OpeningHoursRule;
|
||||||
* @author Maxim Frolov
|
* @author Maxim Frolov
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class SearchPOIActivity extends ListActivity {
|
public class SearchPOIActivity extends ListActivity implements LocationListener, SensorEventListener {
|
||||||
|
|
||||||
public static final String AMENITY_FILTER = "com.osmand.amenity_filter"; //$NON-NLS-1$
|
public static final String AMENITY_FILTER = "com.osmand.amenity_filter"; //$NON-NLS-1$
|
||||||
|
public static final String SEARCH_LAT = "com.osmand.am_search_lat"; //$NON-NLS-1$
|
||||||
|
public static final String SEARCH_LON = "com.osmand.am_search_lon"; //$NON-NLS-1$
|
||||||
|
private static final int GPS_TIMEOUT_REQUEST = 2000;
|
||||||
|
private static final int GPS_DIST_REQUEST = 5;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private Button searchPOILevel;
|
private Button searchPOILevel;
|
||||||
private Button showOnMap;
|
private Button showOnMap;
|
||||||
private PoiFilter filter;
|
private PoiFilter filter;
|
||||||
private AmenityAdapter amenityAdapter;
|
private AmenityAdapter amenityAdapter;
|
||||||
private LatLon lastKnownMapLocation;
|
|
||||||
private TextView searchArea;
|
private TextView searchArea;
|
||||||
|
|
||||||
|
private boolean searchNearBy = false;
|
||||||
|
private Location location = null;
|
||||||
|
private Location searchedLocation = null;
|
||||||
|
private Float heading = null;
|
||||||
|
|
||||||
|
private String currentLocationProvider = null;
|
||||||
|
private boolean sensorRegistered = false;
|
||||||
|
private Handler uiHandler;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle icicle) {
|
public void onCreate(Bundle icicle) {
|
||||||
super.onCreate(icicle);
|
super.onCreate(icicle);
|
||||||
setContentView(R.layout.searchpoi);
|
setContentView(R.layout.searchpoi);
|
||||||
|
uiHandler = new Handler();
|
||||||
searchPOILevel = (Button) findViewById(R.id.SearchPOILevelButton);
|
searchPOILevel = (Button) findViewById(R.id.SearchPOILevelButton);
|
||||||
searchArea = (TextView) findViewById(R.id.SearchAreaText);
|
searchArea = (TextView) findViewById(R.id.SearchAreaText);
|
||||||
searchPOILevel.setOnClickListener(new OnClickListener() {
|
searchPOILevel.setOnClickListener(new OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
amenityAdapter.setNewModel(filter.searchFurther(lastKnownMapLocation.getLatitude(), lastKnownMapLocation.getLongitude()));
|
amenityAdapter.setNewModel(filter.searchFurther(location.getLatitude(), location.getLongitude()));
|
||||||
|
searchedLocation = location;
|
||||||
searchArea.setText(filter.getSearchArea());
|
searchArea.setText(filter.getSearchArea());
|
||||||
searchPOILevel.setEnabled(filter.isSearchFurtherAvailable());
|
searchPOILevel.setEnabled(filter.isSearchFurtherAvailable());
|
||||||
|
|
||||||
|
@ -71,6 +105,15 @@ public class SearchPOIActivity extends ListActivity {
|
||||||
Bundle bundle = this.getIntent().getExtras();
|
Bundle bundle = this.getIntent().getExtras();
|
||||||
String filterId = bundle.getString(AMENITY_FILTER);
|
String filterId = bundle.getString(AMENITY_FILTER);
|
||||||
filter = PoiFiltersHelper.getFilterById(this, filterId);
|
filter = PoiFiltersHelper.getFilterById(this, filterId);
|
||||||
|
if(bundle.containsKey(SEARCH_LAT) && bundle.containsKey(SEARCH_LON)){
|
||||||
|
location = new Location("internal"); //$NON-NLS-1$
|
||||||
|
location.setLatitude(bundle.getDouble(SEARCH_LAT));
|
||||||
|
location.setLongitude(bundle.getDouble(SEARCH_LON));
|
||||||
|
searchNearBy = false;
|
||||||
|
} else {
|
||||||
|
location = null;
|
||||||
|
searchNearBy = true;
|
||||||
|
}
|
||||||
|
|
||||||
showOnMap = (Button) findViewById(R.id.ShowOnMap);
|
showOnMap = (Button) findViewById(R.id.ShowOnMap);
|
||||||
showOnMap.setOnClickListener(new OnClickListener() {
|
showOnMap.setOnClickListener(new OnClickListener() {
|
||||||
|
@ -78,6 +121,10 @@ public class SearchPOIActivity extends ListActivity {
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
OsmandSettings.setPoiFilterForMap(SearchPOIActivity.this, filter.getFilterId());
|
OsmandSettings.setPoiFilterForMap(SearchPOIActivity.this, filter.getFilterId());
|
||||||
OsmandSettings.setShowPoiOverMap(SearchPOIActivity.this, true);
|
OsmandSettings.setShowPoiOverMap(SearchPOIActivity.this, true);
|
||||||
|
if(searchNearBy && location != null){
|
||||||
|
OsmandSettings.setMapLocationToShow(SearchPOIActivity.this, location.getLatitude(), location.getLongitude());
|
||||||
|
OsmandSettings.setLastKnownMapZoom(SearchPOIActivity.this, 15);
|
||||||
|
}
|
||||||
Intent newIntent = new Intent(SearchPOIActivity.this, MapActivity.class);
|
Intent newIntent = new Intent(SearchPOIActivity.this, MapActivity.class);
|
||||||
startActivity(newIntent);
|
startActivity(newIntent);
|
||||||
}
|
}
|
||||||
|
@ -106,16 +153,157 @@ public class SearchPOIActivity extends ListActivity {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setLocation(Location l){
|
||||||
|
registerUnregisterSensor(l);
|
||||||
|
boolean handled = false;
|
||||||
|
if (l != null && filter != null) {
|
||||||
|
if (location == null) {
|
||||||
|
searchedLocation = l;
|
||||||
|
amenityAdapter.setNewModel(filter.initializeNewSearch(l.getLatitude(), l.getLongitude(), 40));
|
||||||
|
searchPOILevel.setEnabled(filter.isSearchFurtherAvailable());
|
||||||
|
searchArea.setText(filter.getSearchArea());
|
||||||
|
handled = true;
|
||||||
|
} else if (searchedLocation != null && l.distanceTo(searchedLocation) > 80) {
|
||||||
|
amenityAdapter.setNewModel(filter.searchAgain(l.getLatitude(), l.getLongitude()));
|
||||||
|
searchPOILevel.setEnabled(filter.isSearchFurtherAvailable());
|
||||||
|
searchArea.setText(filter.getSearchArea());
|
||||||
|
handled = true;
|
||||||
|
} else if(location.distanceTo(l) > 8){
|
||||||
|
handled = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(handled) {
|
||||||
|
location = l;
|
||||||
|
amenityAdapter.notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isRunningOnEmulator(){
|
||||||
|
if (Build.DEVICE.equals("generic")) { //$NON-NLS-1$
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStatusChanged(String provider, int status, Bundle extras) {
|
||||||
|
LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE);
|
||||||
|
if (LocationManager.GPS_PROVIDER.equals(provider)) {
|
||||||
|
if (LocationProvider.OUT_OF_SERVICE == status || LocationProvider.TEMPORARILY_UNAVAILABLE == status) {
|
||||||
|
if (LocationProvider.OUT_OF_SERVICE == status) {
|
||||||
|
setLocation(null);
|
||||||
|
}
|
||||||
|
if (!isRunningOnEmulator() && service.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
|
||||||
|
if (!Algoritms.objectEquals(currentLocationProvider, LocationManager.NETWORK_PROVIDER)) {
|
||||||
|
currentLocationProvider = LocationManager.NETWORK_PROVIDER;
|
||||||
|
service.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, GPS_TIMEOUT_REQUEST, GPS_DIST_REQUEST, this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (LocationProvider.AVAILABLE == status) {
|
||||||
|
if (!Algoritms.objectEquals(currentLocationProvider, LocationManager.GPS_PROVIDER)) {
|
||||||
|
currentLocationProvider = LocationManager.GPS_PROVIDER;
|
||||||
|
service.removeUpdates(this);
|
||||||
|
service.requestLocationUpdates(LocationManager.GPS_PROVIDER, GPS_TIMEOUT_REQUEST, GPS_DIST_REQUEST, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLocationChanged(Location location) {
|
||||||
|
setLocation(location);
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onProviderDisabled(String provider) {
|
||||||
|
setLocation(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSensorChanged(SensorEvent event) {
|
||||||
|
// Attention : sensor produces a lot of events & can hang the system
|
||||||
|
if(heading != null && heading - event.values[0] < 4){
|
||||||
|
// this is very small variation
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
heading = event.values[0];
|
||||||
|
|
||||||
|
if(!uiHandler.hasMessages(5)){
|
||||||
|
Message msg = Message.obtain(uiHandler, new Runnable(){
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
amenityAdapter.notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
msg.what = 5;
|
||||||
|
uiHandler.sendMessageDelayed(msg, 100);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onProviderEnabled(String provider) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onAccuracyChanged(Sensor sensor, int accuracy) {
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
// TODO think where this code should be placed (onCreate() - save last search results or onResume() - search time)
|
if (filter != null && location != null) {
|
||||||
lastKnownMapLocation = OsmandSettings.getLastKnownMapLocation(this);
|
searchedLocation = location;
|
||||||
if (filter != null) {
|
amenityAdapter.setNewModel(filter.initializeNewSearch(location.getLatitude(), location.getLongitude(), 40));
|
||||||
amenityAdapter.setNewModel(filter.initializeNewSearch(lastKnownMapLocation.getLatitude(),
|
|
||||||
lastKnownMapLocation.getLongitude(), 40));
|
|
||||||
searchPOILevel.setEnabled(filter.isSearchFurtherAvailable());
|
searchPOILevel.setEnabled(filter.isSearchFurtherAvailable());
|
||||||
searchArea.setText(filter.getSearchArea());
|
searchArea.setText(filter.getSearchArea());
|
||||||
|
} else {
|
||||||
|
searchPOILevel.setEnabled(false);
|
||||||
|
}
|
||||||
|
showOnMap.setEnabled(filter != null);
|
||||||
|
if (searchNearBy) {
|
||||||
|
LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE);
|
||||||
|
service.requestLocationUpdates(LocationManager.GPS_PROVIDER, GPS_TIMEOUT_REQUEST, GPS_DIST_REQUEST, this);
|
||||||
|
if (!service.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
|
||||||
|
service.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, GPS_TIMEOUT_REQUEST, GPS_DIST_REQUEST, this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void registerUnregisterSensor(Location location){
|
||||||
|
// show point view only if gps enabled
|
||||||
|
if(location == null){
|
||||||
|
if(sensorRegistered) {
|
||||||
|
Log.d(LogUtil.TAG, "Disable sensor"); //$NON-NLS-1$
|
||||||
|
((SensorManager) getSystemService(SENSOR_SERVICE)).unregisterListener(this);
|
||||||
|
sensorRegistered = false;
|
||||||
|
heading = null;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(!sensorRegistered){
|
||||||
|
Log.d(LogUtil.TAG, "Enable sensor"); //$NON-NLS-1$
|
||||||
|
SensorManager sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE);
|
||||||
|
Sensor s = sensorMgr.getDefaultSensor(Sensor.TYPE_ORIENTATION);
|
||||||
|
if (s != null) {
|
||||||
|
sensorMgr.registerListener(this, s, SensorManager.SENSOR_DELAY_UI);
|
||||||
|
}
|
||||||
|
sensorRegistered = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPause() {
|
||||||
|
super.onPause();
|
||||||
|
if (searchNearBy) {
|
||||||
|
LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE);
|
||||||
|
service.removeUpdates(this);
|
||||||
|
|
||||||
|
SensorManager sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE);
|
||||||
|
sensorMgr.unregisterListener(this);
|
||||||
|
sensorRegistered = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -125,10 +313,81 @@ public class SearchPOIActivity extends ListActivity {
|
||||||
OsmandSettings.setShowPoiOverMap(SearchPOIActivity.this, true);
|
OsmandSettings.setShowPoiOverMap(SearchPOIActivity.this, true);
|
||||||
}
|
}
|
||||||
Amenity amenity = ((AmenityAdapter) getListAdapter()).getItem(position);
|
Amenity amenity = ((AmenityAdapter) getListAdapter()).getItem(position);
|
||||||
OsmandSettings.setMapLocationToShow(this, amenity.getLocation().getLatitude(), amenity.getLocation().getLongitude(), getString(R.string.poi)+" : " + amenity.getSimpleFormat(OsmandSettings.usingEnglishNames(this))); //$NON-NLS-1$
|
OsmandSettings.setMapLocationToShow(this, amenity.getLocation().getLatitude(), amenity.getLocation().getLongitude(),
|
||||||
|
getString(R.string.poi)+" : " + amenity.getSimpleFormat(OsmandSettings.usingEnglishNames(this))); //$NON-NLS-1$
|
||||||
|
OsmandSettings.setLastKnownMapZoom(this, 16);
|
||||||
Intent newIntent = new Intent(SearchPOIActivity.this, MapActivity.class);
|
Intent newIntent = new Intent(SearchPOIActivity.this, MapActivity.class);
|
||||||
startActivity(newIntent);
|
startActivity(newIntent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class DirectionDrawable extends Drawable {
|
||||||
|
Paint paintRouteDirection;
|
||||||
|
Path path = new Path();
|
||||||
|
private float angle;
|
||||||
|
|
||||||
|
private final int width = 24;
|
||||||
|
private final int height = 24;
|
||||||
|
|
||||||
|
public DirectionDrawable(){
|
||||||
|
paintRouteDirection = new Paint();
|
||||||
|
paintRouteDirection.setStyle(Style.FILL_AND_STROKE);
|
||||||
|
paintRouteDirection.setColor(Color.rgb(100, 0, 255));
|
||||||
|
paintRouteDirection.setAntiAlias(true);
|
||||||
|
|
||||||
|
int h = 15;
|
||||||
|
int w = 4;
|
||||||
|
float sarrowL = 8; // side of arrow
|
||||||
|
float harrowL = (float) Math.sqrt(2) * sarrowL; // hypotenuse of arrow
|
||||||
|
float hpartArrowL = (float) (harrowL - w) / 2;
|
||||||
|
|
||||||
|
path.moveTo(width / 2, height - (height - h) / 3);
|
||||||
|
path.rMoveTo(w / 2, 0);
|
||||||
|
path.rLineTo(0, -h);
|
||||||
|
path.rLineTo(hpartArrowL, 0);
|
||||||
|
path.rLineTo(-harrowL / 2, -harrowL / 2); // center
|
||||||
|
path.rLineTo(-harrowL / 2, harrowL / 2);
|
||||||
|
path.rLineTo(hpartArrowL, 0);
|
||||||
|
path.rLineTo(0, h);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOpenedColor(int opened){
|
||||||
|
if(opened == 0){
|
||||||
|
paintRouteDirection.setColor(Color.rgb(100, 0, 255));
|
||||||
|
} else if(opened == -1){
|
||||||
|
paintRouteDirection.setColor(Color.rgb(150, 150, 150));
|
||||||
|
} else {
|
||||||
|
paintRouteDirection.setColor(Color.rgb(220, 100, 80));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setAngle(float angle){
|
||||||
|
this.angle = angle;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void draw(Canvas canvas) {
|
||||||
|
canvas.rotate(angle, width/2, height/2);
|
||||||
|
canvas.drawPath(path, paintRouteDirection);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getOpacity() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setAlpha(int alpha) {
|
||||||
|
paintRouteDirection.setAlpha(alpha);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setColorFilter(ColorFilter cf) {
|
||||||
|
paintRouteDirection.setColorFilter(cf);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
class AmenityAdapter extends ArrayAdapter<Amenity> {
|
class AmenityAdapter extends ArrayAdapter<Amenity> {
|
||||||
AmenityAdapter(List<Amenity> list) {
|
AmenityAdapter(List<Amenity> list) {
|
||||||
|
@ -152,43 +411,62 @@ public class SearchPOIActivity extends ListActivity {
|
||||||
LayoutInflater inflater = getLayoutInflater();
|
LayoutInflater inflater = getLayoutInflater();
|
||||||
row = inflater.inflate(R.layout.searchpoi_list, parent, false);
|
row = inflater.inflate(R.layout.searchpoi_list, parent, false);
|
||||||
}
|
}
|
||||||
|
float[] mes = null;
|
||||||
TextView label = (TextView) row.findViewById(R.id.poi_label);
|
TextView label = (TextView) row.findViewById(R.id.poi_label);
|
||||||
TextView distanceLabel = (TextView) row.findViewById(R.id.poidistance_label);
|
TextView distanceLabel = (TextView) row.findViewById(R.id.poidistance_label);
|
||||||
ImageView icon = (ImageView) row.findViewById(R.id.poi_icon);
|
ImageView icon = (ImageView) row.findViewById(R.id.poi_icon);
|
||||||
Amenity amenity = getItem(position);
|
Amenity amenity = getItem(position);
|
||||||
LatLon lastKnownMapLocation = OsmandSettings.getLastKnownMapLocation(SearchPOIActivity.this);
|
if(location != null){
|
||||||
int dist = (int) (MapUtils.getDistance(amenity.getLocation(), lastKnownMapLocation.getLatitude(), lastKnownMapLocation
|
mes = new float[2];
|
||||||
.getLongitude()));
|
LatLon l = amenity.getLocation();
|
||||||
|
Location.distanceBetween(l.getLatitude(), l.getLongitude(), location.getLatitude(), location.getLongitude(), mes);
|
||||||
|
}
|
||||||
|
|
||||||
String str = amenity.getStringWithoutType(OsmandSettings.usingEnglishNames(SearchPOIActivity.this));
|
String str = amenity.getStringWithoutType(OsmandSettings.usingEnglishNames(SearchPOIActivity.this));
|
||||||
label.setText(str);
|
label.setText(str);
|
||||||
|
int opened = -1;
|
||||||
if (amenity.getOpeningHours() != null) {
|
if (amenity.getOpeningHours() != null) {
|
||||||
List<OpeningHoursRule> rs = OpeningHoursParser.parseOpenedHours(amenity.getOpeningHours());
|
List<OpeningHoursRule> rs = OpeningHoursParser.parseOpenedHours(amenity.getOpeningHours());
|
||||||
if(rs == null){
|
if (rs != null) {
|
||||||
icon.setImageResource(R.drawable.poi);
|
|
||||||
} else {
|
|
||||||
Calendar inst = Calendar.getInstance();
|
Calendar inst = Calendar.getInstance();
|
||||||
inst.setTimeInMillis(System.currentTimeMillis());
|
inst.setTimeInMillis(System.currentTimeMillis());
|
||||||
boolean work = false;
|
boolean work = false;
|
||||||
for(OpeningHoursRule p : rs){
|
for (OpeningHoursRule p : rs) {
|
||||||
if(p.isOpenedForTime(inst)){
|
if (p.isOpenedForTime(inst)) {
|
||||||
work = true;
|
work = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(work){
|
if (work) {
|
||||||
icon.setImageResource(R.drawable.opened_poi);
|
opened = 0;
|
||||||
} else {
|
} else {
|
||||||
icon.setImageResource(R.drawable.closed_poi);
|
opened = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
|
||||||
icon.setImageResource(R.drawable.poi);
|
|
||||||
}
|
}
|
||||||
|
if(heading != null && location != null){
|
||||||
distanceLabel.setText(" " + MapUtils.getFormattedDistance(dist)); //$NON-NLS-1$
|
DirectionDrawable draw = new DirectionDrawable();
|
||||||
|
draw.setAngle(mes[1] - heading + 180);
|
||||||
|
draw.setOpenedColor(opened);
|
||||||
|
icon.setImageDrawable(draw);
|
||||||
|
} else {
|
||||||
|
if(opened == -1){
|
||||||
|
icon.setImageResource(R.drawable.poi);
|
||||||
|
} else if(opened == 0){
|
||||||
|
icon.setImageResource(R.drawable.opened_poi);
|
||||||
|
} else {
|
||||||
|
icon.setImageResource(R.drawable.closed_poi);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(mes == null){
|
||||||
|
distanceLabel.setText(""); //$NON-NLS-1$
|
||||||
|
} else {
|
||||||
|
distanceLabel.setText(" " + MapUtils.getFormattedDistance((int) mes[0])); //$NON-NLS-1$
|
||||||
|
}
|
||||||
return (row);
|
return (row);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,9 @@ package com.osmand.activities.search;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import android.app.AlertDialog;
|
||||||
import android.app.ListActivity;
|
import android.app.ListActivity;
|
||||||
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.graphics.Typeface;
|
import android.graphics.Typeface;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
@ -19,10 +21,12 @@ import android.widget.ImageView;
|
||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import com.osmand.OsmandSettings;
|
||||||
import com.osmand.PoiFilter;
|
import com.osmand.PoiFilter;
|
||||||
import com.osmand.PoiFiltersHelper;
|
import com.osmand.PoiFiltersHelper;
|
||||||
import com.osmand.R;
|
import com.osmand.R;
|
||||||
import com.osmand.activities.EditPOIFilterActivity;
|
import com.osmand.activities.EditPOIFilterActivity;
|
||||||
|
import com.osmand.osm.LatLon;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Maxim Frolov
|
* @author Maxim Frolov
|
||||||
|
@ -30,7 +34,6 @@ import com.osmand.activities.EditPOIFilterActivity;
|
||||||
*/
|
*/
|
||||||
public class SearchPoiFilterActivity extends ListActivity {
|
public class SearchPoiFilterActivity extends ListActivity {
|
||||||
|
|
||||||
|
|
||||||
private Typeface typeFace;
|
private Typeface typeFace;
|
||||||
|
|
||||||
|
|
||||||
|
@ -68,22 +71,37 @@ public class SearchPoiFilterActivity extends ListActivity {
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
Intent newIntent = new Intent(SearchPoiFilterActivity.this, EditPOIFilterActivity.class);
|
Intent newIntent = new Intent(SearchPoiFilterActivity.this, EditPOIFilterActivity.class);
|
||||||
// folder selected
|
// folder selected
|
||||||
bundle.putString(SearchPOIActivity.AMENITY_FILTER, poi.getFilterId());
|
bundle.putString(EditPOIFilterActivity.AMENITY_FILTER, poi.getFilterId());
|
||||||
newIntent.putExtras(bundle);
|
newIntent.putExtras(bundle);
|
||||||
startActivityForResult(newIntent, 0);
|
startActivityForResult(newIntent, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public void onListItemClick(ListView parent, View v, int position, long id) {
|
public void onListItemClick(ListView parent, View v, int position, long id) {
|
||||||
PoiFilter filter = ((AmenityAdapter) getListAdapter()).getItem(position);
|
final PoiFilter filter = ((AmenityAdapter) getListAdapter()).getItem(position);
|
||||||
if(filter.getFilterId().equals(PoiFilter.CUSTOM_FILTER_ID)){
|
if(filter.getFilterId().equals(PoiFilter.CUSTOM_FILTER_ID)){
|
||||||
showEditActivity(filter);
|
showEditActivity(filter);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Bundle bundle = new Bundle();
|
AlertDialog.Builder b = new AlertDialog.Builder(this);
|
||||||
Intent newIntent = new Intent(SearchPoiFilterActivity.this, SearchPOIActivity.class);
|
b.setItems(new String[]{getString(R.string.search_nearby), getString(R.string.search_near_map)}, new DialogInterface.OnClickListener(){
|
||||||
bundle.putString(SearchPOIActivity.AMENITY_FILTER, filter.getFilterId());
|
@Override
|
||||||
newIntent.putExtras(bundle);
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
startActivityForResult(newIntent, 0);
|
Bundle bundle = new Bundle();
|
||||||
|
Intent newIntent = new Intent(SearchPoiFilterActivity.this, SearchPOIActivity.class);
|
||||||
|
bundle.putString(SearchPOIActivity.AMENITY_FILTER, filter.getFilterId());
|
||||||
|
if(which == 1){
|
||||||
|
LatLon last = OsmandSettings.getLastKnownMapLocation(SearchPoiFilterActivity.this);
|
||||||
|
if(last != null){
|
||||||
|
bundle.putDouble(SearchPOIActivity.SEARCH_LAT, last.getLatitude());
|
||||||
|
bundle.putDouble(SearchPOIActivity.SEARCH_LON, last.getLongitude());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
newIntent.putExtras(bundle);
|
||||||
|
startActivityForResult(newIntent, 0);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
b.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -62,9 +62,13 @@ public class AnimateDraggingMapThread implements Runnable {
|
||||||
*/
|
*/
|
||||||
public void stopDraggingSync(){
|
public void stopDraggingSync(){
|
||||||
// wait until current thread != null
|
// wait until current thread != null
|
||||||
// TODO implement better method for waintg
|
|
||||||
stopped = true;
|
stopped = true;
|
||||||
while(currentThread != null){}
|
while(currentThread != null){
|
||||||
|
try {
|
||||||
|
currentThread.join();
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void startDragging(float dTime, float startX, float startY, float endX, float endY){
|
public void startDragging(float dTime, float startX, float startY, float endX, float endY){
|
||||||
|
|
|
@ -103,9 +103,6 @@ public class OsmandMapTileView extends SurfaceView implements IMapDownloaderCall
|
||||||
Paint paintBitmap;
|
Paint paintBitmap;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public OsmandMapTileView(Context context, AttributeSet attrs) {
|
public OsmandMapTileView(Context context, AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
initView();
|
initView();
|
||||||
|
@ -163,7 +160,6 @@ public class OsmandMapTileView extends SurfaceView implements IMapDownloaderCall
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void surfaceDestroyed(SurfaceHolder holder) {
|
public void surfaceDestroyed(SurfaceHolder holder) {
|
||||||
// TODO clear cache ?
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addLayer(OsmandMapLayer layer, OsmandMapLayer afterIt){
|
public void addLayer(OsmandMapLayer layer, OsmandMapLayer afterIt){
|
||||||
|
|
Loading…
Reference in a new issue