package net.osmand.plus.activities.search;
import java.util.Comparator;
import java.util.List;
import net.osmand.data.City;
import net.osmand.data.MapObject.MapObjectComparator;
import net.osmand.data.Street;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R;
import net.osmand.plus.activities.search.SearchAddressFragment.AddressInformation;
import net.osmand.plus.resources.RegionAddressRepository;
import android.os.AsyncTask;
import android.view.View;
public class SearchStreet2ByNameActivity extends SearchByNameAbstractActivity<Street> {
private RegionAddressRepository region;
private City cityOrPostcode;
private Street street1;
private OsmandSettings osmandSettings;
@Override
protected Comparator<? super Street> createComparator() {
return new MapObjectComparator(getMyApplication().getSettings().MAP_PREFERRED_LOCALE.get(),
getMyApplication().getSettings().MAP_TRANSLITERATE_NAMES.get());
}
@Override
protected void reset() {
//This is really only a "clear input text field", hence do not reset settings here
//osmandSettings.setLastSearchedIntersectedStreet("", null);
super.reset();
}
@Override
public AsyncTask<Object, ?, ?> getInitializeTask() {
return new AsyncTask<Object, Void, List<Street>>(){
@Override
protected void onPostExecute(List<Street> result) {
setLabelText(R.string.incremental_search_street);
progress.setVisibility(View.INVISIBLE);
finishInitializing(result);
}
@Override
protected void onPreExecute() {
setLabelText(R.string.loading_streets);
progress.setVisibility(View.VISIBLE);
}
@Override
protected List<Street> doInBackground(Object... params) {
region = ((OsmandApplication)getApplication()).getResourceManager().getRegionRepository(settings.getLastSearchedRegion());
if(region != null){
cityOrPostcode = region.getCityById(settings.getLastSearchedCity(), settings.getLastSearchedCityName());
if(cityOrPostcode != null){
street1 = region.getStreetByName(cityOrPostcode, (settings.getLastSearchedStreet()));
}
if(cityOrPostcode != null && street1 != null){
return region.getStreetsIntersectStreets(street1);
}
}
return null;
}
};
}
@Override
protected AddressInformation getAddressInformation() {
return AddressInformation.buildStreet(this, settings);
}
@Override
public String getText(Street obj) {
return obj.getName(region.getLang(), region.isTransliterateNames());
}
@Override
public void itemSelected(Street obj) {
settings.setLastSearchedIntersectedStreet(obj.getName(region.getLang(), region.isTransliterateNames()), obj.getLocation());
if(isSelectAddres()) {
finish();
} else {
showOnMap(obj.getLocation(), AddressInformation.build2StreetIntersection(this, settings));
}
}
}