From 2c9b03d96f55d4d66fbf22b2b705a4cb26998286 Mon Sep 17 00:00:00 2001 From: Sergey Kharchenko Date: Sun, 25 Jun 2023 08:42:21 +0300 Subject: [PATCH] #16632: Fixes after review --- OsmAnd/src/net/osmand/plus/auto/TracksScreen.kt | 6 +++--- .../plus/views/layers/FavouritesLayer.java | 16 ++++++++++------ .../plus/views/layers/MapMarkersLayer.java | 9 +++------ .../plus/views/layers/base/OsmandMapLayer.java | 15 ++++++++++++++- 4 files changed, 30 insertions(+), 16 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/auto/TracksScreen.kt b/OsmAnd/src/net/osmand/plus/auto/TracksScreen.kt index d2055954b20..cdd75807bd8 100644 --- a/OsmAnd/src/net/osmand/plus/auto/TracksScreen.kt +++ b/OsmAnd/src/net/osmand/plus/auto/TracksScreen.kt @@ -3,6 +3,7 @@ package net.osmand.plus.auto import android.os.AsyncTask import android.text.SpannableString import android.text.Spanned +import androidx.annotation.WorkerThread import androidx.car.app.CarContext import androidx.car.app.model.* import androidx.car.app.navigation.model.PlaceListNavigationTemplate @@ -35,7 +36,7 @@ class TracksScreen( ) : BaseOsmAndAndroidAutoScreen(carContext) { val gpxDbHelper: GpxDbHelper = app.gpxDbHelper var loadGpxFilesThread: Thread? = null - private val loadedGpxFiles = HashMap() + private var loadedGpxFiles = HashMap() private lateinit var loadTracksTask: LoadTracksTask init { @@ -86,7 +87,7 @@ class TracksScreen( } private fun prepareTrackItems() { - loadedGpxFiles.clear() + loadedGpxFiles = HashMap() for (track in trackTab.trackItems) { track.file?.let { file -> val item = gpxDbHelper.getItem(file) { updateTrack(track, it) } @@ -99,7 +100,6 @@ class TracksScreen( loadedGpxFiles[track] = selectedGpxFile } } - invalidate() } private fun updateTrack(trackItem: TrackItem, dataItem: GpxDataItem?) { diff --git a/OsmAnd/src/net/osmand/plus/views/layers/FavouritesLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/FavouritesLayer.java index 4c803170722..7e2e54559c5 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/FavouritesLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/FavouritesLayer.java @@ -44,7 +44,7 @@ import java.util.List; public class FavouritesLayer extends OsmandMapLayer implements IContextMenuProvider, - IMoveObjectProvider, MapTextProvider { + IMoveObjectProvider, MapTextProvider { private static final int START_ZOOM = 6; private static final Log LOG = PlatformUtil.getLog(FavouritesLayer.class); @@ -138,8 +138,12 @@ public void onPrepareBufferImage(Canvas canvas, RotatedTileBox tileBox, DrawSett if (hasMapRenderer()) { if (mapActivityInvalidated || mapRendererChanged || nightModeChanged || showFavoritesChanged - || favoritesChanged || textScaleChanged || textVisibleChanged || customObjectsDelegate != null) { + || favoritesChanged || textScaleChanged || textVisibleChanged + || (customObjectsDelegate != null && customObjectsDelegate.isChanged())) { showFavorites(); + if(customObjectsDelegate != null){ + customObjectsDelegate.acceptChanges(); + } mapRendererChanged = false; } } else { @@ -153,7 +157,7 @@ public void onPrepareBufferImage(Canvas canvas, RotatedTileBox tileBox, DrawSett QuadRect latLonBounds = tileBox.getLatLonBounds(); List fullObjectsLatLon = new ArrayList<>(); List smallObjectsLatLon = new ArrayList<>(); - if(customObjectsDelegate != null){ + if (customObjectsDelegate != null) { drawPoints(customObjectsDelegate.getMapObjects(), latLonBounds, false, tileBox, boundIntersections, iconSize, canvas, fullObjectsLatLon, smallObjectsLatLon); } else { @@ -182,8 +186,8 @@ private void drawPoints(List pointsToDraw, QuadRect latLonBounds double lat = favoritePoint.getLatitude(); double lon = favoritePoint.getLongitude(); if (favoritePoint.isVisible() && favoritePoint != contextMenuLayer.getMoveableObject() - && lat >= latLonBounds.bottom && lat <= latLonBounds.top - && lon >= latLonBounds.left && lon <= latLonBounds.right) { + && lat >= latLonBounds.bottom && lat <= latLonBounds.top + && lon >= latLonBounds.left && lon <= latLonBounds.right) { MapMarker marker = null; if (synced) { marker = mapMarkersHelper.getMapMarker(favoritePoint); @@ -256,7 +260,7 @@ public synchronized void showFavorites() { favoritesMapLayerProvider = new FavoritesTileProvider(getContext(), getPointsOrder(), isTextVisible(), getTextStyle(textScale), view.getDensity()); - if(customObjectsDelegate != null){ + if (customObjectsDelegate != null) { List points = customObjectsDelegate.getMapObjects(); showFavoritePoints(textScale, false, points); favoritesMapLayerProvider.drawSymbols(mapRenderer); diff --git a/OsmAnd/src/net/osmand/plus/views/layers/MapMarkersLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/MapMarkersLayer.java index 6c4073ba248..d9cdfe5a8d9 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/MapMarkersLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/MapMarkersLayer.java @@ -278,7 +278,7 @@ public void onPrepareBufferImage(Canvas canvas, RotatedTileBox tileBox, DrawSett OsmandApplication app = getApplication(); OsmandSettings settings = app.getSettings(); if ((!settings.SHOW_MAP_MARKERS.get() && customObjectsDelegate == null) - || (customObjectsDelegate != null && Algorithms.isEmpty(customObjectsDelegate.getMapObjects()))) { + || (customObjectsDelegate != null && Algorithms.isEmpty(customObjectsDelegate.getMapObjects()))) { clearMapMarkersCollections(); clearVectorLinesCollections(); resetCachedRenderer(); @@ -286,10 +286,7 @@ public void onPrepareBufferImage(Canvas canvas, RotatedTileBox tileBox, DrawSett } MapMarkersHelper markersHelper = app.getMapMarkersHelper(); - List activeMapMarkers = markersHelper.getMapMarkers(); - if (customObjectsDelegate != null) { - activeMapMarkers = customObjectsDelegate.getMapObjects(); - } + List activeMapMarkers = (customObjectsDelegate != null) ? customObjectsDelegate.getMapObjects() : markersHelper.getMapMarkers(); MapRendererView mapRenderer = getMapRenderer(); if (mapRenderer != null) { if (markersCount != activeMapMarkers.size() || mapActivityInvalidated) { @@ -380,7 +377,7 @@ public void onDraw(Canvas canvas, RotatedTileBox tileBox, DrawSettings nightMode OsmandSettings settings = app.getSettings(); if (customObjectsDelegate != null && Algorithms.isEmpty(customObjectsDelegate.getMapObjects()) - || customObjectsDelegate == null && (tileBox.getZoom() < 3 || !settings.SHOW_MAP_MARKERS.get())) { + || customObjectsDelegate == null && (tileBox.getZoom() < 3 || !settings.SHOW_MAP_MARKERS.get())) { clearVectorLinesCollections(); return; } diff --git a/OsmAnd/src/net/osmand/plus/views/layers/base/OsmandMapLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/base/OsmandMapLayer.java index 74bd3263e03..fa564903904 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/base/OsmandMapLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/base/OsmandMapLayer.java @@ -56,6 +56,7 @@ import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.Iterator; import java.util.LinkedList; import java.util.List; @@ -85,19 +86,31 @@ public abstract class OsmandMapLayer implements MapRendererViewListener { public static class CustomMapObjects { protected List customMapObjects; + private boolean isChanged; @NonNull public List getMapObjects() { if (customMapObjects == null) { - return new ArrayList<>(); + return Collections.emptyList(); } else { return customMapObjects; } } public void setCustomMapObjects(List customMapObjects) { + if(this.customMapObjects != customMapObjects){ + isChanged = true; + } this.customMapObjects = customMapObjects; } + + public void acceptChanges() { + isChanged = false; + } + + public boolean isChanged() { + return isChanged; + } } public enum MapGestureType {