diff --git a/app/src/main/java/de/apps4ics/mountainnavigation/handlers/DatabaseHandler.java b/app/src/main/java/de/apps4ics/mountainnavigation/handlers/DatabaseHandler.java index 201cb19..0cf3b07 100644 --- a/app/src/main/java/de/apps4ics/mountainnavigation/handlers/DatabaseHandler.java +++ b/app/src/main/java/de/apps4ics/mountainnavigation/handlers/DatabaseHandler.java @@ -55,6 +55,7 @@ private static final float MAX_POI_DISTANCE_COS = (float) Math.cos(MAX_POI_DISTANCE / 6371); private static final String DATABASE_NAME = "mountainNavigation.db"; + private static final String TABLE_APP_VAL = "app_values"; private static final String TABLE_GP = "geopoint"; private static final String TABLE_FOUNTAIN = "fountain"; private static final String TABLE_PATH = "path"; @@ -72,6 +73,8 @@ private static final String[] TABLES = new String[]{TABLE_FOUNTAIN, TABLE_PATH, TABLE_HUT, TABLE_PEAK, TABLE_BREAK_POINT, TABLE_TRASH_BIN, TABLE_IMAGE, TABLE_CELL_RECEPTION, TABLE_WIFI, TABLE_LIFT, TABLE_HIKE, TABLE_BIOTA}; private static final Integer[] TABLE_TYPES = new Integer[]{Types.FOUNTAIN, Types.PATH, Types.HUT, Types.PEAK, Types.BREAK_POINT, Types.TRASH_BIN, Types.PIC, Types.CELL_RECEPTION, Types.WIFI, Types.LIFT, Types.HIKE, Types.BIOTA}; + private static final String KEY_LAST_UPDATE = "_last_update"; + private static final String KEY_POI_ID = "_id"; private static final String KEY_POI_LAT = "_lat"; private static final String KEY_POI_LON = "_lon"; @@ -231,6 +234,10 @@ + KEY_ENDANGERED_NAME + " TEXT," + KEY_ENDANGERED_IMAGE + " BLOB" + ")"; db.execSQL(CREATE_ENDANGERED_TABLE); + String CREATE_APP_VALL_TABLE = "CREATE TABLE " + TABLE_APP_VAL + "(" + + KEY_POI_ID + " INTEGER PRIMARY KEY," + + KEY_LAST_UPDATE + " INTEGER" + ")"; + db.execSQL(CREATE_APP_VALL_TABLE); } @Override @@ -252,6 +259,33 @@ onCreate(db); } + public long getLastUpdate() { + SQLiteDatabase db = this.getReadableDatabase(); + Cursor cursor = db.query(TABLE_BIOTA, + new String[]{KEY_LAST_UPDATE}, + null, + null, null, null, null, null); + if(cursor != null) { + cursor.moveToFirst(); + long timestamp = cursor.getLong(cursor.getColumnIndex(KEY_LAST_UPDATE)); + db.close(); + cursor.close(); + return timestamp; + } + db.close(); + cursor.close(); + return 0; + } + + public long updateLastUpdate(long time) { + SQLiteDatabase db = this.getWritableDatabase(); + ContentValues values = new ContentValues(); + values.put(KEY_LAST_UPDATE, time); + long rowId = db.insert(TABLE_APP_VAL, null, values); + db.close(); + return rowId; + } + private ContentValues getValues(Poi poi){ ContentValues values = new ContentValues(); switch(poi.getType()){ diff --git a/app/src/main/java/de/apps4ics/mountainnavigation/handlers/PoiHandler.java b/app/src/main/java/de/apps4ics/mountainnavigation/handlers/PoiHandler.java index 1afee6d..983f970 100644 --- a/app/src/main/java/de/apps4ics/mountainnavigation/handlers/PoiHandler.java +++ b/app/src/main/java/de/apps4ics/mountainnavigation/handlers/PoiHandler.java @@ -133,6 +133,8 @@ private static Integer[] entryImgs; private static Drawable[] entryDrawables; + private static int ONE_WEEK_IN_MS = 604800000; //1000 * 60 * 60 * 24 * 7 + public PoiHandler(Context context, Resources res, MapView mapView) { poiMarkers = new ArrayList[Types.SIZE]; for(int i=0; i ONE_WEEK_IN_MS; + } + public List getPoisAround(Location l) { return getPoisAround(l.getLatitude(), l.getLongitude()); } @@ -273,21 +279,22 @@ } public List getPoisAround(double lat, double lon, int limit) { - if(MainActivity.hasInternet()) return getPoisAroundOnline(lat, lon, limit); + if(MainActivity.hasInternet() && needsUpdate()) return getPoisAroundOnline(lat, lon, limit); else return getPoisAroundCached(lat, lon, limit); } private List getPoisAroundOnline(double lat, double lon, int limit) { + MainActivity.getDbHandler().updateLastUpdate(System.currentTimeMillis()); ArrayList pois = new ArrayList<>(osmHandler.getPoisAround(lat, lon, limit)); ArrayList convertedPois = new ArrayList<>(); - for(POI p : pois) { + /*for(POI p : pois) { Poi newPoi = Poi.getPoiFromOsmPOI(p); //TODO core do db stuff in background long poiId = dbHandler.addPoi(newPoi); newPoi.setId(poiId); convertedPois.add(newPoi); addGp(new DbGeoPoint(p.mLocation, System.currentTimeMillis()/1000, newPoi.getId(), newPoi.getType())); - } + }*/ return convertedPois; } @@ -300,11 +307,12 @@ } public void getPoisAlong(double lat, double lon, int limit) { - + if(MainActivity.hasInternet() && needsUpdate()) getPoisAlongOnline(lat, lon, limit); + getPoisAlongCached(lat, lon, limit); } private void getPoisAlongOnline(double lat, double lon, int limit) { - + MainActivity.getDbHandler().updateLastUpdate(System.currentTimeMillis()); } private void getPoisAlongCached(double lat, double lon, int limit) {