diff --git a/app/src/main/java/de/apps4ics/mountainnavigation/MainActivity.java b/app/src/main/java/de/apps4ics/mountainnavigation/MainActivity.java index d1f4117..c96abdf 100644 --- a/app/src/main/java/de/apps4ics/mountainnavigation/MainActivity.java +++ b/app/src/main/java/de/apps4ics/mountainnavigation/MainActivity.java @@ -401,7 +401,7 @@ return type; } - private String getTypeName(int type){ + private static String getTypeName(int type){ String name = ""; switch(type){ case Types.FOUNTAIN: @@ -508,6 +508,19 @@ mapView.invalidate(); } + public static void addPoiToMap(Poi poi) { + DbGeoPoint dbGeoPoint = poi.getGp(); + GeoPoint gp = new GeoPoint(dbGeoPoint.getLat(), dbGeoPoint.getLon(), dbGeoPoint.getAlt()); + Marker marker = new Marker(mapView); + marker.setIcon(PoiHandler.createPoiMarker(poi.getType())); + marker.setTitle(getTypeName(poi.getType())); + marker.setSnippet(poi.getGp().toString() + "\n" + poi.toString()); + marker.setPosition(gp); + marker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM); + mapView.getOverlays().add(marker); + PoiHandler.addPoiMarker(poi.getType(), marker); //add new marker to list (needed to hide poi by type) + } + @Override public void onLocationChanged(Location location) { if(mLocation != null) { diff --git a/app/src/main/java/de/apps4ics/mountainnavigation/MyWeather.java b/app/src/main/java/de/apps4ics/mountainnavigation/MyWeather.java index fcffc2f..72c0340 100644 --- a/app/src/main/java/de/apps4ics/mountainnavigation/MyWeather.java +++ b/app/src/main/java/de/apps4ics/mountainnavigation/MyWeather.java @@ -50,7 +50,6 @@ private float rain; //rain volume for the last 3 hours private float snow; //snow volume for the last 3 hours - //TODO split into severe weather and foggy, windy, sunny, ... private static final Integer[] severeWeatherCodes = new Integer[]{ WeatherCode.TORNADO.getCode(), WeatherCode.TROPICAL_STORM.getCode(), diff --git a/app/src/main/java/de/apps4ics/mountainnavigation/handlers/OsmHandler.java b/app/src/main/java/de/apps4ics/mountainnavigation/handlers/OsmHandler.java index ca1f7c0..8e6e578 100644 --- a/app/src/main/java/de/apps4ics/mountainnavigation/handlers/OsmHandler.java +++ b/app/src/main/java/de/apps4ics/mountainnavigation/handlers/OsmHandler.java @@ -49,23 +49,28 @@ List poisAround = new ArrayList<>(); for(String type : OSM_TYPES) { try { - poisAround.addAll(new GetPoiFromOsm().execute(type).get()); + poisAround.addAll(new GetPoiFromOsm().execute(new Object[]{type, lat, lon, limit}).get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } - if(limit != -1) return poisAround.subList(0, Math.min(limit, poisAround.size())); + if(limit != -1) return poisAround.subList(0, Math.min(limit*OSM_TYPES.length, poisAround.size())); else return poisAround; } } -class GetPoiFromOsm extends AsyncTask { - protected List doInBackground(String... params) { +class GetPoiFromOsm extends AsyncTask { + protected List doInBackground(Object... params) { try { + String type = (String) params[0]; + double lat = (Double) params[1]; + double lon = (Double) params[2]; + int limit = (Integer) params[3]; NominatimPOIProvider poiProvider = new NominatimPOIProvider(""); - List foundPois = poiProvider.getPOICloseTo(new GeoPoint(MainActivity.getLocation()), params[0], 50, 0.1); + if(limit == -1) limit = 50; + List foundPois = poiProvider.getPOICloseTo(new GeoPoint(lat, lon), type, limit, 0.1); return foundPois; } catch (Exception e) { return null; 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 b24172d..d20f028 100644 --- a/app/src/main/java/de/apps4ics/mountainnavigation/handlers/PoiHandler.java +++ b/app/src/main/java/de/apps4ics/mountainnavigation/handlers/PoiHandler.java @@ -143,7 +143,6 @@ fragmentManager = activity.getFragmentManager(); } catch(ClassCastException e) { Log.e(MainActivity.TAG, "Could not get fragment manager!"); - //TODO close app? } fountainSizes = res.getStringArray(R.array.fountain_size_dialog_options); @@ -232,24 +231,6 @@ poiMarkers[type].add(marker); } - public void updatePois() { - pois = new HashMap<>(); - pois.put("path", new ArrayList()); - pois.put("spring", new ArrayList()); - pois.put("stream", new ArrayList()); - pois.put("peak", new ArrayList()); - pois.put("wilderness_hut", new ArrayList()); - pois.put("alpine_hut", new ArrayList()); - pois.put("water", new ArrayList()); - pois.put("aerialway", new ArrayList()); - Iterator it = pois.entrySet().iterator(); - while(it.hasNext()) { - Map.Entry entry = (Map.Entry) it.next(); - new GetPoiFromOsm().execute(entry.getKey()); - //TODO add to pois - } - } - public List getPoisAround(double lat, double lon) { return getPoisAround(lat, lon, -1); } @@ -295,11 +276,11 @@ public void updatePoi(Poi poi) { updatePoiInCache(poi); if(MainActivity.hasInternet()) updatePoiInOsm(poi); - else ; //TODO callback for upload + else ; //TODO callback for upload, not part of core } private void updatePoiInOsm(Poi poi) { - //TODO OSM stuff + //TODO OSM stuff, not part of core } private void updatePoiInCache(Poi poi) { @@ -753,7 +734,7 @@ long rowId = dbHandler.addPoi(poi); if(rowId >= 0) MainActivity.Toaster(context.getString(R.string.add_poi_success), true, context); if(MainActivity.hasInternet()) addPoiToOsm(dbgp.getLat(), dbgp.getLon(), dbgp.getAlt(), poi.getType(), null); - else ;//TODO add callback + else ;//TODO add callback, not part of core return rowId; } @@ -789,6 +770,21 @@ cursor.close(); return filePath; } + + public static LayerDrawable createPoiMarker(int type) { + Resources res = MainActivity.getRes(); + Drawable[] iconLayer = new Drawable[2]; + iconLayer[0] = res.getDrawable(R.mipmap.ic_poi); + BitmapDrawable bd = (BitmapDrawable) res.getDrawable(PoiHandler.getEntryImgs()[MainActivity.getPos(type)]); + if(bd == null) return null; + Bitmap b = bd.getBitmap(); + Bitmap bResized = Bitmap.createScaledBitmap(b, b.getWidth()/2, b.getHeight()/2, false); + bd = new BitmapDrawable(res, bResized); + bd.setGravity(Gravity.CENTER_HORIZONTAL); + iconLayer[1] = bd; + LayerDrawable icon = new LayerDrawable(iconLayer); + return icon; + } } class UpdatePoiIconsAsyncTask extends AsyncTask, Void, List> { @@ -838,17 +834,7 @@ positionMarker.setTitle(titleText); positionMarker.setSnippet(snippetText); positionMarker.setImage(res.getDrawable(PoiHandler.getEntryImgs()[MainActivity.getPos(type)])); - Drawable[] iconLayer = new Drawable[2]; - iconLayer[0] = res.getDrawable(R.mipmap.ic_poi); - BitmapDrawable bd = (BitmapDrawable) res.getDrawable(PoiHandler.getEntryImgs()[MainActivity.getPos(type)]); - if(bd == null) continue; - Bitmap b = bd.getBitmap(); - Bitmap bResized = Bitmap.createScaledBitmap(b, b.getWidth()/2, b.getHeight()/2, false); - bd = new BitmapDrawable(res, bResized); - bd.setGravity(Gravity.CENTER_HORIZONTAL); - iconLayer[1] = bd; - LayerDrawable icon = new LayerDrawable(iconLayer); - positionMarker.setIcon(icon); + positionMarker.setIcon(PoiHandler.createPoiMarker(type)); result.add(positionMarker); PoiHandler.addPoiMarker(MainActivity.getPos(type), positionMarker); } @@ -861,17 +847,7 @@ positionMarker.setTitle(titleText); positionMarker.setSnippet(snippetText); positionMarker.setImage(res.getDrawable(PoiHandler.getEntryImgs()[MainActivity.getPos(type)])); - Drawable[] iconLayer = new Drawable[2]; - iconLayer[0] = res.getDrawable(R.mipmap.ic_poi); - BitmapDrawable bd = (BitmapDrawable) res.getDrawable(PoiHandler.getEntryImgs()[MainActivity.getPos(type)]); - if(bd == null) continue; - Bitmap b = bd.getBitmap(); - Bitmap bResized = Bitmap.createScaledBitmap(b, b.getWidth()/2, b.getHeight()/2, false); - bd = new BitmapDrawable(res, bResized); - bd.setGravity(Gravity.CENTER_HORIZONTAL); - iconLayer[1] = bd; - LayerDrawable icon = new LayerDrawable(iconLayer); - positionMarker.setIcon(icon); + positionMarker.setIcon(PoiHandler.createPoiMarker(type)); result.add(positionMarker); PoiHandler.addPoiMarker(MainActivity.getPos(type), positionMarker); } diff --git a/app/src/main/java/de/apps4ics/mountainnavigation/handlers/WeatherHandler.java b/app/src/main/java/de/apps4ics/mountainnavigation/handlers/WeatherHandler.java index 151e8ae..99a52e0 100644 --- a/app/src/main/java/de/apps4ics/mountainnavigation/handlers/WeatherHandler.java +++ b/app/src/main/java/de/apps4ics/mountainnavigation/handlers/WeatherHandler.java @@ -85,7 +85,6 @@ fragmentManager = activity.getFragmentManager(); } catch(ClassCastException e) { Log.e(MainActivity.TAG, "Could not get fragment manager!"); - //TODO close app? } Resources res = MainActivity.getRes(); diff --git a/app/src/main/java/de/apps4ics/mountainnavigation/pois/Poi.java b/app/src/main/java/de/apps4ics/mountainnavigation/pois/Poi.java index acc0372..77c0b99 100644 --- a/app/src/main/java/de/apps4ics/mountainnavigation/pois/Poi.java +++ b/app/src/main/java/de/apps4ics/mountainnavigation/pois/Poi.java @@ -2,6 +2,8 @@ import org.osmdroid.bonuspack.location.POI; +import de.apps4ics.mountainnavigation.MainActivity; + /** * This file is part of MountainNavigation. * @@ -35,6 +37,32 @@ public Poi(POI p) { gp = new DbGeoPoint(p.mLocation); infoFromOsm = p.mCategory + ":" + p.mDescription + ":" + p.mType; + switch (p.mType) { + case "path": + _type = Types.PATH; + break; + case "spring": + _type = Types.FOUNTAIN; + break; + case "stream": + _type = Types.FOUNTAIN; + break; + case "peak": + _type = Types.PEAK; + break; + case "wilderness_hut": + _type = Types.HUT; + break; + case "alpine_hut": + _type = Types.HUT; + break; + case "water": + _type = Types.FOUNTAIN; + break; + case "aerialway": + _type = Types.LIFT; + break; + } } @Override @@ -91,7 +119,7 @@ } public void display() { - //TODO display POI on map + MainActivity.addPoiToMap(this); } public long getId(){ diff --git a/app/src/main/res/layout/warning_list_item.xml b/app/src/main/res/layout/warning_list_item.xml index 1ea4e12..a7696be 100644 --- a/app/src/main/res/layout/warning_list_item.xml +++ b/app/src/main/res/layout/warning_list_item.xml @@ -25,7 +25,10 @@ + android:layout_marginLeft="16dp" + android:layout_marginStart="16dp" + android:layout_marginRight="16dp" + android:layout_marginEnd="16dp" >