diff --git a/OsmAnd/src/net/osmand/plus/MapMarkersHelper.java b/OsmAnd/src/net/osmand/plus/MapMarkersHelper.java index 3ab19cec9a..b0307291f5 100644 --- a/OsmAnd/src/net/osmand/plus/MapMarkersHelper.java +++ b/OsmAnd/src/net/osmand/plus/MapMarkersHelper.java @@ -15,6 +15,7 @@ import net.osmand.data.PointDescription; import net.osmand.plus.FavouritesDbHelper.FavoriteGroup; import net.osmand.plus.GPXUtilities.GPXFile; import net.osmand.plus.GPXUtilities.WptPt; +import net.osmand.plus.GeocodingLookupService.AddressLookupRequest; import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile; import net.osmand.plus.mapmarkers.MapMarkersDbHelper; import net.osmand.plus.mapmarkers.MarkersPlanRouteContext; @@ -99,7 +100,7 @@ public class MapMarkersHelper { markersDbHelper = ctx.getMapMarkersDbHelper(); planRouteContext = new MarkersPlanRouteContext(ctx); startFromMyLocation = settings.ROUTE_MAP_MARKERS_START_MY_LOC.get(); - removeDisabledGroups(); + markersDbHelper.removeDisabledGroups(); loadMarkers(); createMapMarkersGroups(); } @@ -108,8 +109,7 @@ public class MapMarkersHelper { mapMarkers = new ArrayList<>(); mapMarkersHistory = new ArrayList<>(); - List activeMarkers = markersDbHelper.getActiveMarkers(); - addToMapMarkersList(activeMarkers); + addToMapMarkersList(markersDbHelper.getActiveMarkers()); reorderActiveMarkersIfNeeded(); List markersHistory = markersDbHelper.getMarkersHistory(); @@ -133,8 +133,8 @@ public class MapMarkersHelper { private void lookupAddress(final MapMarker mapMarker) { if (mapMarker != null && mapMarker.pointDescription.isSearchingAddress(ctx)) { cancelPointAddressRequests(mapMarker.point); - GeocodingLookupService.AddressLookupRequest lookupRequest = - new GeocodingLookupService.AddressLookupRequest(mapMarker.point, new GeocodingLookupService.OnAddressLookupResult() { + AddressLookupRequest lookupRequest = new AddressLookupRequest(mapMarker.point, + new GeocodingLookupService.OnAddressLookupResult() { @Override public void geocodingDone(String address) { if (Algorithms.isEmpty(address)) { @@ -151,13 +151,13 @@ public class MapMarkersHelper { } private void cancelAddressRequests() { - List list = getActiveMarkersLatLon(); - for (LatLon latLon : list) { - cancelPointAddressRequests(latLon); + List markers = new ArrayList<>(mapMarkers); + for (MapMarker m : markers) { + cancelPointAddressRequests(m.point); } - list = getMarkersHistoryLatLon(); - for (LatLon latLon : list) { - cancelPointAddressRequests(latLon); + markers = new ArrayList<>(mapMarkersHistory); + for (MapMarker m : markers) { + cancelPointAddressRequests(m.point); } } @@ -196,8 +196,10 @@ public class MapMarkersHelper { sortMarkers(markers, visited, sortByMode, null); } - private void sortMarkers(List markers, final boolean visited, - final @MapMarkersSortByDef int sortByMode, @Nullable final LatLon location) { + private void sortMarkers(List markers, + final boolean visited, + final @MapMarkersSortByDef int sortByMode, + @Nullable final LatLon location) { Collections.sort(markers, new Comparator() { @Override public int compare(MapMarker mapMarker1, MapMarker mapMarker2) { @@ -254,15 +256,17 @@ public class MapMarkersHelper { syncGroupAsync(group, true, null); } - public void syncGroupAsync(@NonNull MarkersSyncGroup group, @Nullable OnGroupSyncedListener groupSyncedListener) { - syncGroupAsync(group, true, groupSyncedListener); + public void syncGroupAsync(@NonNull MarkersSyncGroup group, @Nullable OnGroupSyncedListener listener) { + syncGroupAsync(group, true, listener); } - public void syncGroupAsync(@NonNull final MarkersSyncGroup group, final boolean enabled, @Nullable final OnGroupSyncedListener groupSyncedListener) { + public void syncGroupAsync(@NonNull final MarkersSyncGroup group, + final boolean enabled, + @Nullable final OnGroupSyncedListener listener) { ctx.runInUIThread(new Runnable() { @Override public void run() { - SyncGroupTask syncGroupTask = new SyncGroupTask(group, enabled, groupSyncedListener); + SyncGroupTask syncGroupTask = new SyncGroupTask(group, enabled, listener); syncGroupTask.executeOnExecutor(executorService); } }); @@ -281,8 +285,7 @@ public class MapMarkersHelper { } public boolean isSynced(FavouritePoint favouritePoint) { - MapMarker mapMarker = getMapMarker(favouritePoint); - return mapMarker != null; + return getMapMarker(favouritePoint) != null; } public MapMarker getMapMarker(WptPt wptPt) { @@ -316,10 +319,11 @@ public class MapMarkersHelper { @Nullable public MapMarker getMapMarker(@NonNull String mapObjectName, @NonNull LatLon latLon) { for (MapMarker marker : mapMarkers) { - if (marker.mapObjectName != null && marker.mapObjectName.equals(mapObjectName) && marker.point != null) { - if (MapUtils.getDistance(latLon, marker.point) < 15) { - return marker; - } + if (marker.mapObjectName != null + && marker.point != null + && marker.mapObjectName.equals(mapObjectName) + && MapUtils.getDistance(latLon, marker.point) < 15) { + return marker; } } return null; @@ -356,7 +360,11 @@ public class MapMarkersHelper { if (!exists) { addMarkers(Collections.singletonList(latLon), Collections.singletonList(new PointDescription(POINT_TYPE_MAP_MARKER, name)), - group, enabled, Collections.singletonList(favouritePoint), Collections.singletonList(wptPt), null); + group, + enabled, + Collections.singletonList(favouritePoint), + Collections.singletonList(wptPt), + null); } } @@ -433,10 +441,10 @@ public class MapMarkersHelper { if (markers != null) { for (MapMarker marker : markers) { markersDbHelper.restoreMapMarkerFromHistory(marker); - removeFromMapMarkersHistoryList(marker); marker.history = false; - addToMapMarkersList(marker); } + removeFromMapMarkersHistoryList(markers); + addToMapMarkersList(markers); reorderActiveMarkersIfNeeded(); sortMarkers(mapMarkersHistory, true, BY_DATE_ADDED_DESC); updateGroups(); @@ -458,12 +466,9 @@ public class MapMarkersHelper { } } + @Nullable public MapMarker getFirstMapMarker() { - if (mapMarkers.size() > 0) { - return mapMarkers.get(0); - } else { - return null; - } + return mapMarkers.size() > 0 ? mapMarkers.get(0) : null; } public void deselectAllActiveMarkers() { @@ -486,7 +491,7 @@ public class MapMarkersHelper { public List getSelectedMarkers() { List list = new ArrayList<>(); - for (MapMarker m : this.mapMarkers) { + for (MapMarker m : mapMarkers) { if (m.selected) { list.add(m); } @@ -496,7 +501,7 @@ public class MapMarkersHelper { public int getSelectedMarkersCount() { int res = 0; - for (MapMarker m : this.mapMarkers) { + for (MapMarker m : mapMarkers) { if (m.selected) { res++; } @@ -523,14 +528,6 @@ public class MapMarkersHelper { reorderActiveMarkersIfNeeded(); } - private List getActiveMarkersLatLon() { - List list = new ArrayList<>(); - for (MapMarker m : this.mapMarkers) { - list.add(m.point); - } - return list; - } - public List getSelectedMarkersLatLon() { List list = new ArrayList<>(); for (MapMarker m : this.mapMarkers) { @@ -541,14 +538,6 @@ public class MapMarkersHelper { return list; } - private List getMarkersHistoryLatLon() { - List list = new ArrayList<>(); - for (MapMarker m : this.mapMarkersHistory) { - list.add(m.point); - } - return list; - } - public void reverseActiveMarkersOrder() { cancelAddressRequests(); Collections.reverse(mapMarkers); @@ -592,10 +581,6 @@ public class MapMarkersHelper { } } - private void removeDisabledGroups() { - markersDbHelper.removeDisabledGroups(); - } - public void updateGroupDisabled(@NonNull MapMarkersGroup group, boolean disabled) { String id = group.getGroupKey(); if (id != null) { @@ -630,37 +615,46 @@ public class MapMarkersHelper { if (syncGroupId != null) { markersDbHelper.removeActiveMarkersFromSyncGroup(syncGroupId); List copyList = new ArrayList<>(mapMarkers); - for (int i = 0; i < copyList.size(); i++) { - MapMarker marker = copyList.get(i); - String groupKey = marker.groupKey; - if (groupKey != null && groupKey.equals(syncGroupId)) { - removeFromMapMarkersList(marker); + for (MapMarker marker : copyList) { + if (marker.groupKey == null || !marker.groupKey.equals(syncGroupId)) { + copyList.add(marker); } } + mapMarkers = copyList; reorderActiveMarkersIfNeeded(); refresh(); } } public void addMapMarker(@NonNull LatLon point, @Nullable PointDescription historyName) { - addMarkers(Collections.singletonList(point), Collections.singletonList(historyName), null, true); + addMapMarkers(Collections.singletonList(point), Collections.singletonList(historyName), null); } - public void addMapMarker(@NonNull LatLon point, @Nullable PointDescription historyName, @Nullable String mapObjectName) { - addMarkers(Collections.singletonList(point), Collections.singletonList(historyName), null, - true, null, null, Collections.singletonList(mapObjectName)); + public void addMapMarker(@NonNull LatLon point, + @Nullable PointDescription historyName, + @Nullable String mapObjectName) { + addMarkers(Collections.singletonList(point), + Collections.singletonList(historyName), + null, + true, + null, + null, + Collections.singletonList(mapObjectName)); } - public void addMapMarkers(@NonNull List points, @NonNull List historyNames, @Nullable MarkersSyncGroup group) { - addMarkers(points, historyNames, group, true); + public void addMapMarkers(@NonNull List points, + @NonNull List historyNames, + @Nullable MarkersSyncGroup group) { + addMarkers(points, historyNames, group, true, null, null, null); } - private void addMarkers(@NonNull List points, @NonNull List historyNames, @Nullable MarkersSyncGroup group, boolean enabled) { - addMarkers(points, historyNames, group, enabled, null, null, null); - } - - private void addMarkers(@NonNull List points, @NonNull List historyNames, @Nullable MarkersSyncGroup group, - boolean enabled, @Nullable List favouritePoints, @Nullable List wptPts, @Nullable List mapObjNames) { + private void addMarkers(@NonNull List points, + @NonNull List historyNames, + @Nullable MarkersSyncGroup group, + boolean enabled, + @Nullable List favouritePoints, + @Nullable List wptPts, + @Nullable List mapObjNames) { if (points.size() > 0) { int colorIndex = -1; List addedMarkers = new ArrayList<>(); @@ -845,8 +839,8 @@ public class MapMarkersHelper { private void addMarkersToGroups(@NonNull List markers, boolean enabled) { List groups = new ArrayList<>(); - for (int i = 0; i < markers.size(); i++) { - MapMarkersGroup group = addMarkerToGroup(markers.get(i)); + for (MapMarker marker : markers) { + MapMarkersGroup group = addMarkerToGroup(marker); if (group != null && !groups.contains(group)) { groups.add(group); } @@ -859,6 +853,7 @@ public class MapMarkersHelper { } } + @Nullable private MapMarkersGroup addMarkerToGroup(MapMarker marker) { if (marker != null) { MapMarkersGroup mapMarkersGroup = getMapMarkerGroupByName(marker.groupName); @@ -902,7 +897,8 @@ public class MapMarkersHelper { GroupHeader header = new GroupHeader(); int type = group.getType(); if (type != -1) { - header.setIconRes(type == MapMarkersHelper.MarkersSyncGroup.FAVORITES_TYPE ? R.drawable.ic_action_fav_dark : R.drawable.ic_action_polygom_dark); + header.setIconRes(type == MarkersSyncGroup.FAVORITES_TYPE + ? R.drawable.ic_action_fav_dark : R.drawable.ic_action_polygom_dark); } header.setGroup(group); group.setGroupHeader(header); @@ -1001,6 +997,7 @@ public class MapMarkersHelper { } } + @Nullable public MapMarkersGroup getMapMarkerGroupByName(String name) { for (MapMarkersGroup group : mapMarkersGroups) { if ((name == null && group.getName() == null) @@ -1011,6 +1008,7 @@ public class MapMarkersHelper { return null; } + @Nullable public MapMarkersGroup getMapMarkerGroupByKey(String key) { for (MapMarkersGroup group : mapMarkersGroups) { if ((key == null && group.getGroupKey() == null) @@ -1077,6 +1075,12 @@ public class MapMarkersHelper { mapMarkersHistory = copyList; } + private void removeFromMapMarkersHistoryList(List markers) { + List copyList = new ArrayList<>(mapMarkersHistory); + copyList.removeAll(markers); + mapMarkersHistory = copyList; + } + // accessors to markers groups: private void addToGroupsList(MapMarkersGroup group) { @@ -1168,7 +1172,8 @@ public class MapMarkersHelper { boolean addAll = group.wptCategories == null || group.wptCategories.isEmpty(); List gpxPoints = new ArrayList<>(gpx.getPoints()); for (WptPt pt : gpxPoints) { - if (addAll || group.wptCategories.contains(pt.category)) { + if (addAll || group.wptCategories.contains(pt.category) + || (pt.category == null && group.wptCategories.contains(""))) { addNewMarkerIfNeeded(group, dbMarkers, new LatLon(pt.lat, pt.lon), pt.name, enabled, null, pt); } } @@ -1191,15 +1196,16 @@ public class MapMarkersHelper { } public static class MapMarkersGroup { + private String name; private String groupKey; - private GroupHeader header; private int type = -1; - private List markers = new ArrayList<>(); private long creationDate; - private ShowHideHistoryButton showHideHistoryButton; private int color; private boolean disabled; + private List markers = new ArrayList<>(); + private GroupHeader header; + private ShowHideHistoryButton showHideHistoryButton; public String getName() { return name; @@ -1217,6 +1223,46 @@ public class MapMarkersHelper { this.groupKey = groupKey; } + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public long getCreationDate() { + return creationDate; + } + + public void setCreationDate(long creationDate) { + this.creationDate = creationDate; + } + + public int getColor() { + return color; + } + + public void setColor(int color) { + this.color = color; + } + + public boolean isDisabled() { + return disabled; + } + + public void setDisabled(boolean disabled) { + this.disabled = disabled; + } + + public List getMarkers() { + return markers; + } + + public void setMarkers(List markers) { + this.markers = markers; + } + public GroupHeader getGroupHeader() { return header; } @@ -1225,12 +1271,12 @@ public class MapMarkersHelper { this.header = header; } - public int getType() { - return type; + public ShowHideHistoryButton getShowHideHistoryButton() { + return showHideHistoryButton; } - public void setType(int type) { - this.type = type; + public void setShowHideHistoryButton(ShowHideHistoryButton showHideHistoryButton) { + this.showHideHistoryButton = showHideHistoryButton; } public List getActiveMarkers() { @@ -1253,46 +1299,6 @@ public class MapMarkersHelper { } return historyMarkers; } - - public List getMarkers() { - return markers; - } - - public void setMarkers(List markers) { - this.markers = markers; - } - - public long getCreationDate() { - return creationDate; - } - - public void setCreationDate(long creationDate) { - this.creationDate = creationDate; - } - - public ShowHideHistoryButton getShowHideHistoryButton() { - return showHideHistoryButton; - } - - public void setShowHideHistoryButton(ShowHideHistoryButton showHideHistoryButton) { - this.showHideHistoryButton = showHideHistoryButton; - } - - public int getColor() { - return color; - } - - public void setColor(int color) { - this.color = color; - } - - public boolean isDisabled() { - return disabled; - } - - public void setDisabled(boolean disabled) { - this.disabled = disabled; - } } public static class ShowHideHistoryButton {