/**
*
*/
package net.osmand.plus.activities.search;
import java.util.ArrayList;
import java.util.List;
import net.osmand.osm.LatLon;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.PoiFilter;
import net.osmand.plus.PoiFiltersHelper;
import net.osmand.plus.R;
import net.osmand.plus.activities.EditPOIFilterActivity;
import net.osmand.plus.activities.OsmandApplication;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
/**
* @author Maxim Frolov
*
*/
public class SearchPoiFilterActivity extends ListActivity {
private Typeface typeFace;
public final static String SEARCH_LAT = "search_lat"; //$NON-NLS-1$
public final static String SEARCH_LON = "search_lon"; //$NON-NLS-1$
private boolean searchNearBy = true;
private double latitude = 0;
private double longitude = 0;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.searchpoilist);
Bundle extras = getIntent().getExtras();
if(extras != null && extras.containsKey(SEARCH_LAT) && extras.containsKey(SEARCH_LON)){
searchNearBy = false;
latitude = extras.getDouble(SEARCH_LAT);
longitude = extras.getDouble(SEARCH_LON);
} else {
LatLon loc = OsmandSettings.getLastKnownMapLocation(OsmandSettings.getPrefs(this));
latitude = loc.getLatitude();
longitude = loc.getLongitude();
}
typeFace = Typeface.create((String)null, Typeface.ITALIC);
// ListActivity has a ListView, which you can get with:
ListView lv = getListView();
// Then you can create a listener like so:
lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> av, View v, int pos, long id) {
PoiFilter poi = ((AmenityAdapter) getListAdapter()).getItem(pos);
showEditActivity(poi);
return true;
}
});
}
@Override
protected void onResume() {
super.onResume();
PoiFiltersHelper poiFilters = ((OsmandApplication)getApplication()).getPoiFilters();
List<PoiFilter> filters = new ArrayList<PoiFilter>(poiFilters.getUserDefinedPoiFilters()) ;
filters.addAll(poiFilters.getOsmDefinedPoiFilters());
filters.add(poiFilters.getNameFinderPOIFilter());
setListAdapter(new AmenityAdapter(filters));
}
private void showEditActivity(PoiFilter poi) {
if(!poi.isStandardFilter()) {
Intent newIntent = new Intent(SearchPoiFilterActivity.this, EditPOIFilterActivity.class);
// folder selected
newIntent.putExtra(EditPOIFilterActivity.AMENITY_FILTER, poi.getFilterId());
if(!searchNearBy){
newIntent.putExtra(EditPOIFilterActivity.SEARCH_LAT, latitude);
newIntent.putExtra(EditPOIFilterActivity.SEARCH_LON, longitude);
}
startActivityForResult(newIntent, 0);
}
}
public void onListItemClick(ListView parent, View v, int position, long id) {
final PoiFilter filter = ((AmenityAdapter) getListAdapter()).getItem(position);
if(filter.getFilterId().equals(PoiFilter.CUSTOM_FILTER_ID)){
showEditActivity(filter);
return;
}
final Intent newIntent = new Intent(SearchPoiFilterActivity.this, SearchPOIActivity.class);
newIntent.putExtra(SearchPOIActivity.AMENITY_FILTER, filter.getFilterId());
if (searchNearBy) {
AlertDialog.Builder b = new AlertDialog.Builder(this);
b.setItems(new String[] { getString(R.string.search_nearby), getString(R.string.search_near_map) },
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (which == 1) {
newIntent.putExtra(SearchPOIActivity.SEARCH_LAT, latitude);
newIntent.putExtra(SearchPOIActivity.SEARCH_LON, longitude);
}
startActivityForResult(newIntent, 0);
}
});
b.show();
} else {
newIntent.putExtra(SearchPOIActivity.SEARCH_LAT, latitude);
newIntent.putExtra(SearchPOIActivity.SEARCH_LON, longitude);
startActivityForResult(newIntent, 0);
}
}
class AmenityAdapter extends ArrayAdapter<PoiFilter> {
AmenityAdapter(List<PoiFilter> list) {
super(SearchPoiFilterActivity.this, R.layout.searchpoi_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);
PoiFilter model = getItem(position);
label.setText(model.getName());
if(model.getFilterId().equals(PoiFilter.CUSTOM_FILTER_ID)){
label.setTypeface(typeFace);
}
icon.setImageResource(model.isStandardFilter() ? R.drawable.folder : R.drawable.favorites);
return (row);
}
}
}