From fac931e801cbc9ebe19b30b01576c40135283e5f Mon Sep 17 00:00:00 2001 From: veliymolfar Date: Thu, 28 May 2020 14:55:40 +0300 Subject: [PATCH] refactor SQLiteTileSource and FileUtils --- OsmAnd/src/net/osmand/FileUtils.java | 11 +++--- .../src/net/osmand/plus/SQLiteTileSource.java | 36 ++++++++++--------- .../download/ui/LocalIndexesFragment.java | 5 +-- .../plus/myplaces/AvailableGPXFragment.java | 2 +- 4 files changed, 28 insertions(+), 26 deletions(-) diff --git a/OsmAnd/src/net/osmand/FileUtils.java b/OsmAnd/src/net/osmand/FileUtils.java index 412955fa5f..c24c1ebfa8 100644 --- a/OsmAnd/src/net/osmand/FileUtils.java +++ b/OsmAnd/src/net/osmand/FileUtils.java @@ -13,7 +13,6 @@ import androidx.appcompat.app.AlertDialog; import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; import net.osmand.plus.SQLiteTileSource; -import net.osmand.plus.download.ui.LocalIndexesFragment; import net.osmand.util.Algorithms; import java.io.File; @@ -25,7 +24,7 @@ public class FileUtils { public static final Pattern ILLEGAL_FILE_NAME_CHARACTERS = Pattern.compile("[?:\"*|/<>]"); public static final Pattern ILLEGAL_PATH_NAME_CHARACTERS = Pattern.compile("[?:\"*|<>]"); - public static void renameFile(Activity a, final File f, final LocalIndexesFragment.RenameCallback callback) { + public static void renameFile(Activity a, final File f, final RenameCallback callback) { final WeakReference weakActivity = new WeakReference<>(a); AlertDialog.Builder b = new AlertDialog.Builder(a); if (f.exists()) { @@ -89,7 +88,7 @@ public class FileUtils { } public static File renameSQLiteFile(OsmandApplication ctx, File source, String newName, - LocalIndexesFragment.RenameCallback callback) { + RenameCallback callback) { File dest = checkRenamePossibility(ctx, source, newName, false); if (dest == null) { return null; @@ -116,7 +115,7 @@ public class FileUtils { } public static File renameGpxFile(OsmandApplication ctx, File source, String newName, boolean dirAllowed, - LocalIndexesFragment.RenameCallback callback) { + RenameCallback callback) { File dest = checkRenamePossibility(ctx, source, newName, dirAllowed); if (dest == null) { return null; @@ -153,4 +152,8 @@ public class FileUtils { } return dest; } + + public interface RenameCallback { + void renamedTo(File file); + } } diff --git a/OsmAnd/src/net/osmand/plus/SQLiteTileSource.java b/OsmAnd/src/net/osmand/plus/SQLiteTileSource.java index c46af50212..1c7d7d17c7 100644 --- a/OsmAnd/src/net/osmand/plus/SQLiteTileSource.java +++ b/OsmAnd/src/net/osmand/plus/SQLiteTileSource.java @@ -126,7 +126,7 @@ public class SQLiteTileSource implements ITileSource { } public void createDataBase() { - db = ctx.getSQLiteAPI().getOrCreateDatabase( + SQLiteConnection db = ctx.getSQLiteAPI().getOrCreateDatabase( ctx.getAppPath(TILES_INDEX_DIR).getAbsolutePath() + "/" + name + SQLITE_EXT, true); db.execSQL("CREATE TABLE IF NOT EXISTS tiles (x int, y int, z int, s int, image blob, time long, PRIMARY KEY (x,y,z,s))"); @@ -134,14 +134,13 @@ public class SQLiteTileSource implements ITileSource { db.execSQL("CREATE TABLE IF NOT EXISTS info(tilenumbering,minzoom,maxzoom)"); db.execSQL("INSERT INTO info (tilenumbering,minzoom,maxzoom) VALUES ('simple','" + minZoom + "','" + maxZoom + "');"); - addInfoColumn(URL, urlTemplate); - addInfoColumn(RANDOMS, randoms); - addInfoColumn(ELLIPSOID, isEllipsoid ? "1" : "0"); - addInfoColumn(INVERTED_Y, invertedY ? "1" : "0"); - addInfoColumn(REFERER, referer); - addInfoColumn(TIME_COLUMN, timeSupported ? "yes" : "no"); - addInfoColumn(EXPIRE_MINUTES, String.valueOf(getExpirationTimeMinutes())); - + addInfoColumn(db, URL, urlTemplate); + addInfoColumn(db, RANDOMS, randoms); + addInfoColumn(db, ELLIPSOID, isEllipsoid ? "1" : "0"); + addInfoColumn(db, INVERTED_Y, invertedY ? "1" : "0"); + addInfoColumn(db, REFERER, referer); + addInfoColumn(db, TIME_COLUMN, timeSupported ? "yes" : "no"); + addInfoColumn(db, EXPIRE_MINUTES, String.valueOf(getExpirationTimeMinutes())); db.close(); } @@ -270,14 +269,14 @@ public class SQLiteTileSource implements ITileSource { inversiveZoom = BIG_PLANET_TILE_NUMBERING.equalsIgnoreCase(cursor.getString(tnumbering)); } else { inversiveZoom = true; - addInfoColumn(TILENUMBERING, BIG_PLANET_TILE_NUMBERING); + addInfoColumn(db, TILENUMBERING, BIG_PLANET_TILE_NUMBERING); } int timecolumn = list.indexOf(TIME_COLUMN); if (timecolumn != -1) { timeSupported = "yes".equalsIgnoreCase(cursor.getString(timecolumn)); } else { - timeSupported = hasTimeColumn(); - addInfoColumn(TIME_COLUMN, timeSupported? "yes" : "no"); + timeSupported = hasTimeColumn(db); + addInfoColumn(db, TIME_COLUMN, timeSupported ? "yes" : "no"); } int expireminutes = list.indexOf(EXPIRE_MINUTES); this.expirationTimeMillis = -1; @@ -287,7 +286,7 @@ public class SQLiteTileSource implements ITileSource { this.expirationTimeMillis = minutes * 60 * 1000l; } } else { - addInfoColumn(EXPIRE_MINUTES, "0"); + addInfoColumn(db, EXPIRE_MINUTES, "0"); } int tsColumn = list.indexOf(TILESIZE); this.tileSizeSpecified = tsColumn != -1; @@ -338,7 +337,7 @@ public class SQLiteTileSource implements ITileSource { } public void updateFromTileSourceTemplate(TileSourceTemplate r) { - db = getDatabase(); + SQLiteConnection db = getDatabase(); if (!onlyReadonlyAvailable && db != null) { int maxZoom = r.getMaximumZoomSupported(); int minZoom = r.getMinimumZoomSupported(); @@ -363,9 +362,12 @@ public class SQLiteTileSource implements ITileSource { db.execSQL("update info set " + EXPIRE_MINUTES + " = '" + r.getExpirationTimeMinutes() + "'"); } } + if (db != null) { + db.close(); + } } - private void addInfoColumn(String columnName, String value) { + private void addInfoColumn(SQLiteConnection db, String columnName, String value) { if(!onlyReadonlyAvailable) { try { db.execSQL("alter table info add column " + columnName + " TEXT"); @@ -376,7 +378,7 @@ public class SQLiteTileSource implements ITileSource { } } - private boolean hasTimeColumn() { + private boolean hasTimeColumn(SQLiteConnection db) { SQLiteCursor cursor; cursor = db.rawQuery("SELECT * FROM tiles", null); cursor.moveToFirst(); @@ -476,7 +478,7 @@ public class SQLiteTileSource implements ITileSource { } else if(!tileSizeSpecified && tileSize != bmp.getWidth() && bmp.getWidth() > 0) { tileSize = bmp.getWidth(); - addInfoColumn("tilesize", tileSize+""); + addInfoColumn(db, "tilesize", tileSize + ""); tileSizeSpecified = true; } return bmp; diff --git a/OsmAnd/src/net/osmand/plus/download/ui/LocalIndexesFragment.java b/OsmAnd/src/net/osmand/plus/download/ui/LocalIndexesFragment.java index 08a7fb3724..89914c522c 100644 --- a/OsmAnd/src/net/osmand/plus/download/ui/LocalIndexesFragment.java +++ b/OsmAnd/src/net/osmand/plus/download/ui/LocalIndexesFragment.java @@ -36,6 +36,7 @@ import androidx.core.view.MenuItemCompat; import net.osmand.AndroidUtils; import net.osmand.Collator; import net.osmand.FileUtils; +import net.osmand.FileUtils.RenameCallback; import net.osmand.IndexConstants; import net.osmand.OsmAndCollator; import net.osmand.map.ITileSource; @@ -1206,8 +1207,4 @@ public class LocalIndexesFragment extends OsmandExpandableListFragment implement return (DownloadActivity) getActivity(); } - public interface RenameCallback { - - public void renamedTo(File file); - } } diff --git a/OsmAnd/src/net/osmand/plus/myplaces/AvailableGPXFragment.java b/OsmAnd/src/net/osmand/plus/myplaces/AvailableGPXFragment.java index eab365418d..2e5bafeecd 100644 --- a/OsmAnd/src/net/osmand/plus/myplaces/AvailableGPXFragment.java +++ b/OsmAnd/src/net/osmand/plus/myplaces/AvailableGPXFragment.java @@ -47,6 +47,7 @@ import androidx.core.view.MenuItemCompat; import net.osmand.AndroidUtils; import net.osmand.FileUtils; +import net.osmand.FileUtils.RenameCallback; import net.osmand.GPXUtilities; import net.osmand.GPXUtilities.GPXFile; import net.osmand.GPXUtilities.GPXTrackAnalysis; @@ -76,7 +77,6 @@ import net.osmand.plus.activities.SavingTrackHelper; import net.osmand.plus.activities.TrackActivity; import net.osmand.plus.base.OsmandExpandableListFragment; import net.osmand.plus.dialogs.DirectionsDialogs; -import net.osmand.plus.download.ui.LocalIndexesFragment.RenameCallback; import net.osmand.plus.helpers.AndroidUiHelper; import net.osmand.plus.helpers.GpxUiHelper.GPXDataSetType; import net.osmand.plus.mapmarkers.CoordinateInputDialogFragment;