Merge remote-tracking branch 'origin/master'

This commit is contained in:
Weblate 2017-11-27 22:21:50 +01:00
commit d720fab63f
7 changed files with 70 additions and 30 deletions

View file

@ -148,6 +148,9 @@ public class GeneralRouter implements VehicleRouter {
return profile; return profile;
} }
public boolean getHeightObstacles() {
return heightObstacles;
}
public Map<String, RoutingParameter> getParameters() { public Map<String, RoutingParameter> getParameters() {
return parameters; return parameters;

View file

@ -25,6 +25,7 @@ import net.osmand.osm.MapRenderingTypes;
import net.osmand.router.BinaryRoutePlanner.FinalRouteSegment; import net.osmand.router.BinaryRoutePlanner.FinalRouteSegment;
import net.osmand.router.BinaryRoutePlanner.RouteSegment; import net.osmand.router.BinaryRoutePlanner.RouteSegment;
import net.osmand.router.RoutePlannerFrontEnd.RouteCalculationMode; import net.osmand.router.RoutePlannerFrontEnd.RouteCalculationMode;
import net.osmand.router.GeneralRouter.GeneralRouterProfile;
import net.osmand.util.Algorithms; import net.osmand.util.Algorithms;
import net.osmand.util.MapUtils; import net.osmand.util.MapUtils;
@ -108,6 +109,9 @@ public class RouteResultPreparation {
} }
private void calculateTimeSpeed(RoutingContext ctx, List<RouteSegmentResult> result) throws IOException { private void calculateTimeSpeed(RoutingContext ctx, List<RouteSegmentResult> result) throws IOException {
//for Naismith
boolean usePedestrianHeight = ((((GeneralRouter) ctx.getRouter()).getProfile() == GeneralRouterProfile.PEDESTRIAN) && ((GeneralRouter) ctx.getRouter()).getHeightObstacles());
for (int i = 0; i < result.size(); i++) { for (int i = 0; i < result.size(); i++) {
RouteSegmentResult rr = result.get(i); RouteSegmentResult rr = result.get(i);
RouteDataObject road = rr.getObject(); RouteDataObject road = rr.getObject();
@ -125,6 +129,15 @@ public class RouteResultPreparation {
boolean plus = rr.getStartPointIndex() < rr.getEndPointIndex(); boolean plus = rr.getStartPointIndex() < rr.getEndPointIndex();
int next; int next;
double distance = 0; double distance = 0;
//for Naismith
float prevHeight = -99999.0f;
float[] heightDistanceArray = null;
if (usePedestrianHeight) {
road.calculateHeightArray();
heightDistanceArray = road.heightDistanceArray;
}
for (int j = rr.getStartPointIndex(); j != rr.getEndPointIndex(); j = next) { for (int j = rr.getStartPointIndex(); j != rr.getEndPointIndex(); j = next) {
next = plus ? j + 1 : j - 1; next = plus ? j + 1 : j - 1;
double d = measuredDist(road.getPoint31XTile(j), road.getPoint31YTile(j), road.getPoint31XTile(next), double d = measuredDist(road.getPoint31XTile(j), road.getPoint31YTile(j), road.getPoint31XTile(next),
@ -134,9 +147,24 @@ public class RouteResultPreparation {
if (obstacle < 0) { if (obstacle < 0) {
obstacle = 0; obstacle = 0;
} }
distOnRoadToPass += d / speed + obstacle; distOnRoadToPass += d / speed + obstacle; //this is time in seconds
//for Naismith
if (usePedestrianHeight) {
int heightIndex = 2 * j + 1;
if (heightDistanceArray != null && heightIndex < heightDistanceArray.length) {
float height = heightDistanceArray[heightIndex];
if (prevHeight != -99999.0f) {
float heightDiff = height - prevHeight;
if (heightDiff > 0) { //ascent only
distOnRoadToPass += heightDiff * 6.0f; //Naismith's rule: add 1 hour per every 600m of ascent
} }
}
prevHeight = height;
}
}
}
// last point turn time can be added // last point turn time can be added
// if(i + 1 < result.size()) { distOnRoadToPass += ctx.getRouter().calculateTurnTime(); } // if(i + 1 < result.size()) { distOnRoadToPass += ctx.getRouter().calculateTurnTime(); }
rr.setSegmentTime((float) distOnRoadToPass); rr.setSegmentTime((float) distOnRoadToPass);

View file

@ -47,6 +47,7 @@
osmand:typeface="@string/font_roboto_medium"/> osmand:typeface="@string/font_roboto_medium"/>
<net.osmand.plus.widgets.TextViewEx <net.osmand.plus.widgets.TextViewEx
android:id="@+id/empty_search_description"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginTop="4dp" android:layout_marginTop="4dp"

View file

@ -9,6 +9,7 @@
3. All your modified/created strings are in the top of the file (to make easier find what\'s translated). 3. All your modified/created strings are in the top of the file (to make easier find what\'s translated).
PLEASE: Have a look at http://code.google.com/p/osmand/wiki/UIConsistency, it may really improve your and our work :-) Thx - Hardy PLEASE: Have a look at http://code.google.com/p/osmand/wiki/UIConsistency, it may really improve your and our work :-) Thx - Hardy
--> -->
<string name="modify_the_search_query">Modify the search query.</string>
<string name="empty_state_osm_edits">Create or modify OSM objects</string> <string name="empty_state_osm_edits">Create or modify OSM objects</string>
<string name="empty_state_osm_edits_descr">Create or modify OSM POI, open or comment OSM Notes, and contribute recorded GPX files.</string> <string name="empty_state_osm_edits_descr">Create or modify OSM POI, open or comment OSM Notes, and contribute recorded GPX files.</string>
<string name="shared_string_deleted">Deleted</string> <string name="shared_string_deleted">Deleted</string>

View file

@ -761,7 +761,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
paused = false; paused = false;
hidden = false; hidden = false;
if (interruptedSearch) { if (interruptedSearch) {
addMoreButton(); addMoreButton(true);
interruptedSearch = false; interruptedSearch = false;
} }
} }
@ -1066,9 +1066,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
} }
if (getResultCollection() != null) { if (getResultCollection() != null) {
updateSearchResult(getResultCollection(), false); updateSearchResult(getResultCollection(), false);
if (interruptedSearch || searchUICore.isSearchMoreAvailable(searchUICore.getPhrase())) { addMoreButton(searchUICore.isSearchMoreAvailable(searchUICore.getPhrase()));
addMoreButton();
}
} }
break; break;
} }
@ -1537,9 +1535,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
searching = false; searching = false;
if (resultListener == null || resultListener.searchFinished(object.requiredSearchPhrase)) { if (resultListener == null || resultListener.searchFinished(object.requiredSearchPhrase)) {
hideProgressBar(); hideProgressBar();
if (searchUICore.isSearchMoreAvailable(object.requiredSearchPhrase)) { addMoreButton(searchUICore.isSearchMoreAvailable(object.requiredSearchPhrase));
addMoreButton();
}
} }
} }
}); });
@ -1741,7 +1737,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
} }
} }
private void addMoreButton() { private void addMoreButton(boolean searchMoreAvailable) {
if (!paused && !cancelPrev && mainSearchFragment != null && !isTextEmpty()) { if (!paused && !cancelPrev && mainSearchFragment != null && !isTextEmpty()) {
QuickSearchMoreListItem moreListItem = QuickSearchMoreListItem moreListItem =
new QuickSearchMoreListItem(app, null, new SearchMoreItemOnClickListener() { new QuickSearchMoreListItem(app, null, new SearchMoreItemOnClickListener() {
@ -1765,6 +1761,7 @@ public class QuickSearchDialogFragment extends DialogFragment implements OsmAndC
moreListItem.setInterruptedSearch(interruptedSearch); moreListItem.setInterruptedSearch(interruptedSearch);
moreListItem.setEmptySearch(isResultEmpty()); moreListItem.setEmptySearch(isResultEmpty());
moreListItem.setOnlineSearch(isOnlineSearch()); moreListItem.setOnlineSearch(isOnlineSearch());
moreListItem.setSearchMoreAvailable(searchMoreAvailable);
mainSearchFragment.addListItem(moreListItem); mainSearchFragment.addListItem(moreListItem);
} }
} }

View file

@ -20,16 +20,13 @@ import net.osmand.access.AccessibilityAssistant;
import net.osmand.data.Amenity; import net.osmand.data.Amenity;
import net.osmand.data.LatLon; import net.osmand.data.LatLon;
import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.R; import net.osmand.plus.R;
import net.osmand.plus.dashboard.DashLocationFragment; import net.osmand.plus.dashboard.DashLocationFragment;
import net.osmand.plus.rastermaps.OsmandRasterMapsPlugin;
import net.osmand.plus.search.listitems.QuickSearchHeaderListItem; import net.osmand.plus.search.listitems.QuickSearchHeaderListItem;
import net.osmand.plus.search.listitems.QuickSearchListItem; import net.osmand.plus.search.listitems.QuickSearchListItem;
import net.osmand.plus.search.listitems.QuickSearchListItemType; import net.osmand.plus.search.listitems.QuickSearchListItemType;
import net.osmand.plus.search.listitems.QuickSearchMoreListItem; import net.osmand.plus.search.listitems.QuickSearchMoreListItem;
import net.osmand.plus.search.listitems.QuickSearchSelectAllListItem; import net.osmand.plus.search.listitems.QuickSearchSelectAllListItem;
import net.osmand.search.core.ObjectType;
import net.osmand.search.core.SearchPhrase; import net.osmand.search.core.SearchPhrase;
import net.osmand.util.Algorithms; import net.osmand.util.Algorithms;
import net.osmand.util.OpeningHoursParser; import net.osmand.util.OpeningHoursParser;
@ -215,10 +212,8 @@ public class QuickSearchListAdapter extends ArrayAdapter<QuickSearchListItem> {
LinearLayout view; LinearLayout view;
if (type == QuickSearchListItemType.SEARCH_MORE) { if (type == QuickSearchListItemType.SEARCH_MORE) {
if (convertView == null) { if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) app LayoutInflater inflater = (LayoutInflater) app.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
.getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = (LinearLayout) inflater.inflate(R.layout.search_more_list_item, null);
view = (LinearLayout) inflater.inflate(
R.layout.search_more_list_item, null);
} else { } else {
view = (LinearLayout) convertView; view = (LinearLayout) convertView;
} }
@ -228,26 +223,32 @@ public class QuickSearchListAdapter extends ArrayAdapter<QuickSearchListItem> {
} else { } else {
((TextView) view.findViewById(R.id.title)).setText(listItem.getName()); ((TextView) view.findViewById(R.id.title)).setText(listItem.getName());
} }
QuickSearchMoreListItem searchMoreListItem = (QuickSearchMoreListItem) listItem;
if (searchMoreListItem.isEmptySearch() && !searchMoreListItem.isInterruptedSearch()) { final QuickSearchMoreListItem searchMoreItem = (QuickSearchMoreListItem) listItem;
view.findViewById(R.id.empty_search).setVisibility(View.VISIBLE); int emptyDescId = searchMoreItem.isSearchMoreAvailable() ? R.string.nothing_found_descr : R.string.modify_the_search_query;
view.findViewById(R.id.more_divider).setVisibility(View.VISIBLE); ((TextView) view.findViewById(R.id.empty_search_description)).setText(emptyDescId);
} else {
view.findViewById(R.id.empty_search).setVisibility(View.GONE); boolean emptySearchVisible = searchMoreItem.isEmptySearch() && !searchMoreItem.isInterruptedSearch();
view.findViewById(R.id.more_divider).setVisibility(View.GONE); boolean moreDividerVisible = emptySearchVisible && searchMoreItem.isSearchMoreAvailable();
} view.findViewById(R.id.empty_search).setVisibility(emptySearchVisible ? View.VISIBLE : View.GONE);
view.findViewById(R.id.increase_radius_row).setOnClickListener(new View.OnClickListener() { view.findViewById(R.id.more_divider).setVisibility(moreDividerVisible ? View.VISIBLE : View.GONE);
View increaseRadiusRow = view.findViewById(R.id.increase_radius_row);
increaseRadiusRow.setVisibility(searchMoreItem.isSearchMoreAvailable() ? View.VISIBLE : View.GONE);
increaseRadiusRow.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View view) { public void onClick(View view) {
((QuickSearchMoreListItem) listItem).increaseRadiusOnClick(); ((QuickSearchMoreListItem) listItem).increaseRadiusOnClick();
} }
}); });
if (!searchMoreListItem.isOnlineSearch()) {
view.findViewById(R.id.online_search_row).setVisibility(View.VISIBLE); if (!searchMoreItem.isOnlineSearch()) {
view.findViewById(R.id.online_search_row).setOnClickListener(new View.OnClickListener() { View onlineSearchRow = view.findViewById(R.id.online_search_row);
onlineSearchRow.setVisibility(View.VISIBLE);
onlineSearchRow.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View view) { public void onClick(View view) {
((QuickSearchMoreListItem) listItem).onlineSearchOnClick(); searchMoreItem.onlineSearchOnClick();
} }
}); });
} }

View file

@ -11,6 +11,7 @@ public class QuickSearchMoreListItem extends QuickSearchListItem {
private SearchMoreItemOnClickListener onClickListener; private SearchMoreItemOnClickListener onClickListener;
private boolean emptySearch; private boolean emptySearch;
private boolean onlineSearch; private boolean onlineSearch;
private boolean searchMoreAvailable;
private boolean interruptedSearch; private boolean interruptedSearch;
private String findMore; private String findMore;
private String restartSearch; private String restartSearch;
@ -68,6 +69,14 @@ public class QuickSearchMoreListItem extends QuickSearchListItem {
this.onlineSearch = onlineSearch; this.onlineSearch = onlineSearch;
} }
public boolean isSearchMoreAvailable() {
return searchMoreAvailable;
}
public void setSearchMoreAvailable(boolean searchMoreAvailable) {
this.searchMoreAvailable = searchMoreAvailable;
}
public void increaseRadiusOnClick() { public void increaseRadiusOnClick() {
if (onClickListener != null) { if (onClickListener != null) {
onClickListener.increaseRadiusOnClick(); onClickListener.increaseRadiusOnClick();