From 6340d66eb70c11ff3fcc01e7c9c4728d33a130d9 Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Sun, 18 Jan 2015 19:47:48 +0100 Subject: [PATCH 1/2] 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)"); From 56a0dd05d688ab70f3e9253763486510b29bcbdf Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Sun, 18 Jan 2015 20:09:59 +0100 Subject: [PATCH 2/2] Limit number announcements for POI to 3 --- OsmAnd/src/net/osmand/plus/helpers/WaypointHelper.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/OsmAnd/src/net/osmand/plus/helpers/WaypointHelper.java b/OsmAnd/src/net/osmand/plus/helpers/WaypointHelper.java index 871448795c..c3730cf6e7 100644 --- a/OsmAnd/src/net/osmand/plus/helpers/WaypointHelper.java +++ b/OsmAnd/src/net/osmand/plus/helpers/WaypointHelper.java @@ -48,6 +48,10 @@ public class WaypointHelper { private static final int LONG_ANNOUNCE_RADIUS = 700; private static final int SHORT_ANNOUNCE_RADIUS = 150; private static final int ALARMS_ANNOUNCE_RADIUS = 150; + + // don't annoy users by lots of announcements + private static final int APPROACH_POI_LIMIT = 3; + private static final int ANNOUNCE_POI_LIMIT = 3; OsmandApplication app; // every time we modify this collection, we change the reference (copy on write list) @@ -342,6 +346,9 @@ public class WaypointHelper { kIterator++; } if (!announcePoints.isEmpty()) { + if(announcePoints.size() > ANNOUNCE_POI_LIMIT) { + announcePoints = announcePoints.subList(0, ANNOUNCE_POI_LIMIT); + } if (type == WAYPOINTS) { getVoiceRouter().announceWaypoint(announcePoints); } else if (type == POI) { @@ -353,6 +360,9 @@ public class WaypointHelper { } } if (!approachPoints.isEmpty()) { + if(approachPoints.size() > APPROACH_POI_LIMIT) { + approachPoints = approachPoints.subList(0, APPROACH_POI_LIMIT); + } if (type == WAYPOINTS) { getVoiceRouter().approachWaypoint(lastKnownLocation, approachPoints); } else if (type == POI) {