Start integrating online search in quick search
This commit is contained in:
parent
ded04f334a
commit
5cd64b8169
3 changed files with 62 additions and 0 deletions
|
@ -9,6 +9,8 @@ public enum ObjectType {
|
|||
LOCATION(true), PARTIAL_LOCATION(false),
|
||||
// UI OBJECTS
|
||||
FAVORITE(true), FAVORITE_GROUP(false), WPT(true), RECENT_OBJ(true),
|
||||
// ONLINE
|
||||
ONLINE_POI(true), ONLINE_ADDRESS(true),
|
||||
|
||||
REGION(true),
|
||||
|
||||
|
|
|
@ -1079,6 +1079,16 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
|||
for (SearchResult sr : res.getCurrentSearchResults()) {
|
||||
rows.add(new QuickSearchListItem(app, sr));
|
||||
}
|
||||
rows.add(new QuickSearchButtonListItem(app, R.drawable.ic_world_globe_dark,
|
||||
app.getString(R.string.search_online_address), new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
startOnlinePoiSearch();
|
||||
mainSearchFragment.getAdapter().clear();
|
||||
updateTabbarVisibility(false);
|
||||
openKeyboard();
|
||||
}
|
||||
}));
|
||||
rows.add(new QuickSearchButtonListItem(app, R.drawable.ic_action_search_dark,
|
||||
app.getString(R.string.custom_search), new OnClickListener() {
|
||||
@Override
|
||||
|
@ -1320,6 +1330,17 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
|
|||
}
|
||||
}
|
||||
|
||||
private void startOnlinePoiSearch() {
|
||||
SearchSettings settings = searchUICore.getSearchSettings()
|
||||
.setSearchTypes(ObjectType.ONLINE_POI)
|
||||
.setEmptyQueryAllowed(false)
|
||||
.setAddressSearch(false)
|
||||
.setSortByName(true)
|
||||
.setRadiusLevel(1);
|
||||
|
||||
searchUICore.updateSettings(settings);
|
||||
}
|
||||
|
||||
private void startAddressSearch() {
|
||||
SearchSettings settings = searchUICore.getSearchSettings()
|
||||
.setEmptyQueryAllowed(true)
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package net.osmand.plus.search;
|
||||
|
||||
import net.osmand.binary.BinaryMapIndexReader;
|
||||
import net.osmand.data.Amenity;
|
||||
import net.osmand.data.FavouritePoint;
|
||||
import net.osmand.data.LatLon;
|
||||
import net.osmand.plus.FavouritesDbHelper;
|
||||
|
@ -10,6 +11,7 @@ import net.osmand.plus.GpxSelectionHelper;
|
|||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.helpers.SearchHistoryHelper;
|
||||
import net.osmand.plus.poi.NominatimPoiFilter;
|
||||
import net.osmand.plus.poi.PoiFiltersHelper;
|
||||
import net.osmand.plus.poi.PoiUIFilter;
|
||||
import net.osmand.plus.resources.ResourceManager.ResourceListener;
|
||||
|
@ -36,6 +38,7 @@ public class QuickSearchHelper implements ResourceListener {
|
|||
public static final int SEARCH_WPT_OBJECT_PRIORITY = 52;
|
||||
public static final int SEARCH_HISTORY_API_PRIORITY = 50;
|
||||
public static final int SEARCH_HISTORY_OBJECT_PRIORITY = 53;
|
||||
public static final int SEARCH_ONLINE_PRIORITY = 53;
|
||||
private OsmandApplication app;
|
||||
private SearchUICore core;
|
||||
private SearchResultCollection resultCollection;
|
||||
|
@ -78,6 +81,8 @@ public class QuickSearchHelper implements ResourceListener {
|
|||
core.registerAPI(new SearchWptAPI(app));
|
||||
core.registerAPI(new SearchHistoryAPI(app));
|
||||
|
||||
core.registerAPI(new SearchOnlineApi(app));
|
||||
|
||||
refreshCustomPoiFilters();
|
||||
}
|
||||
|
||||
|
@ -266,6 +271,40 @@ public class QuickSearchHelper implements ResourceListener {
|
|||
}
|
||||
}
|
||||
|
||||
public static class SearchOnlineApi extends SearchBaseAPI {
|
||||
|
||||
private NominatimPoiFilter nominatimPoiFilter;
|
||||
private OsmandApplication app;
|
||||
|
||||
public SearchOnlineApi(OsmandApplication app) {
|
||||
super(ObjectType.ONLINE_POI);
|
||||
this.nominatimPoiFilter = app.getPoiFilters().getNominatimPOIFilter();
|
||||
this.app = app;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean search(SearchPhrase phrase, SearchUICore.SearchResultMatcher resultMatcher) throws IOException {
|
||||
List<Amenity> amenities = nominatimPoiFilter.initializeNewSearch(app.getSettings().getLastKnownMapLocation().getLatitude(), app.getSettings().getLastKnownMapLocation().getLongitude(), -1, null);
|
||||
int p = 0;
|
||||
for (Amenity amenity : amenities) {
|
||||
SearchResult sr = new SearchResult(phrase);
|
||||
sr.localeName = amenity.getName();
|
||||
sr.object = amenity;
|
||||
sr.priority = SEARCH_HISTORY_OBJECT_PRIORITY + (p++);
|
||||
sr.objectType = ObjectType.RECENT_OBJ;
|
||||
sr.location = amenity.getLocation();
|
||||
sr.preferredZoom = 17;
|
||||
if (phrase.getUnknownSearchWordLength() <= 1 && phrase.isNoSelectedType()) {
|
||||
resultMatcher.publish(sr);
|
||||
} else if (phrase.getNameStringMatcher().matches(sr.localeName)) {
|
||||
resultMatcher.publish(sr);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static class SearchHistoryAPI extends SearchBaseAPI {
|
||||
|
||||
private OsmandApplication app;
|
||||
|
|
Loading…
Reference in a new issue