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/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) { 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)");