Skip to content

Commit

Permalink
Merge branch 'osmandapp:master' into hardy_Afa
Browse files Browse the repository at this point in the history
  • Loading branch information
sonora authored Jul 1, 2024
2 parents 6d598a3 + 4c2af01 commit c212bf3
Show file tree
Hide file tree
Showing 180 changed files with 1,702 additions and 1,566 deletions.
170 changes: 92 additions & 78 deletions OsmAnd-java/src/main/java/net/osmand/data/Amenity.java
Original file line number Diff line number Diff line change
@@ -1,19 +1,29 @@
package net.osmand.data;

import static net.osmand.gpx.GPXUtilities.AMENITY_PREFIX;
import static net.osmand.gpx.GPXUtilities.OSM_PREFIX;

import net.osmand.Location;
import net.osmand.osm.AbstractPoiType;
import net.osmand.osm.MapPoiTypes;
import net.osmand.osm.PoiCategory;
import net.osmand.osm.PoiType;
import net.osmand.search.SearchUICore;
import net.osmand.util.Algorithms;

import org.json.JSONObject;

import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeSet;

import gnu.trove.list.array.TIntArrayList;

Expand Down Expand Up @@ -56,9 +66,8 @@ public class Amenity extends MapObject {
public static final String NAME = "name";
public static final String SEPARATOR = ";";
public static final String ALT_NAME_WITH_LANG_PREFIX = "alt_name:";
private static final String COLLAPSABLE_PREFIX = "collapsable_";
public static final String AMENITY_PREFIX = "amenity_";
private static final List<String> HIDING_EXTENSIONS_AMENITY_TAGS = Arrays.asList(PHONE, WEBSITE);
public static final String COLLAPSABLE_PREFIX = "collapsable_";
public static final List<String> HIDING_EXTENSIONS_AMENITY_TAGS = Arrays.asList(PHONE, WEBSITE);

private String subType;
private PoiCategory type;
Expand Down Expand Up @@ -158,60 +167,6 @@ private Map<String, String> getInternalAdditionalInfoMap() {
return additionalInfo;
}

public Map<String, String> getAdditionalInfoAndCollectCategories(
MapPoiTypes poiTypes,
List<String> hiddenAdditional,
Map<String, List<PoiType>> collectedPoiAdditionalCategories,
String[] alternateName) {
Map<String, String> result = new HashMap<>();
for (Entry<String, String> entry : getInternalAdditionalInfoMap().entrySet()) {
String key = entry.getKey();
String value = entry.getValue();

//collect tags with categories and skip
AbstractPoiType pt = poiTypes.getAnyPoiAdditionalTypeByKey(key);
if (pt == null && !isContentZipped(value)) {
pt = poiTypes.getAnyPoiAdditionalTypeByKey(key + "_" + value);
}
PoiType pType = null;
if (pt != null) {
pType = (PoiType) pt;
if (pType.isFilterOnly()) {
continue;
}
}
if (pType != null && !pType.isText()) {
if (collectedPoiAdditionalCategories != null) {
String categoryName = pType.getPoiAdditionalCategory();
if (!Algorithms.isEmpty(categoryName)) {
List<PoiType> poiAdditionalCategoryTypes = collectedPoiAdditionalCategories.get(categoryName);
if (poiAdditionalCategoryTypes == null) {
poiAdditionalCategoryTypes = new ArrayList<>();
collectedPoiAdditionalCategories.put(categoryName, poiAdditionalCategoryTypes);
}
poiAdditionalCategoryTypes.add(pType);
continue;
}
} else {
if (value.equals(alternateName[0])) {
alternateName[0] = pType.getTranslation();
return null;
}
}
}

//save all other values to separate lines
if (key.endsWith(OPENING_HOURS)) {
continue;
}
if (!Algorithms.isEmpty(hiddenAdditional) && !hiddenAdditional.contains(key)) {
key = OSM_PREFIX + key;
}
result.put(key, value);
}
return result;
}

public Collection<String> getAdditionalInfoValues(boolean excludeZipped) {
if (additionalInfo == null) {
return Collections.emptyList();
Expand Down Expand Up @@ -422,8 +377,9 @@ public List<String> getNames(String tag, String defTag) {
}
return l;
}

public Map<String, String> getAltNamesMap() {
Map<String, String> names = new HashMap<>();
Map<String, String> names = new HashMap<>();
for (String nm : getAdditionalInfoKeys()) {
String name = additionalInfo.get(nm);
if (nm.startsWith(ALT_NAME_WITH_LANG_PREFIX)) {
Expand Down Expand Up @@ -615,35 +571,33 @@ public static Amenity parseJSON(JSONObject json) {
}
return a;
}

public Map<String, String> getAmenityExtensions() {
return getAmenityExtensions(MapPoiTypes.getDefault(), true);
}

public Map<String, String> getAmenityExtensions(MapPoiTypes mapPoiTypes, boolean addPrefixes) {
Map<String, String> result = new HashMap<>();
Map<String, List<PoiType>> collectedPoiAdditionalCategories = new HashMap<>();

String name = this.name;
Map<String, List<PoiType>> categories = new HashMap<>();

if (name != null) {
result.put(AMENITY_PREFIX + NAME, name);
result.put(addPrefixes ? AMENITY_PREFIX + NAME : NAME, name);
}

if (subType != null) {
result.put(AMENITY_PREFIX + SUBTYPE, subType);
result.put(addPrefixes ? AMENITY_PREFIX + SUBTYPE : SUBTYPE, subType);
}

if (type != null) {
result.put(AMENITY_PREFIX + TYPE, type.getKeyName());
result.put(addPrefixes ? AMENITY_PREFIX + TYPE : TYPE, type.getKeyName());
}

if (openingHours != null) {
result.put(AMENITY_PREFIX + OPENING_HOURS, openingHours);
result.put(addPrefixes ? AMENITY_PREFIX + OPENING_HOURS : OPENING_HOURS, openingHours);
}
if (hasAdditionalInfo()) {
SearchUICore searchUICore = new SearchUICore(MapPoiTypes.getDefault(), "en", false);
result.putAll(getAdditionalInfoAndCollectCategories(searchUICore.getPoiTypes(),
HIDING_EXTENSIONS_AMENITY_TAGS, collectedPoiAdditionalCategories, null));

result.putAll(getAdditionalInfoAndCollectCategories(mapPoiTypes, categories, addPrefixes));

//join collected tags by category into one string
for (Map.Entry<String, List<PoiType>> entry : collectedPoiAdditionalCategories.entrySet()) {
String categoryName = COLLAPSABLE_PREFIX + entry.getKey();
for (Map.Entry<String, List<PoiType>> entry : categories.entrySet()) {
String key = COLLAPSABLE_PREFIX + entry.getKey();
List<PoiType> categoryTypes = entry.getValue();
if (!categoryTypes.isEmpty()) {
StringBuilder builder = new StringBuilder();
Expand All @@ -653,10 +607,70 @@ public Map<String, String> getAmenityExtensions() {
}
builder.append(poiType.getKeyName());
}
result.put(categoryName, builder.toString());
result.put(key, builder.toString());
}
}
}
return result;
}

public Map<String, String> getAdditionalInfoAndCollectCategories(MapPoiTypes mapPoiTypes,
Map<String, List<PoiType>> categories,
boolean addPrefixes) {
Map<String, String> result = new HashMap<>();
for (String key : getAdditionalInfoKeys()) {
String value = getAdditionalInfo(key);
PoiType poiType = getPoiType(mapPoiTypes, key, value);
if (poiType != null && poiType.isFilterOnly()) {
continue;
}
if (poiType != null && !poiType.isText()) {
if (categories != null) {
String category = poiType.getPoiAdditionalCategory();
if (!Algorithms.isEmpty(category)) {
List<PoiType> types = categories.get(category);
if (types == null) {
types = new ArrayList<>();
categories.put(category, types);
}
types.add(poiType);
continue;
}
}
}
//save all other values to separate lines
if (key.endsWith(OPENING_HOURS)) {
continue;
}
if (!HIDING_EXTENSIONS_AMENITY_TAGS.contains(key) && addPrefixes) {
key = OSM_PREFIX + key;
}
result.put(key, value);
}
return result;
}

private PoiType getPoiType(MapPoiTypes mapPoiTypes, String key, String value) {
AbstractPoiType abstractPoiType = mapPoiTypes.getAnyPoiAdditionalTypeByKey(key);
if (abstractPoiType == null && !isContentZipped(value)) {
abstractPoiType = mapPoiTypes.getAnyPoiAdditionalTypeByKey(key + "_" + value);
}
if (abstractPoiType instanceof PoiType) {
return (PoiType) abstractPoiType;
}
return null;
}

public String getTranslation(MapPoiTypes mapPoiTypes, String alternateName) {
for (String key : getAdditionalInfoKeys()) {
String value = getAdditionalInfo(key);
if (value.equals(alternateName)) {
PoiType poiType = getPoiType(mapPoiTypes, key, value);
if (poiType != null && !poiType.isText()) {
return poiType.getTranslation();
}
}
}
return alternateName;
}
}
13 changes: 13 additions & 0 deletions OsmAnd-java/src/main/java/net/osmand/gpx/GPXFile.java
Original file line number Diff line number Diff line change
Expand Up @@ -650,6 +650,19 @@ public Map<String, GPXUtilities.PointsGroup> getPointsGroups() {
return pointsGroups;
}

public List<Route> getRoutes() {
return routes;
}

public Route getRouteByName(String name) {
for (Route route : getRoutes()) {
if (Algorithms.stringsEqual(route.name, name)) {
return route;
}
}
return null;
}

public QuadRect getRect() {
return getBounds(0, 0);
}
Expand Down
4 changes: 2 additions & 2 deletions OsmAnd-java/src/main/java/net/osmand/osm/AbstractPoiType.java
Original file line number Diff line number Diff line change
Expand Up @@ -75,14 +75,14 @@ public boolean isAdditional() {
}

public String getTranslation() {
if(translation == null) {
if (translation == null) {
translation = registry.getTranslation(this);
}
return translation;
}

public String getSynonyms() {
if(synonyms == null) {
if (synonyms == null) {
synonyms = registry.getSynonyms(this);
}
return synonyms;
Expand Down
30 changes: 29 additions & 1 deletion OsmAnd/assets/bundled_assets.xml
Original file line number Diff line number Diff line change
Expand Up @@ -121,15 +121,43 @@


<!-- Color palettes -->
<!-- Terrain -->
<asset source="color-palette/hillshade_color_default.txt" destination="color-palette/hillshade_color_default.txt" mode="copyOnlyIfDoesNotExist" />
<asset source="color-palette/hillshade_main_default.txt" destination="color-palette/hillshade_main_default.txt" mode="copyOnlyIfDoesNotExist" />
<asset source="color-palette/hillshade_color_hillshade_plains.txt" destination="color-palette/hillshade_color_hillshade_plains.txt" mode="copyOnlyIfDoesNotExist" />
<asset source="color-palette/hillshade_main_hillshade_plains.txt" destination="color-palette/hillshade_main_hillshade_plains.txt" mode="copyOnlyIfDoesNotExist" />

<asset source="color-palette/slope_default.txt" destination="color-palette/slope_default.txt" mode="copyOnlyIfDoesNotExist" />
<asset source="color-palette/height_altitude_default.txt" destination="color-palette/height_altitude_default.txt" mode="copyOnlyIfDoesNotExist" />
<asset source="color-palette/slope_avalanche.txt" destination="color-palette/slope_avalanche.txt" mode="copyOnlyIfDoesNotExist" />
<asset source="color-palette/slope_slope_plains.txt" destination="color-palette/slope_slope_plains.txt" mode="copyOnlyIfDoesNotExist" />

<asset source="color-palette/height_altitude_default.txt" destination="color-palette/height_altitude_default.txt" mode="copyOnlyIfDoesNotExist" />
<asset source="color-palette/height_altitude_-50_150.txt" destination="color-palette/height_altitude_-50_150.txt" mode="copyOnlyIfDoesNotExist" />
<asset source="color-palette/height_altitude_-50_2000.txt" destination="color-palette/height_altitude_-50_2000.txt" mode="copyOnlyIfDoesNotExist" />
<asset source="color-palette/height_altitude_0_200.txt" destination="color-palette/height_altitude_0_200.txt" mode="copyOnlyIfDoesNotExist" />
<asset source="color-palette/height_altitude_0_500.txt" destination="color-palette/height_altitude_0_500.txt" mode="copyOnlyIfDoesNotExist" />
<asset source="color-palette/height_altitude_0_1000.txt" destination="color-palette/height_altitude_0_1000.txt" mode="copyOnlyIfDoesNotExist" />
<asset source="color-palette/height_altitude_0_2000.txt" destination="color-palette/height_altitude_0_2000.txt" mode="copyOnlyIfDoesNotExist" />
<asset source="color-palette/height_altitude_0_3000.txt" destination="color-palette/height_altitude_0_3000.txt" mode="copyOnlyIfDoesNotExist" />
<asset source="color-palette/height_altitude_0_4000.txt" destination="color-palette/height_altitude_0_4000.txt" mode="copyOnlyIfDoesNotExist" />
<asset source="color-palette/height_altitude_100_300.txt" destination="color-palette/height_altitude_100_300.txt" mode="copyOnlyIfDoesNotExist" />
<asset source="color-palette/height_altitude_100_500.txt" destination="color-palette/height_altitude_100_500.txt" mode="copyOnlyIfDoesNotExist" />
<asset source="color-palette/height_altitude_300_1000.txt" destination="color-palette/height_altitude_300_1000.txt" mode="copyOnlyIfDoesNotExist" />
<asset source="color-palette/height_altitude_500_1500.txt" destination="color-palette/height_altitude_500_1500.txt" mode="copyOnlyIfDoesNotExist" />
<asset source="color-palette/height_altitude_500_2500.txt" destination="color-palette/height_altitude_500_2500.txt" mode="copyOnlyIfDoesNotExist" />
<asset source="color-palette/height_altitude_1000_3000.txt" destination="color-palette/height_altitude_1000_3000.txt" mode="copyOnlyIfDoesNotExist" />
<asset source="color-palette/height_altitude_1000_4000.txt" destination="color-palette/height_altitude_1000_4000.txt" mode="copyOnlyIfDoesNotExist" />
<asset source="color-palette/height_altitude_2000_4000.txt" destination="color-palette/height_altitude_2000_4000.txt" mode="copyOnlyIfDoesNotExist" />
<asset source="color-palette/height_altitude_4000_6500.txt" destination="color-palette/height_altitude_4000_6500.txt" mode="copyOnlyIfDoesNotExist" />

<!-- Weather -->
<asset source="color-palette/weather_cloud.txt" destination="color-palette/weather_cloud.txt" mode="copyOnlyIfDoesNotExist" />
<asset source="color-palette/weather_precip.txt" destination="color-palette/weather_precip.txt" mode="copyOnlyIfDoesNotExist" />
<asset source="color-palette/weather_pressure.txt" destination="color-palette/weather_pressure.txt" mode="copyOnlyIfDoesNotExist" />
<asset source="color-palette/weather_temperature.txt" destination="color-palette/weather_temperature.txt" mode="copyOnlyIfDoesNotExist" />
<asset source="color-palette/weather_wind.txt" destination="color-palette/weather_wind.txt" mode="copyOnlyIfDoesNotExist" />

<!-- Route -->
<asset source="color-palette/route_elevation_default.txt" destination="color-palette/route_elevation_default.txt" mode="copyOnlyIfDoesNotExist" />
<asset source="color-palette/route_slope_default.txt" destination="color-palette/route_slope_default.txt" mode="copyOnlyIfDoesNotExist" />
<asset source="color-palette/route_speed_default.txt" destination="color-palette/route_speed_default.txt" mode="copyOnlyIfDoesNotExist" />
Expand Down
23 changes: 23 additions & 0 deletions OsmAnd/res/drawable/ic_action_location_radius.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M12,20C16.4183,20 20,16.4183 20,12C20,7.5817 16.4183,4 12,4C7.5817,4 4,7.5817 4,12C4,16.4183 7.5817,20 12,20ZM12,22C17.5228,22 22,17.5228 22,12C22,6.4771 17.5228,2 12,2C6.4771,2 2,6.4771 2,12C2,17.5228 6.4771,22 12,22Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
<path
android:pathData="M12,12m-10,0a10,10 0,1 1,20 0a10,10 0,1 1,-20 0"
android:strokeAlpha="0.2"
android:fillColor="#ffffff"
android:fillAlpha="0.2"/>
<path
android:pathData="M16.1654,17H16.1767C16.6314,17 17,16.6314 17,16.1767C17,16.0602 16.9753,15.9451 16.9275,15.8389L12.7052,6.456C12.5803,6.1785 12.3043,6 12,6V15.35L15.8471,16.9369C15.9481,16.9786 16.0562,17 16.1654,17Z"
android:strokeAlpha="0.8"
android:fillColor="#ffffff"
android:fillAlpha="0.8"/>
<path
android:pathData="M7.8346,17H7.8233C7.3686,17 7,16.6314 7,16.1767C7,16.0602 7.0247,15.9451 7.0725,15.8389L11.2948,6.456C11.4197,6.1785 11.6957,6 12,6V15.35L8.1529,16.9369C8.0519,16.9786 7.9438,17 7.8346,17Z"
android:fillColor="#ffffff"/>
</vector>
19 changes: 19 additions & 0 deletions OsmAnd/res/drawable/ic_action_location_view_angle.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M14.73,11.9555L19.8908,5.8563C18.0609,3.5093 15.2067,2 12,2C8.7934,2 5.9392,3.5093 4.1093,5.8563L9.27,11.9555L11.2948,7.456C11.4197,7.1785 11.6957,7 12,7C12.3043,7 12.5803,7.1785 12.7052,7.456L14.73,11.9555Z"
android:strokeAlpha="0.5"
android:fillColor="#ffffff"
android:fillAlpha="0.5"/>
<path
android:pathData="M16.1654,18H16.1767C16.6314,18 17,17.6314 17,17.1767C17,17.0602 16.9753,16.9451 16.9275,16.8389L12.7052,7.456C12.5803,7.1785 12.3043,7 12,7V16.35L15.8471,17.9369C15.9481,17.9786 16.0562,18 16.1654,18Z"
android:strokeAlpha="0.8"
android:fillColor="#ffffff"
android:fillAlpha="0.8"/>
<path
android:pathData="M7.8346,18H7.8233C7.3686,18 7,17.6314 7,17.1767C7,17.0602 7.0247,16.9451 7.0725,16.8389L11.2948,7.456C11.4197,7.1785 11.6957,7 12,7V16.35L8.1529,17.9369C8.0519,17.9786 7.9438,18 7.8346,18Z"
android:fillColor="#ffffff"/>
</vector>
Loading

0 comments on commit c212bf3

Please sign in to comment.