From fd49c5c6885114457f811aa31e2085f4910de728 Mon Sep 17 00:00:00 2001 From: Alexey Kulish Date: Mon, 17 Apr 2017 17:50:11 +0300 Subject: [PATCH] Fix address selection in route preparation --- OsmAnd/res/values-nl/strings.xml | 4 +- .../QuickSearchCoordinatesFragment.java | 6 +-- .../search/QuickSearchDialogFragment.java | 35 +++++++++--- .../plus/search/QuickSearchListFragment.java | 53 ++++++++++++------- 4 files changed, 66 insertions(+), 32 deletions(-) diff --git a/OsmAnd/res/values-nl/strings.xml b/OsmAnd/res/values-nl/strings.xml index 3697146b10..fbe37ea261 100644 --- a/OsmAnd/res/values-nl/strings.xml +++ b/OsmAnd/res/values-nl/strings.xml @@ -2393,11 +2393,11 @@ Lengtegraad:\t\t%2$s Je kan gedownloade updates verwijderen en terugkeren naar de originele kaart Periode toevoegen Weg geblokkeerd - Blokkeer... + Selekteer Verslag voor: Gegevens niet beschikbaar Ondergrondse objecten - Lees meer... + Lees meer Status Wijzigingen opslaan E-mailadres diff --git a/OsmAnd/src/net/osmand/plus/search/QuickSearchCoordinatesFragment.java b/OsmAnd/src/net/osmand/plus/search/QuickSearchCoordinatesFragment.java index 39237c1a64..a43d4bf9dd 100644 --- a/OsmAnd/src/net/osmand/plus/search/QuickSearchCoordinatesFragment.java +++ b/OsmAnd/src/net/osmand/plus/search/QuickSearchCoordinatesFragment.java @@ -401,10 +401,10 @@ public class QuickSearchCoordinatesFragment extends DialogFragment implements Os PointDescription pointDescription = new PointDescription(currentLatLon.getLatitude(), currentLatLon.getLongitude()); - getMyApplication().getSettings().setMapLocationToShow( + + QuickSearchListFragment.showOnMap(getMapActivity(), dialogFragment, currentLatLon.getLatitude(), currentLatLon.getLongitude(), - 15, pointDescription, true, currentLatLon); - MapActivity.launchMapActivityMoveToTop(getActivity()); + 15, pointDescription, currentLatLon); dismiss(); } diff --git a/OsmAnd/src/net/osmand/plus/search/QuickSearchDialogFragment.java b/OsmAnd/src/net/osmand/plus/search/QuickSearchDialogFragment.java index a169bbb1a4..b5753dfae3 100644 --- a/OsmAnd/src/net/osmand/plus/search/QuickSearchDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/search/QuickSearchDialogFragment.java @@ -170,6 +170,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC private boolean newSearch; private boolean interruptedSearch; private long hideTimeMs; + private boolean expired; private boolean poiFilterApplied; private boolean fabVisible; private boolean runSearchFirstTime; @@ -352,7 +353,12 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC } else { SearchWord word = searchPhrase.getLastSelectedWord(); if (word != null) { - if (word.getLocation() != null) { + if ((searchType == QuickSearchType.START_POINT || searchType == QuickSearchType.DESTINATION) + && word.getLocation() != null) { + if (mainSearchFragment != null) { + mainSearchFragment.showResult(word.getResult()); + } + } else if (word.getLocation() != null) { SearchResult searchResult = word.getResult(); String name = QuickSearchListItem.getName(app, searchResult); String typeName = QuickSearchListItem.getTypeName(app, searchResult); @@ -732,7 +738,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC } public boolean isExpired() { - return hideTimeMs > 0 && System.currentTimeMillis() - hideTimeMs > EXPIRATION_TIME_MIN * 60 * 1000; + return expired || (hideTimeMs > 0 && System.currentTimeMillis() - hideTimeMs > EXPIRATION_TIME_MIN * 60 * 1000); } public void show() { @@ -757,6 +763,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC public void hide() { paused = true; hidden = true; + expired = searchType != QuickSearchType.REGULAR; hideTimeMs = System.currentTimeMillis(); interruptedSearch = searching; searching = false; @@ -784,10 +791,18 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC if (foundPartialLocation) { buttonToolbarText.setText(app.getString(R.string.advanced_coords_search).toUpperCase()); } else if (searchEditText.getText().length() > 0) { - if (word != null && word.getResult() != null) { - buttonToolbarText.setText(app.getString(R.string.show_something_on_map, word.getResult().localeName).toUpperCase()); + if (searchType == QuickSearchType.START_POINT || searchType == QuickSearchType.DESTINATION) { + if (word != null && word.getResult() != null) { + buttonToolbarText.setText(app.getString(R.string.shared_string_select).toUpperCase() + " " + word.getResult().localeName.toUpperCase()); + } else { + buttonToolbarText.setText(app.getString(R.string.shared_string_select).toUpperCase()); + } } else { - buttonToolbarText.setText(app.getString(R.string.shared_string_show_on_map).toUpperCase()); + if (word != null && word.getResult() != null) { + buttonToolbarText.setText(app.getString(R.string.show_something_on_map, word.getResult().localeName).toUpperCase()); + } else { + buttonToolbarText.setText(app.getString(R.string.shared_string_show_on_map).toUpperCase()); + } } } else { buttonToolbarText.setText(app.getString(R.string.shared_string_show_on_map).toUpperCase()); @@ -891,6 +906,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC if (!useMapCenter) { startLocationUpdate(); } + expired = false; paused = false; } @@ -986,7 +1002,8 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC searchView.setVisibility(View.GONE); } else if (!show && tabsView.getVisibility() == View.VISIBLE) { tabToolbarView.setVisibility(View.GONE); - buttonToolbarView.setVisibility(searchUICore.getSearchSettings().isCustomSearch() ? View.GONE : View.VISIBLE); + buttonToolbarView.setVisibility(searchUICore.getSearchSettings().isCustomSearch() + ? View.GONE : View.VISIBLE); tabsView.setVisibility(View.GONE); searchView.setVisibility(View.VISIBLE); } @@ -1647,7 +1664,11 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC searchQuery = txt; searchEditText.setText(txt); searchEditText.setSelection(txt.length()); - buttonToolbarView.setVisibility(View.VISIBLE); + SearchWord lastWord = searchUICore.getPhrase().getLastSelectedWord(); + boolean buttonToolbarVisible = lastWord == null || searchType == QuickSearchType.REGULAR || + ((searchType == QuickSearchType.START_POINT || searchType == QuickSearchType.DESTINATION) + && ObjectType.isAddress(lastWord.getType())); + buttonToolbarView.setVisibility(buttonToolbarVisible ? View.VISIBLE : View.GONE); updateToolbarButton(); SearchSettings settings = searchUICore.getSearchSettings(); if (settings.getRadiusLevel() != 1) { diff --git a/OsmAnd/src/net/osmand/plus/search/QuickSearchListFragment.java b/OsmAnd/src/net/osmand/plus/search/QuickSearchListFragment.java index 7721f88a24..88daa4f9aa 100644 --- a/OsmAnd/src/net/osmand/plus/search/QuickSearchListFragment.java +++ b/OsmAnd/src/net/osmand/plus/search/QuickSearchListFragment.java @@ -29,6 +29,7 @@ import net.osmand.plus.activities.MapActivity; import net.osmand.plus.base.OsmAndListFragment; import net.osmand.plus.dashboard.DashLocationFragment; import net.osmand.plus.helpers.SearchHistoryHelper.HistoryEntry; +import net.osmand.plus.search.QuickSearchDialogFragment.QuickSearchType; import net.osmand.plus.search.listitems.QuickSearchBottomShadowListItem; import net.osmand.plus.search.listitems.QuickSearchButtonListItem; import net.osmand.plus.search.listitems.QuickSearchListItem; @@ -165,7 +166,7 @@ public abstract class QuickSearchListFragment extends OsmAndListFragment { dialogFragment.onSearchListFragmentResume(this); } - private void showResult(SearchResult searchResult) { + public void showResult(SearchResult searchResult) { if (searchResult.location != null) { OsmandApplication app = getMyApplication(); String lang = searchResult.requiredSearchPhrase.getSettings().getLang(); @@ -207,6 +208,18 @@ public abstract class QuickSearchListFragment extends OsmAndListFragment { FavouritePoint fav = (FavouritePoint) object; pointDescription = fav.getPointDescription(); break; + case CITY: + String cityName = searchResult.localeName; + String typeNameCity = QuickSearchListItem.getTypeName(app, searchResult); + pointDescription = new PointDescription(PointDescription.POINT_TYPE_ADDRESS, typeNameCity, cityName); + pointDescription.setIconName("ic_action_building_number"); + break; + case STREET: + String streetName = searchResult.localeName; + String typeNameStreet = QuickSearchListItem.getTypeName(app, searchResult); + pointDescription = new PointDescription(PointDescription.POINT_TYPE_ADDRESS, typeNameStreet, streetName); + pointDescription.setIconName("ic_action_street_name"); + break; case HOUSE: String typeNameHouse = null; String name = searchResult.localeName; @@ -245,34 +258,34 @@ public abstract class QuickSearchListFragment extends OsmAndListFragment { dialogFragment.hideToolbar(); dialogFragment.hide(); + showOnMap(getMapActivity(), dialogFragment, + searchResult.location.getLatitude(), searchResult.location.getLongitude(), + searchResult.preferredZoom, pointDescription, object); + } + } + + public static void showOnMap(MapActivity mapActivity, QuickSearchDialogFragment dialogFragment, + double latitude, double longitude, int zoom, + PointDescription pointDescription, Object object) { + if (mapActivity != null) { + OsmandApplication app = mapActivity.getMyApplication(); switch (dialogFragment.getSearchType()) { case REGULAR: { - getMyApplication().getSettings().setMapLocationToShow( - searchResult.location.getLatitude(), searchResult.location.getLongitude(), - searchResult.preferredZoom, pointDescription, true, object); - - MapActivity.launchMapActivityMoveToTop(getActivity()); + app.getSettings().setMapLocationToShow(latitude, longitude, zoom, pointDescription, true, object); + MapActivity.launchMapActivityMoveToTop(mapActivity); dialogFragment.reloadHistory(); break; } case START_POINT: { - MapActivity mapActivity = getMapActivity(); - if (mapActivity != null) { - mapActivity.getMapLayers().getMapControlsLayer().selectAddress( - pointDescription != null ? pointDescription.getName() : null, - searchResult.location.getLatitude(), searchResult.location.getLongitude(), - false); - } + mapActivity.getMapLayers().getMapControlsLayer().selectAddress( + pointDescription != null ? pointDescription.getName() : null, + latitude, longitude, false); break; } case DESTINATION: { - MapActivity mapActivity = getMapActivity(); - if (mapActivity != null) { - mapActivity.getMapLayers().getMapControlsLayer().selectAddress( - pointDescription != null ? pointDescription.getName() : null, - searchResult.location.getLatitude(), searchResult.location.getLongitude(), - true); - } + mapActivity.getMapLayers().getMapControlsLayer().selectAddress( + pointDescription != null ? pointDescription.getName() : null, + latitude, longitude, true); break; } }