From 6340d66eb70c11ff3fcc01e7c9c4728d33a130d9 Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Sun, 18 Jan 2015 19:47:48 +0100 Subject: [PATCH] Fix nexus 9 issue with sqlite --- OsmAnd/src/net/osmand/plus/api/SQLiteAPIImpl.java | 3 ++- .../osmand/plus/resources/BaseLocationIndexRepository.java | 4 +++- OsmAnd/src/net/osmand/plus/srtmplugin/HillshadeLayer.java | 5 ++++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/api/SQLiteAPIImpl.java b/OsmAnd/src/net/osmand/plus/api/SQLiteAPIImpl.java index f63139e37a..7b8816252f 100644 --- a/OsmAnd/src/net/osmand/plus/api/SQLiteAPIImpl.java +++ b/OsmAnd/src/net/osmand/plus/api/SQLiteAPIImpl.java @@ -185,8 +185,9 @@ public class SQLiteAPIImpl implements SQLiteAPI { @Override public SQLiteConnection openByAbsolutePath(String path, boolean readOnly) { + // fix http://stackoverflow.com/questions/26937152/workaround-for-nexus-9-sqlite-file-write-operations-on-external-dirs android.database.sqlite.SQLiteDatabase db = SQLiteDatabase.openDatabase(path, null, - readOnly? SQLiteDatabase.OPEN_READONLY : SQLiteDatabase.OPEN_READWRITE); + readOnly? SQLiteDatabase.OPEN_READONLY : (SQLiteDatabase.OPEN_READWRITE | SQLiteDatabase.ENABLE_WRITE_AHEAD_LOGGING)); if(db == null) { return null; } diff --git a/OsmAnd/src/net/osmand/plus/resources/BaseLocationIndexRepository.java b/OsmAnd/src/net/osmand/plus/resources/BaseLocationIndexRepository.java index 5ff273a0e2..61392454f6 100644 --- a/OsmAnd/src/net/osmand/plus/resources/BaseLocationIndexRepository.java +++ b/OsmAnd/src/net/osmand/plus/resources/BaseLocationIndexRepository.java @@ -54,7 +54,9 @@ public class BaseLocationIndexRepository { // close previous db db.close(); } - db = SQLiteDatabase.openOrCreateDatabase(file, null); + // fix http://stackoverflow.com/questions/26937152/workaround-for-nexus-9-sqlite-file-write-operations-on-external-dirs + db = SQLiteDatabase.openDatabase(file.getPath(), null, + SQLiteDatabase.ENABLE_WRITE_AHEAD_LOGGING| SQLiteDatabase.CREATE_IF_NECESSARY); name = file.getName().substring(0, file.getName().indexOf('.')); if(db.getVersion() != version){ db.close(); diff --git a/OsmAnd/src/net/osmand/plus/srtmplugin/HillshadeLayer.java b/OsmAnd/src/net/osmand/plus/srtmplugin/HillshadeLayer.java index 14315a06e1..c89fe440c6 100644 --- a/OsmAnd/src/net/osmand/plus/srtmplugin/HillshadeLayer.java +++ b/OsmAnd/src/net/osmand/plus/srtmplugin/HillshadeLayer.java @@ -49,7 +49,10 @@ public class HillshadeLayer extends MapTileLayer { @Override protected Void doInBackground(Void... params) { File tilesDir = app.getAppPath(IndexConstants.TILES_INDEX_DIR); - sqliteDb = SQLiteDatabase.openOrCreateDatabase(new File(tilesDir, HILLSHADE_CACHE) , null); + // fix http://stackoverflow.com/questions/26937152/workaround-for-nexus-9-sqlite-file-write-operations-on-external-dirs + sqliteDb = SQLiteDatabase.openDatabase(new File(tilesDir, HILLSHADE_CACHE).getPath() , + null, SQLiteDatabase.ENABLE_WRITE_AHEAD_LOGGING + | SQLiteDatabase.CREATE_IF_NECESSARY ); if(sqliteDb.getVersion() == 0) { sqliteDb.setVersion(1); sqliteDb.execSQL("CREATE TABLE TILE_SOURCES(filename varchar2(256), date_modified int, left int, right int, top int, bottom int)");