package net.osmand.plus.activities.search;
import java.util.ArrayList;
import java.util.List;
import net.osmand.data.City;
import net.osmand.data.PostCode;
import net.osmand.data.Street;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R;
import net.osmand.plus.RegionAddressRepository;
import net.osmand.plus.activities.OsmandApplication;
import android.app.ProgressDialog;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.widget.TextView;
public class SearchStreet2ByNameActivity extends SearchByNameAbstractActivity<Street> {
private RegionAddressRepository region;
private City city;
private PostCode postcode;
private Street street1;
private List<Street> initialList = new ArrayList<Street>();
private ProgressDialog progressDlg;
@Override
protected void onCreate(Bundle savedInstanceState) {
SharedPreferences prefs = OsmandSettings.getPrefs(this);
region = ((OsmandApplication)getApplication()).getResourceManager().getRegionRepository(OsmandSettings.getLastSearchedRegion(prefs));
if(region != null){
postcode = region.getPostcode(OsmandSettings.getLastSearchedPostcode(prefs));
city = region.getCityById(OsmandSettings.getLastSearchedCity(prefs));
if(postcode != null){
street1 = region.getStreetByName(postcode, (OsmandSettings.getLastSearchedStreet(prefs)));
if(street1 != null){
city = street1.getCity();
}
} else if(city != null){
street1 = region.getStreetByName(city, (OsmandSettings.getLastSearchedStreet(prefs)));
}
if(city != null){
startLoadDataInThread(getString(R.string.loading_streets));
}
}
super.onCreate(savedInstanceState);
((TextView)findViewById(R.id.Label)).setText(R.string.incremental_search_street);
}
@Override
protected void onStop() {
if(progressDlg != null){
progressDlg.dismiss();
progressDlg = null;
}
super.onStop();
}
protected void startLoadDataInThread(String progressMsg){
progressDlg = ProgressDialog.show(this, getString(R.string.loading), progressMsg, true);
new Thread("Loader search data") { //$NON-NLS-1$
@Override
public void run() {
try {
List<Street> t = new ArrayList<Street>();
region.fillWithSuggestedStreetsIntersectStreets(city, street1, t);
initialList = t;
} finally {
if(progressDlg != null){
progressDlg.dismiss();
progressDlg = null;
runOnUiThread(new Runnable() {
@Override
public void run() {
setText(getFilter().toString());
}
});
}
}
}
}.start();
}
@Override
public List<Street> getObjects(String filter) {
int ind = 0;
filter = filter.toLowerCase();
List<Street> filterList = new ArrayList<Street>();
if(filter.length() == 0){
filterList.addAll(initialList);
return filterList;
}
for (Street s : initialList) {
String lowerCase = s.getName(region.useEnglishNames()).toLowerCase();
if (lowerCase.startsWith(filter)) {
filterList.add(ind, s);
ind++;
} else if (lowerCase.contains(filter)) {
filterList.add(s);
}
}
return filterList;
}
@Override
public void updateTextView(Street obj, TextView txt) {
txt.setText(obj.getName(region.useEnglishNames()));
}
@Override
public void itemSelected(Street obj) {
OsmandSettings.setLastSearchedIntersectedStreet(this, obj.getName(region.useEnglishNames()));
finish();
}
}