From 55dc79e11881385fe903d04fd98baddab63ed98d Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Tue, 28 Jul 2015 22:22:28 +0200 Subject: [PATCH] Update order to initialize --- .../src/net/osmand/util/Algorithms.java | 60 ++++++++++--------- .../plus/render/MapRenderRepositories.java | 12 ++-- .../plus/resources/ResourceManager.java | 2 + 3 files changed, 42 insertions(+), 32 deletions(-) diff --git a/OsmAnd-java/src/net/osmand/util/Algorithms.java b/OsmAnd-java/src/net/osmand/util/Algorithms.java index 4b3c283d420..e41697f4c12 100644 --- a/OsmAnd-java/src/net/osmand/util/Algorithms.java +++ b/OsmAnd-java/src/net/osmand/util/Algorithms.java @@ -44,41 +44,45 @@ public static long parseLongSilently(String input, long def) { return def; } - private static String simplifyName(String fn) { - String lc = fn.toLowerCase(); - if (lc.indexOf(".") != -1) { - lc = lc.substring(0, lc.indexOf(".")); - } - if (lc.endsWith("_2")) { - lc = lc.substring(0, lc.length() - "_2".length()); - } - boolean hasTimestampEnd = false; - for(int i = 0; i < lc.length(); i++) { - if(lc.charAt(i) >= '0' && lc.charAt(i) <= '9') { - hasTimestampEnd = true; - break; - } - } - if(!hasTimestampEnd) { - lc += "_00_00_00"; - } - return lc; - } + public static File[] getSortedFilesVersions(File dir){ File[] listFiles = dir.listFiles(); if (listFiles != null) { - Arrays.sort(listFiles, new Comparator() { - @Override - public int compare(File o1, File o2) { - return -simplifyName(o1.getName()).compareTo(simplifyName(o2.getName())); - } - - - }); + Arrays.sort(listFiles, getFileVersionComparator()); } return listFiles; } + + public static Comparator getFileVersionComparator() { + return new Comparator() { + @Override + public int compare(File o1, File o2) { + return -simplifyFileName(o1.getName()).compareTo(simplifyFileName(o2.getName())); + } + + public String simplifyFileName(String fn) { + String lc = fn.toLowerCase(); + if (lc.indexOf(".") != -1) { + lc = lc.substring(0, lc.indexOf(".")); + } + if (lc.endsWith("_2")) { + lc = lc.substring(0, lc.length() - "_2".length()); + } + boolean hasTimestampEnd = false; + for(int i = 0; i < lc.length(); i++) { + if(lc.charAt(i) >= '0' && lc.charAt(i) <= '9') { + hasTimestampEnd = true; + break; + } + } + if(!hasTimestampEnd) { + lc += "_00_00_00"; + } + return lc; + } + }; + } private static final char CHAR_TOSPLIT = 0x01; diff --git a/OsmAnd/src/net/osmand/plus/render/MapRenderRepositories.java b/OsmAnd/src/net/osmand/plus/render/MapRenderRepositories.java index f4401e68197..ef5d0d48cfe 100644 --- a/OsmAnd/src/net/osmand/plus/render/MapRenderRepositories.java +++ b/OsmAnd/src/net/osmand/plus/render/MapRenderRepositories.java @@ -14,6 +14,7 @@ import java.text.MessageFormat; import java.util.ArrayList; import java.util.HashSet; +import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; @@ -39,7 +40,6 @@ import net.osmand.data.QuadRect; import net.osmand.data.RotatedTileBox; import net.osmand.map.MapTileDownloader; -import net.osmand.map.MapTileDownloader.IMapDownloaderCallback; import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandPlugin; import net.osmand.plus.OsmandSettings; @@ -75,7 +75,7 @@ public class MapRenderRepositories { private final static int zoomOnlyForBasemaps = 11; static int zoomForBaseRouteRendering = 14; private Handler handler; - private Map files = new ConcurrentHashMap(); + private Map files = new LinkedHashMap(); private Set nativeFiles = new HashSet(); private OsmandRenderer renderer; @@ -131,7 +131,9 @@ public void initializeNewResource(final IProgress progress, File file, BinaryMap closeConnection(files.get(file.getAbsolutePath()), file.getAbsolutePath()); } - files.put(file.getAbsolutePath(), reader); + LinkedHashMap cpfiles = new LinkedHashMap(files); + cpfiles.put(file.getAbsolutePath(), reader); + files = cpfiles; } public RotatedTileBox getBitmapLocation() { @@ -143,7 +145,9 @@ public RotatedTileBox getPrevBmpLocation() { } protected void closeConnection(BinaryMapIndexReader c, String file) { - files.remove(file); + LinkedHashMap cpfiles = new LinkedHashMap(files); + cpfiles.remove(file); + files = cpfiles; if(nativeFiles.contains(file)){ NativeOsmandLibrary lib = NativeOsmandLibrary.getLoadedLibrary(); if(lib != null) { diff --git a/OsmAnd/src/net/osmand/plus/resources/ResourceManager.java b/OsmAnd/src/net/osmand/plus/resources/ResourceManager.java index 32e18672a76..93bcce85306 100644 --- a/OsmAnd/src/net/osmand/plus/resources/ResourceManager.java +++ b/OsmAnd/src/net/osmand/plus/resources/ResourceManager.java @@ -11,6 +11,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.Comparator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -601,6 +602,7 @@ public List indexingMaps(final IProgress progress) { if(OsmandPlugin.getEnabledPlugin(SRTMPlugin.class) != null) { collectFiles(context.getAppPath(IndexConstants.SRTM_INDEX_DIR), IndexConstants.BINARY_MAP_INDEX_EXT, files); } + Collections.sort(files, Algorithms.getFileVersionComparator()); List warnings = new ArrayList(); renderer.clearAllResources(); CachedOsmandIndexes cachedOsmandIndexes = new CachedOsmandIndexes();