diff --git a/.gitignore b/.gitignore index db3e674b..b2d176c9 100644 --- a/.gitignore +++ b/.gitignore @@ -40,4 +40,7 @@ local.properties /build /build -com_crashlytics_export_strings.xml \ No newline at end of file +com_crashlytics_export_strings.xml + +*/generatedLibs/*.aar +*/generatedLibs/*.jar diff --git a/OSMBonusPack/aarLibs/osmdroid-android-5.5-release.aar b/OSMBonusPack/aarLibs/osmdroid-android-5.5-release.aar new file mode 100644 index 00000000..b0f0b99c Binary files /dev/null and b/OSMBonusPack/aarLibs/osmdroid-android-5.5-release.aar differ diff --git a/OSMBonusPack/build.gradle b/OSMBonusPack/build.gradle index cbc8a4be..4d2570fc 100644 --- a/OSMBonusPack/build.gradle +++ b/OSMBonusPack/build.gradle @@ -1,14 +1,19 @@ apply plugin: 'com.android.library' +//set version name here +def libVersionName = "6.0-SNAPSHOT" + android { - compileSdkVersion 23 - buildToolsVersion "23.0.3" + compileSdkVersion 26 + buildToolsVersion "26.0.2" defaultConfig { - minSdkVersion 10 - targetSdkVersion 23 - versionCode 60 - versionName "6.0-SNAPSHOT" + minSdkVersion 14 + targetSdkVersion 25 + versionCode 61 + versionName libVersionName + //adds version to .aar file + setProperty("archivesBaseName", "${archivesBaseName}-$versionName") } buildTypes { release { @@ -16,17 +21,39 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } + + lintOptions{ + disable 'MissingTranslation' + } +} + +//for use of aar files as libs +repositories { + jcenter() + flatDir { + dirs 'aarLibs' + } } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) + implementation fileTree(dir: 'libs', include: ['*.jar']) - compile "com.android.support:support-v4:23.1.1" - compile 'org.osmdroid:osmdroid-android:5.5:release@aar' - compile 'org.apache.commons:commons-lang3:3.3.2' - compile 'com.google.code.gson:gson:2.7' - compile 'com.squareup.okhttp3:okhttp:3.4.1' +// implementation(name:'osmdroid-android-5.5-release', ext:'aar') +// implementation ('org.osmdroid:osmdroid-android-5.5-release@aar'){ +// transitive=true +// } + implementation "com.android.support:support-v4:26.1.0" + implementation 'org.osmdroid:osmdroid-android:5.5:release@aar' + implementation 'org.apache.commons:commons-lang3:3.3.2' + implementation 'com.google.code.gson:gson:2.8.0' + implementation 'com.squareup.okhttp3:okhttp:3.7.0' + + // implementation project(":OSMBonusPack") + + implementation 'org.osmdroid:osmdroid-mapsforge:5.5:release@aar' + implementation 'org.mapsforge:mapsforge-map-android:0.6.1' + implementation 'org.mapsforge:mapsforge-map:0.6.1' } apply from: '../maven.gradle' @@ -36,3 +63,54 @@ install { pom.version = "6.0-SNAPSHOT" } } + + + +//to generate sources after Build > Build APK +afterEvaluate { + assembleDebug.doLast { + logger.warn('--- assembleDebug copy libs to generatedLibs') + copySourcesAar.execute() + sourcesJar.execute() + copySourcesJar.execute() + } + assembleRelease.doLast { + logger.warn('--- assembleRelease copy libs to generatedLibs') + copySourcesAar.execute() + sourcesJar.execute() + copySourcesJar.execute() + } +} + +//task to generate java doc, Gradle -> Tasks -> Other -> sourcesJar > run(double click) +//sources will be in build\libs\*-sources.jar +task sourcesJar(type: Jar) { + logger.warn('---START sourcesJar') + classifier = 'sources' + from android.sourceSets.main.java.srcDirs + logger.warn('---END sourcesJar') +} + +task copySourcesJar(type: Copy){ + //versionName + def fromDir = ("$buildDir/libs") + def toDir = rootProject.file('OSMBonusPack/generatedLibs') + from fromDir + into toDir + include('**/*.jar', '**/*.aar') //exclude ('**/*unsigned.apk', '**/*unaligned.apk') + + logger.warn('--- copyJAR fromDir:'+fromDir+' toDir:'+toDir) +} +copySourcesJar.dependsOn sourcesJar +copySourcesJar.mustRunAfter sourcesJar + +task copySourcesAar(name: 'copySourcesAar', type: Copy){ + def fromDir = ("$buildDir/outputs/aar") +// def fromDir = rootProject.file('widgetsmodule/src/test'); + def toDir = rootProject.file('OSMBonusPack/generatedLibs') + from fromDir + into toDir + include('**/*.aar', '**/*.jar') + + logger.warn('--- copyAAR fromDir:'+fromDir+' toDir:'+toDir) +} \ No newline at end of file diff --git a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/clustering/GridMarkerClusterer.java b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/clustering/GridMarkerClusterer.java index 932f31e9..37a3f06d 100644 --- a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/clustering/GridMarkerClusterer.java +++ b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/clustering/GridMarkerClusterer.java @@ -77,8 +77,8 @@ public void setGridSize(int gridSize){ //Log.d("ZOOM", "zoomlevel="+mapView.getZoomLevel()+" cells="+numCellsW); //Log.d("ZOOM", "gridSizeX="+gridSizeX+" gridSizeY="+gridSizeY); - ArrayList clusters = new ArrayList(); - LongSparseArray sparseArray = new LongSparseArray(); + ArrayList clusters = new ArrayList<>(); + LongSparseArray sparseArray = new LongSparseArray<>(); for (Marker item:mItems){ //TODO - add 180° to prevent negative values long gridX = (long)(item.getPosition().getLongitude() / gridSizeX); diff --git a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/clustering/MarkerClusterer.java b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/clustering/MarkerClusterer.java index a58b2079..cd4bf1ad 100644 --- a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/clustering/MarkerClusterer.java +++ b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/clustering/MarkerClusterer.java @@ -29,9 +29,9 @@ public abstract class MarkerClusterer extends Overlay { /** impossible value for zoom level, to force clustering */ protected static final int FORCE_CLUSTERING = -1; - protected ArrayList mItems = new ArrayList(); + protected ArrayList mItems = new ArrayList<>(); protected Point mPoint = new Point(); - protected ArrayList mClusters = new ArrayList(); + protected ArrayList mClusters = new ArrayList<>(); protected int mLastZoomLevel; protected Bitmap mClusterIcon; protected String mName, mDescription; diff --git a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/clustering/RadiusMarkerClusterer.java b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/clustering/RadiusMarkerClusterer.java index f2875e31..aaeb152f 100644 --- a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/clustering/RadiusMarkerClusterer.java +++ b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/clustering/RadiusMarkerClusterer.java @@ -75,10 +75,10 @@ public void setMaxClusteringZoomLevel(int zoom){ /** Radius-Based clustering algorithm */ @Override public ArrayList clusterer(MapView mapView) { - ArrayList clusters = new ArrayList(); + ArrayList clusters = new ArrayList<>(); convertRadiusToMeters(mapView); - mClonedMarkers = new ArrayList(mItems); //shallow copy + mClonedMarkers = new ArrayList<>(mItems); //shallow copy while (!mClonedMarkers.isEmpty()) { Marker m = mClonedMarkers.get(0); StaticCluster cluster = createCluster(m, mapView); diff --git a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/clustering/StaticCluster.java b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/clustering/StaticCluster.java index c7d3c376..454991f5 100644 --- a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/clustering/StaticCluster.java +++ b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/clustering/StaticCluster.java @@ -10,7 +10,7 @@ * @author M.Kergall */ public class StaticCluster { - protected final ArrayList mItems = new ArrayList(); + protected final ArrayList mItems = new ArrayList<>(); protected GeoPoint mCenter; protected Marker mMarker; diff --git a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/kml/KmlDocument.java b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/kml/KmlDocument.java index b25ebb07..6580ab04 100644 --- a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/kml/KmlDocument.java +++ b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/kml/KmlDocument.java @@ -76,7 +76,7 @@ public class KmlDocument implements Parcelable { /** default constructor, with the kmlRoot as an empty Folder */ public KmlDocument(){ - mStyles = new HashMap(); + mStyles = new HashMap<>(); mMaxStyleId = 0; mKmlRoot = new KmlFolder(); mLocalFile = null; @@ -159,7 +159,7 @@ protected static GeoPoint parseKmlCoord(String input){ /** KML coordinates are: lon,lat{,alt} tuples separated by separators (space, tab, cr). */ protected static ArrayList parseKmlCoordinates(String input){ - LinkedList tmpCoords = new LinkedList(); + LinkedList tmpCoords = new LinkedList<>(); int i = 0; int tupleStart = 0; int length = input.length(); @@ -188,7 +188,7 @@ protected static ArrayList parseKmlCoordinates(String input){ } i++; } - ArrayList coordinates = new ArrayList(tmpCoords.size()); + ArrayList coordinates = new ArrayList<>(tmpCoords.size()); coordinates.addAll(tmpCoords); return coordinates; } @@ -200,21 +200,22 @@ protected static ArrayList parseKmlCoordinates(String input){ * @param url * @return true if OK, false if any error. */ - public boolean parseKMLUrl(String url){ - Log.d(BonusPackHelper.LOG_TAG, "KmlProvider.parseKMLUrl:"+url); - HttpConnection connection = new HttpConnection(); - connection.doGet(url); - InputStream stream = connection.getStream(); - boolean ok; - if (stream == null){ - ok = false; - } else { - ok = parseKMLStream(stream, null); - } - connection.close(); - //Log.d(BonusPackHelper.LOG_TAG, "KmlProvider.parseKMLUrl - end"); - return ok; - } + public boolean parseKMLUrl(String url) { + Log.d(BonusPackHelper.LOG_TAG, "KmlProvider.parseKMLUrl:" + url); + HttpConnection connection = new HttpConnection(); + try { + connection.doGet(url); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + InputStream stream = connection.getStream(); + boolean ok; + ok = stream != null && parseKMLStream(stream, null); + connection.close(); + //Log.d(BonusPackHelper.LOG_TAG, "KmlProvider.parseKMLUrl - end"); + return ok; + } /** * Get the default path for KML file on Android: on the external storage, in a "kml" directory. @@ -341,9 +342,9 @@ public KmlSaxHandler(File file, ZipFile kmzContainer){ mFile = file; mKMZFile = kmzContainer; mKmlRoot = new KmlFolder(); - mKmlFeatureStack = new ArrayList(); + mKmlFeatureStack = new ArrayList<>(); mKmlFeatureStack.add(mKmlRoot); - mKmlGeometryStack = new ArrayList(); + mKmlGeometryStack = new ArrayList<>(); mIsNetworkLink = false; mIsInnerBoundary = false; } @@ -503,7 +504,7 @@ else if (name.equals("GroundOverlay")) } else { //inside a Polygon innerBoundaryIs element: new hole KmlPolygon polygon = (KmlPolygon) mKmlCurrentGeometry; if (polygon.mHoles == null) - polygon.mHoles = new ArrayList>(); + polygon.mHoles = new ArrayList<>(); ArrayList hole = parseKmlCoordinates(mStringBuilder.toString()); polygon.mHoles.add(hole); } @@ -771,7 +772,7 @@ public KmlDocument(Parcel in){ mKmlRoot = in.readParcelable(KmlFeature.class.getClassLoader()); //mStyles = in.readHashMap(Style.class.getClassLoader()); int size = in.readInt(); - mStyles = new HashMap(size); + mStyles = new HashMap<>(size); for(int i=0; i C){ - if (!(this instanceof KmlPlacemark)) - return false; - KmlPlacemark placemark = (KmlPlacemark)this; - KmlGeometry geometry = placemark.mGeometry; - if (geometry == null) - return false; - return C.isInstance(geometry); - } + public boolean hasGeometry(Class C) { + if (!(this instanceof KmlPlacemark)) return false; + KmlPlacemark placemark = (KmlPlacemark) this; + KmlGeometry geometry = placemark.mGeometry; + return geometry != null && C.isInstance(geometry); + } /** * @param name @@ -153,7 +150,7 @@ public String getExtendedDataAsText(){ */ public void setExtendedData(String name, String value){ if (mExtendedData == null) - mExtendedData = new HashMap(); + mExtendedData = new HashMap<>(); mExtendedData.put(name, value); } @@ -251,7 +248,7 @@ public KmlFeature clone(){ return null; } if (mExtendedData != null){ - kmlFeature.mExtendedData = new HashMap(mExtendedData.size()); + kmlFeature.mExtendedData = new HashMap<>(mExtendedData.size()); kmlFeature.mExtendedData.putAll(mExtendedData); } return kmlFeature; diff --git a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/kml/KmlFolder.java b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/kml/KmlFolder.java index b31f2ec6..8602eab7 100644 --- a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/kml/KmlFolder.java +++ b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/kml/KmlFolder.java @@ -34,7 +34,7 @@ public class KmlFolder extends KmlFeature implements Cloneable, Parcelable { public KmlFolder(){ super(); - mItems = new ArrayList(); + mItems = new ArrayList<>(); } public KmlFolder(FolderOverlay overlay, KmlDocument kmlDoc){ @@ -227,7 +227,7 @@ public JsonObject geoJSONNamedCRS(String crsName){ public KmlFolder clone(){ KmlFolder kmlFolder = (KmlFolder)super.clone(); if (mItems != null){ - kmlFolder.mItems = new ArrayList(mItems.size()); + kmlFolder.mItems = new ArrayList<>(mItems.size()); for (KmlFeature item:mItems) kmlFolder.mItems.add(item.clone()); } diff --git a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/kml/KmlGeometry.java b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/kml/KmlGeometry.java index a5487e5f..80a1b6c5 100644 --- a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/kml/KmlGeometry.java +++ b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/kml/KmlGeometry.java @@ -93,7 +93,7 @@ public static JsonArray geoJSONCoordinates(ArrayList coordinates){ } public static ArrayList cloneArrayOfGeoPoint(ArrayList coords){ - ArrayList result = new ArrayList(coords.size()); + ArrayList result = new ArrayList<>(coords.size()); for (GeoPoint p:coords) result.add(p.clone()); return result; @@ -111,7 +111,7 @@ public static GeoPoint parseGeoJSONPosition(JsonArray json){ public static ArrayList parseGeoJSONPositions(JsonArray json){ if (json == null) return null; - ArrayList coordinates = new ArrayList(json.size()); + ArrayList coordinates = new ArrayList<>(json.size()); for (int i=0; i(2); + mCoordinates = new ArrayList<>(2); mCoordinates.add(new GeoPoint(pN.getLatitude(), pW.getLongitude())); //NW mCoordinates.add(new GeoPoint(pS.getLatitude(), pE.getLongitude())); //SE //mIconHref = ??? @@ -98,7 +98,7 @@ public void setIcon(String href, File containerFile, ZipFile kmzContainer){ } public void setLatLonBox(double north, double south, double east, double west){ - mCoordinates = new ArrayList(2); + mCoordinates = new ArrayList<>(2); mCoordinates.add(new GeoPoint(north, west)); mCoordinates.add(new GeoPoint(south, east)); } diff --git a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/kml/KmlMultiGeometry.java b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/kml/KmlMultiGeometry.java index 988f1211..1e795ef2 100644 --- a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/kml/KmlMultiGeometry.java +++ b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/kml/KmlMultiGeometry.java @@ -31,7 +31,7 @@ public class KmlMultiGeometry extends KmlGeometry implements Cloneable, Parcelab public KmlMultiGeometry(){ super(); - mItems = new ArrayList(); + mItems = new ArrayList<>(); } /** GeoJSON constructor */ @@ -110,7 +110,7 @@ public void addItem(KmlGeometry item){ @Override public KmlMultiGeometry clone(){ KmlMultiGeometry kmlMultiGeometry = (KmlMultiGeometry)super.clone(); - kmlMultiGeometry.mItems = new ArrayList(mItems.size()); + kmlMultiGeometry.mItems = new ArrayList<>(mItems.size()); for (KmlGeometry item:mItems) kmlMultiGeometry.mItems.add(item.clone()); return kmlMultiGeometry; diff --git a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/kml/KmlPoint.java b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/kml/KmlPoint.java index 333e4467..7377e952 100644 --- a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/kml/KmlPoint.java +++ b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/kml/KmlPoint.java @@ -45,7 +45,7 @@ public KmlPoint(JsonObject json){ public void setPosition(GeoPoint position){ if (mCoordinates == null){ - mCoordinates = new ArrayList(1); + mCoordinates = new ArrayList<>(1); mCoordinates.add(position); } else mCoordinates.set(0, position); diff --git a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/kml/KmlPolygon.java b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/kml/KmlPolygon.java index 66371efa..814d3fd4 100644 --- a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/kml/KmlPolygon.java +++ b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/kml/KmlPolygon.java @@ -93,7 +93,7 @@ public KmlPolygon(JsonObject json){ mCoordinates = KmlGeometry.parseGeoJSONPositions(rings.get(0).getAsJsonArray()); //next rings are the holes: if (rings.size() > 1){ - mHoles = new ArrayList>(rings.size()-1); + mHoles = new ArrayList<>(rings.size() - 1); for (int i=1; i hole = KmlGeometry.parseGeoJSONPositions(rings.get(i).getAsJsonArray()); mHoles.add(hole); @@ -146,7 +146,7 @@ public KmlPolygon(JsonObject json){ @Override public KmlPolygon clone(){ KmlPolygon kmlPolygon = (KmlPolygon)super.clone(); if (mHoles != null){ - kmlPolygon.mHoles = new ArrayList>(mHoles.size()); + kmlPolygon.mHoles = new ArrayList<>(mHoles.size()); for (ArrayList hole:mHoles){ kmlPolygon.mHoles.add(cloneArrayOfGeoPoint(hole)); } @@ -183,7 +183,7 @@ public KmlPolygon(Parcel in){ super(in); int holes = in.readInt(); if (holes != 0){ - mHoles = new ArrayList>(holes); + mHoles = new ArrayList<>(holes); for (int i=0; i l = in.readArrayList(GeoPoint.class.getClassLoader()); mHoles.add(l); diff --git a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/kml/StyleMap.java b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/kml/StyleMap.java index f91d4d51..9781725b 100644 --- a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/kml/StyleMap.java +++ b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/kml/StyleMap.java @@ -19,7 +19,7 @@ public class StyleMap extends StyleSelector implements Parcelable { /** default constructor */ public StyleMap(){ super(); - mPairs = new HashMap(); + mPairs = new HashMap<>(); } public void setPair(String key, String styleUrl){ @@ -75,7 +75,7 @@ public Style getNormalStyle(KmlDocument doc){ public StyleMap(Parcel in){ int size = in.readInt(); - mPairs = new HashMap(size); + mPairs = new HashMap<>(size); for(int i=0; i getThem(String fullUrl){ + public ArrayList getThem(String fullUrl) throws IOException, StatusException { Log.d(BonusPackHelper.LOG_TAG, "FlickrPOIProvider:get:"+fullUrl); String jString = BonusPackHelper.requestStringFromUrl(fullUrl); if (jString == null) { Log.e(BonusPackHelper.LOG_TAG, "FlickrPOIProvider: request failed."); - return null; + throw new StatusException(HttpURLConnection.HTTP_NO_CONTENT); } try { JSONObject jRoot = new JSONObject(jString); JSONObject jPhotos = jRoot.getJSONObject("photos"); JSONArray jPhotoArray = jPhotos.getJSONArray("photo"); int n = jPhotoArray.length(); - ArrayList pois = new ArrayList(n); + ArrayList pois = new ArrayList<>(n); for (int i=0; i getThem(String fullUrl){ * @param maxResults * @return list of POI, Flickr photos inside the bounding box. Null if technical issue. */ - public ArrayList getPOIInside(BoundingBox boundingBox, int maxResults){ + public ArrayList getPOIInside(BoundingBox boundingBox, int maxResults) throws IOException, StatusException { String url = getUrlInside(boundingBox, maxResults); return getThem(url); } diff --git a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/location/GeoNamesPOIProvider.java b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/location/GeoNamesPOIProvider.java index 2657617c..762183f8 100644 --- a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/location/GeoNamesPOIProvider.java +++ b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/location/GeoNamesPOIProvider.java @@ -7,6 +7,7 @@ import org.json.JSONObject; import org.osmdroid.bonuspack.utils.BonusPackHelper; import org.osmdroid.bonuspack.utils.HttpConnection; +import org.osmdroid.bonuspack.utils.StatusException; import org.osmdroid.util.BoundingBox; import org.osmdroid.util.GeoPoint; import org.xml.sax.Attributes; @@ -15,6 +16,7 @@ import java.io.IOException; import java.io.InputStream; +import java.net.HttpURLConnection; import java.util.ArrayList; import java.util.Locale; @@ -67,18 +69,18 @@ private String getUrlInside(BoundingBox boundingBox, int maxResults){ * @param fullUrl * @return the list of POI */ - public ArrayList getThem(String fullUrl){ + public ArrayList getThem(String fullUrl) throws IOException, StatusException { Log.d(BonusPackHelper.LOG_TAG, "GeoNamesPOIProvider:get:"+fullUrl); String jString = BonusPackHelper.requestStringFromUrl(fullUrl); if (jString == null) { Log.e(BonusPackHelper.LOG_TAG, "GeoNamesPOIProvider: request failed."); - return null; + throw new StatusException(HttpURLConnection.HTTP_NO_CONTENT); } try { JSONObject jRoot = new JSONObject(jString); JSONArray jPlaceIds = jRoot.getJSONArray("geonames"); int n = jPlaceIds.length(); - ArrayList pois = new ArrayList(n); + ArrayList pois = new ArrayList<>(n); for (int i=0; i getThem(String fullUrl){ public ArrayList getThemXML(String fullUrl){ Log.d(BonusPackHelper.LOG_TAG, "GeoNamesPOIProvider:get:"+fullUrl); HttpConnection connection = new HttpConnection(); - connection.doGet(fullUrl); + try { + connection.doGet(fullUrl); + } catch (Exception e) { + e.printStackTrace(); + } InputStream stream = connection.getStream(); if (stream == null){ return null; @@ -141,7 +147,7 @@ public ArrayList getThemXML(String fullUrl){ * @return list of POI, Wikipedia entries close to the position. Null if technical issue. */ public ArrayList getPOICloseTo(GeoPoint position, - int maxResults, double maxDistance){ + int maxResults, double maxDistance) throws IOException, StatusException { String url = getUrlCloseTo(position, maxResults, maxDistance); return getThem(url); } @@ -151,7 +157,7 @@ public ArrayList getPOICloseTo(GeoPoint position, * @param maxResults * @return list of POI, Wikipedia entries inside the bounding box. Null if technical issue. */ - public ArrayList getPOIInside(BoundingBox boundingBox, int maxResults){ + public ArrayList getPOIInside(BoundingBox boundingBox, int maxResults) throws IOException, StatusException { String url = getUrlInside(boundingBox, maxResults); return getThem(url); } @@ -165,7 +171,7 @@ class GeoNamesXMLHandler extends DefaultHandler { ArrayList mPOIs; public GeoNamesXMLHandler() { - mPOIs = new ArrayList(); + mPOIs = new ArrayList<>(); } @Override public void startElement(String uri, String localName, String name, @@ -173,7 +179,7 @@ public GeoNamesXMLHandler() { if (localName.equals("entry")){ mPOI = new POI(POI.POI_SERVICE_GEONAMES_WIKIPEDIA); } - mString = new String(); + mString = ""; } @Override public void characters(char[] ch, int start, int length) diff --git a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/location/GeocoderGisgraphy.java b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/location/GeocoderGisgraphy.java index b6718a6b..41820d9b 100644 --- a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/location/GeocoderGisgraphy.java +++ b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/location/GeocoderGisgraphy.java @@ -7,8 +7,10 @@ import org.json.JSONException; import org.json.JSONObject; import org.osmdroid.bonuspack.utils.BonusPackHelper; +import org.osmdroid.bonuspack.utils.StatusException; import java.io.IOException; +import java.net.HttpURLConnection; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; @@ -106,8 +108,7 @@ protected Address buildAndroidAddress(JSONObject jResult) throws JSONException{ /** * Equivalent to Geocoder::getFromLocation(String locationName, int maxResults). */ - public List
getFromLocationName(String locationName, int maxResults) - throws IOException { + public List
getFromLocationName(String locationName, int maxResults) throws IOException, StatusException { String url = mServiceUrl + "geocoding/geocode?" + "format=json" @@ -117,11 +118,11 @@ public List
getFromLocationName(String locationName, int maxResults) String result = BonusPackHelper.requestStringFromUrl(url); //Log.d(BonusPackHelper.LOG_TAG, result); if (result == null) - throw new IOException(); + throw new StatusException(HttpURLConnection.HTTP_NO_CONTENT); try { JSONObject jsonResult = new JSONObject(result); JSONArray jResults = jsonResult.getJSONArray("result"); - List
list = new ArrayList
(jResults.length()); + List
list = new ArrayList<>(jResults.length()); int n = Math.min(maxResults, jResults.length()); for (int i=0; i often introduce "noise" in the address. gAddress.setSubLocality(jAddress.get("suburb").getAsString()); + } else if (jAddress.has("sub-city")){ + gAddress.setSubLocality(jAddress.get("sub-city").getAsString()); } + if (jAddress.has("postcode")){ gAddress.setAddressLine(addressIndex++, jAddress.get("postcode").getAsString()); gAddress.setPostalCode(jAddress.get("postcode").getAsString()); @@ -120,9 +149,13 @@ protected Address buildAndroidAddress(JsonObject jResult) throws JsonSyntaxExcep if (jAddress.has("county")){ //France: departement gAddress.setSubAdminArea(jAddress.get("county").getAsString()); + } else if (jAddress.has("departement")){ + gAddress.setSubAdminArea(jAddress.get("departement").getAsString()); } if (jAddress.has("state")){ //France: region gAddress.setAdminArea(jAddress.get("state").getAsString()); + } else if (jAddress.has("region")){ + gAddress.setAdminArea(jAddress.get("region").getAsString()); } if (jAddress.has("country")){ gAddress.setAddressLine(addressIndex++, jAddress.get("country").getAsString()); @@ -130,21 +163,16 @@ protected Address buildAndroidAddress(JsonObject jResult) throws JsonSyntaxExcep } if (jAddress.has("country_code")) gAddress.setCountryCode(jAddress.get("country_code").getAsString()); - - /* Other possible OSM tags in Nominatim results not handled yet: - * subway, golf_course, bus_stop, parking,... - * house, house_number, building - * city_district (13e Arrondissement) - * road => or highway, ... - * sub-city (like suburb) => locality, isolated_dwelling, hamlet ... - * state_district + + /* Other possible OSM tags in Nominatim results not handled yet: + * state_district, ... */ //Add non-standard (but very useful) information in Extras bundle: Bundle extras = new Bundle(); if (jResult.has("polygonpoints")){ JsonArray jPolygonPoints = jResult.get("polygonpoints").getAsJsonArray(); - ArrayList polygonPoints = new ArrayList(jPolygonPoints.size()); + ArrayList polygonPoints = new ArrayList<>(jPolygonPoints.size()); for (int i=0; i getFromLocation(double latitude, double longitude, int maxResults) - throws IOException { + public List
getFromLocation(double latitude, double longitude, int maxResults) throws IOException, StatusException { String url = mServiceUrl + "reverse?"; if (mKey != null) url += "key=" + mKey + "&"; @@ -194,13 +323,13 @@ public List
getFromLocation(double latitude, double longitude, int maxR Log.d(BonusPackHelper.LOG_TAG, "GeocoderNominatim::getFromLocation:"+url); String result = BonusPackHelper.requestStringFromUrl(url, mUserAgent); if (result == null) - throw new IOException(); + throw new StatusException(HttpURLConnection.HTTP_NO_CONTENT); try { JsonParser parser = new JsonParser(); JsonElement json = parser.parse(result); JsonObject jResult = json.getAsJsonObject(); Address gAddress = buildAndroidAddress(jResult); - List
list = new ArrayList
(1); + List
list = new ArrayList<>(1); if (gAddress != null) list.add(gAddress); return list; @@ -217,8 +346,7 @@ public List
getFromLocation(double latitude, double longitude, int maxR public List
getFromLocationName(String locationName, int maxResults, double lowerLeftLatitude, double lowerLeftLongitude, double upperRightLatitude, double upperRightLongitude, - boolean bounded) - throws IOException { + boolean bounded) throws IOException, StatusException { String url = mServiceUrl + "search?"; if (mKey != null) url += "key=" + mKey + "&"; @@ -245,12 +373,12 @@ public List
getFromLocationName(String locationName, int maxResults, String result = BonusPackHelper.requestStringFromUrl(url, mUserAgent); //Log.d(BonusPackHelper.LOG_TAG, result); if (result == null) - throw new IOException(); + throw new StatusException(HttpURLConnection.HTTP_NO_CONTENT); try { JsonParser parser = new JsonParser(); JsonElement json = parser.parse(result); JsonArray jResults = json.getAsJsonArray(); - List
list = new ArrayList
(jResults.size()); + List
list = new ArrayList<>(jResults.size()); for (int i=0; i getFromLocationName(String locationName, int maxResults, */ public List
getFromLocationName(String locationName, int maxResults, double lowerLeftLatitude, double lowerLeftLongitude, - double upperRightLatitude, double upperRightLongitude) - throws IOException { - return getFromLocationName(locationName, maxResults, - lowerLeftLatitude, lowerLeftLongitude, + double upperRightLatitude, double upperRightLongitude) throws IOException, StatusException { + return getFromLocationName(locationName, maxResults, + lowerLeftLatitude, lowerLeftLongitude, upperRightLatitude, upperRightLongitude, true); } @@ -287,8 +414,7 @@ public List
getFromLocationName(String locationName, int maxResults, * "display_name": the address, as a single String
* "polygonpoints": the enclosing polygon of the location (depending on setOptions usage), as an ArrayList of GeoPoint
*/ - public List
getFromLocationName(String locationName, int maxResults) - throws IOException { + public List
getFromLocationName(String locationName, int maxResults) throws IOException, StatusException { return getFromLocationName(locationName, maxResults, 0.0, 0.0, 0.0, 0.0, false); } diff --git a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/location/NominatimPOIProvider.java b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/location/NominatimPOIProvider.java index 98615c27..afd33f5b 100644 --- a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/location/NominatimPOIProvider.java +++ b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/location/NominatimPOIProvider.java @@ -7,9 +7,12 @@ import org.json.JSONException; import org.json.JSONObject; import org.osmdroid.bonuspack.utils.BonusPackHelper; +import org.osmdroid.bonuspack.utils.StatusException; import org.osmdroid.util.BoundingBox; import org.osmdroid.util.GeoPoint; +import java.io.IOException; +import java.net.HttpURLConnection; import java.net.URLEncoder; import java.util.ArrayList; @@ -78,17 +81,17 @@ private String getUrlCloseTo(GeoPoint p, String type, * @param url full URL request. Assumes * @return the list of POI, of null if technical issue. */ - public ArrayList getThem(String url){ + public ArrayList getThem(String url) throws IOException, StatusException { Log.d(BonusPackHelper.LOG_TAG, "NominatimPOIProvider:get:"+url); String jString = BonusPackHelper.requestStringFromUrl(url, mUserAgent); if (jString == null) { Log.e(BonusPackHelper.LOG_TAG, "NominatimPOIProvider: request failed."); - return null; + throw new StatusException(HttpURLConnection.HTTP_NO_CONTENT); } try { JSONArray jPlaceIds = new JSONArray(jString); int n = jPlaceIds.length(); - ArrayList pois = new ArrayList(n); + ArrayList pois = new ArrayList<>(n); Bitmap thumbnail = null; for (int i=0; i getThem(String url){ * @return the list of POI close to position, null if technical issue. */ public ArrayList getPOICloseTo(GeoPoint position, String facility, - int maxResults, double maxDistance){ + int maxResults, double maxDistance) throws IOException, StatusException { String url = getUrlCloseTo(position, facility, maxResults, maxDistance); return getThem(url); } @@ -139,7 +142,7 @@ public ArrayList getPOICloseTo(GeoPoint position, String facility, * @param maxResults * @return list of POIs inside the bounding box, null if technical issue. */ - public ArrayList getPOIInside(BoundingBox boundingBox, String facility, int maxResults){ + public ArrayList getPOIInside(BoundingBox boundingBox, String facility, int maxResults) throws IOException, StatusException { String url = getUrlInside(boundingBox, facility, maxResults); return getThem(url); } @@ -155,7 +158,7 @@ public ArrayList getPOIInside(BoundingBox boundingBox, String facility, int * @see org.osmdroid.bonuspack.routing.Road#getRouteLow for simplifying a route path */ public ArrayList getPOIAlong(ArrayList path, String facility, - int maxResults, double maxWidth){ + int maxResults, double maxWidth) throws IOException, StatusException { StringBuilder url = getCommonUrl(facility, maxResults); url.append("&routewidth="+maxWidth); url.append("&route="); diff --git a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/location/OverpassAPIProvider.java b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/location/OverpassAPIProvider.java index 3498efd5..1f5a452b 100644 --- a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/location/OverpassAPIProvider.java +++ b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/location/OverpassAPIProvider.java @@ -16,9 +16,12 @@ import org.osmdroid.bonuspack.kml.KmlPoint; import org.osmdroid.bonuspack.kml.KmlPolygon; import org.osmdroid.bonuspack.utils.BonusPackHelper; +import org.osmdroid.bonuspack.utils.StatusException; import org.osmdroid.util.BoundingBox; import org.osmdroid.util.GeoPoint; +import java.io.IOException; +import java.net.HttpURLConnection; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Map; @@ -109,12 +112,12 @@ protected String tagValueFromJsonNotNull(String key, JsonObject jTags){ * - ways and relations must contain the "center" element.
* @return elements as a list of POI */ - public ArrayList getPOIsFromUrl(String url){ + public ArrayList getPOIsFromUrl(String url) throws IOException, StatusException { Log.d(BonusPackHelper.LOG_TAG, "OverpassAPIProvider:getPOIsFromUrl:"+url); String jString = BonusPackHelper.requestStringFromUrl(url); if (jString == null) { Log.e(BonusPackHelper.LOG_TAG, "OverpassAPIProvider: request failed."); - return null; + throw new StatusException(HttpURLConnection.HTTP_NO_CONTENT); } try { //parse JSON and build POIs @@ -122,7 +125,7 @@ public ArrayList getPOIsFromUrl(String url){ JsonElement json = parser.parse(jString); JsonObject jResult = json.getAsJsonObject(); JsonArray jElements = jResult.get("elements").getAsJsonArray(); - ArrayList pois = new ArrayList(jElements.size()); + ArrayList pois = new ArrayList<>(jElements.size()); for (JsonElement j:jElements){ JsonObject jo = j.getAsJsonObject(); POI poi = new POI(POI.POI_SERVICE_OVERPASS_API); @@ -211,7 +214,7 @@ protected boolean isAnArea(ArrayList coords){ protected ArrayList parseGeometry(JsonObject jo){ JsonArray jGeometry = jo.get("geometry").getAsJsonArray(); - ArrayList coords = new ArrayList(jGeometry.size()); + ArrayList coords = new ArrayList<>(jGeometry.size()); for (JsonElement j:jGeometry){ JsonObject jLatLon = j.getAsJsonObject(); GeoPoint p = geoPointFromJson(jLatLon); @@ -260,7 +263,7 @@ protected KmlGeometry buildGeometry(JsonObject jo){ * - ways and relations must have the "geometry" element
* @return true if ok, false if technical error. */ - public boolean addInKmlFolder(KmlFolder kmlFolder, String url){ + public boolean addInKmlFolder(KmlFolder kmlFolder, String url) throws IOException, StatusException { Log.d(BonusPackHelper.LOG_TAG, "OverpassAPIProvider:addInKmlFolder:"+url); String jString = BonusPackHelper.requestStringFromUrl(url); if (jString == null) { diff --git a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/location/PicasaPOIProvider.java b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/location/PicasaPOIProvider.java index 03bd4d45..ff094fa5 100644 --- a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/location/PicasaPOIProvider.java +++ b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/location/PicasaPOIProvider.java @@ -57,7 +57,12 @@ private String getUrlInside(BoundingBox boundingBox, int maxResults, String quer public ArrayList getThem(String fullUrl){ Log.d(BonusPackHelper.LOG_TAG, "PicasaPOIProvider:get:"+fullUrl); HttpConnection connection = new HttpConnection(); - connection.doGet(fullUrl); + try { + connection.doGet(fullUrl); + } catch (Exception e) { + e.printStackTrace(); + return null; + } InputStream stream = connection.getStream(); if (stream == null){ return null; @@ -102,7 +107,7 @@ class PicasaXMLHandler extends DefaultHandler { int mTotalResults; public PicasaXMLHandler() { - mPOIs = new ArrayList(); + mPOIs = new ArrayList<>(); } @Override public void startElement(String uri, String localName, String qName, @@ -118,7 +123,7 @@ public PicasaXMLHandler() { mPOI.mUrl = mPOI.mUrl.replaceFirst("https://", "http://"); } } - mString = new String(); + mString = ""; } @Override public void characters(char[] ch, int start, int length) diff --git a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/routing/GoogleRoadManager.java b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/routing/GoogleRoadManager.java index 24fd6d30..f5e9459a 100644 --- a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/routing/GoogleRoadManager.java +++ b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/routing/GoogleRoadManager.java @@ -5,6 +5,7 @@ import org.osmdroid.bonuspack.utils.BonusPackHelper; import org.osmdroid.bonuspack.utils.HttpConnection; import org.osmdroid.bonuspack.utils.PolylineEncoder; +import org.osmdroid.bonuspack.utils.StatusException; import org.osmdroid.util.BoundingBox; import org.osmdroid.util.GeoPoint; import org.xml.sax.Attributes; @@ -65,8 +66,10 @@ protected String getUrl(ArrayList waypoints, boolean getAlternates) { /** * @param waypoints list of GeoPoints. Must have at least 2 entries, start and end points. * @return the roads + * @throws IOException if there is problem with internet connection + * @throws StatusException if there si some problem other then internet connection. For problem details see {@link StatusException#getHttpStatusCode()} */ - protected Road[] getRoads(ArrayList waypoints, boolean getAlternate) { + protected Road[] getRoads(ArrayList waypoints, boolean getAlternate) throws IOException, StatusException { String url = getUrl(waypoints, getAlternate); Log.d(BonusPackHelper.LOG_TAG, "GoogleRoadManager.getRoads:" + url); Road[] roads = null; @@ -95,11 +98,11 @@ protected Road[] getRoads(ArrayList waypoints, boolean getAlternate) { return roads; } - @Override public Road[] getRoads(ArrayList waypoints) { + @Override public Road[] getRoads(ArrayList waypoints) throws IOException, StatusException { return getRoads(waypoints, true); } - @Override public Road getRoad(ArrayList waypoints) { + @Override public Road getRoad(ArrayList waypoints) throws IOException, StatusException { Road[] roads = getRoads(waypoints, false); return roads[0]; } diff --git a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/routing/GraphHopperRoadManager.java b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/routing/GraphHopperRoadManager.java index 8dacbf1d..ceb166a2 100644 --- a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/routing/GraphHopperRoadManager.java +++ b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/routing/GraphHopperRoadManager.java @@ -7,9 +7,11 @@ import org.json.JSONObject; import org.osmdroid.bonuspack.utils.BonusPackHelper; import org.osmdroid.bonuspack.utils.PolylineEncoder; +import org.osmdroid.bonuspack.utils.StatusException; import org.osmdroid.util.BoundingBox; import org.osmdroid.util.GeoPoint; +import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; @@ -35,7 +37,7 @@ public class GraphHopperRoadManager extends RoadManager { /** mapping from GraphHopper directions to MapQuest maneuver IDs: */ static final HashMap MANEUVERS; static { - MANEUVERS = new HashMap(); + MANEUVERS = new HashMap<>(); MANEUVERS.put(0, 1); //Continue MANEUVERS.put(1, 6); //Slight right MANEUVERS.put(2, 7); //Right @@ -90,7 +92,7 @@ protected Road[] defaultRoad(ArrayList waypoints) { return roads; } - public Road[] getRoads(ArrayList waypoints, boolean getAlternate) { + public Road[] getRoads(ArrayList waypoints, boolean getAlternate) throws IOException, StatusException { String url = getUrl(waypoints, getAlternate); Log.d(BonusPackHelper.LOG_TAG, "GraphHopper.getRoads:" + url); String jString = BonusPackHelper.requestStringFromUrl(url); @@ -146,12 +148,12 @@ public Road[] getRoads(ArrayList waypoints, boolean getAlternate) { } } - @Override public Road[] getRoads(ArrayList waypoints) { + @Override public Road[] getRoads(ArrayList waypoints) throws IOException, StatusException { return getRoads(waypoints, true); } @Override - public Road getRoad(ArrayList waypoints) { + public Road getRoad(ArrayList waypoints) throws IOException, StatusException { Road[] roads = getRoads(waypoints, false); return roads[0]; } diff --git a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/routing/MapQuestRoadManager.java b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/routing/MapQuestRoadManager.java index 60ee839a..82e46cbf 100644 --- a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/routing/MapQuestRoadManager.java +++ b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/routing/MapQuestRoadManager.java @@ -5,12 +5,14 @@ import org.osmdroid.bonuspack.utils.BonusPackHelper; import org.osmdroid.bonuspack.utils.HttpConnection; import org.osmdroid.bonuspack.utils.PolylineEncoder; +import org.osmdroid.bonuspack.utils.StatusException; import org.osmdroid.util.BoundingBox; import org.osmdroid.util.GeoPoint; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; +import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; @@ -79,8 +81,10 @@ protected String getUrl(ArrayList waypoints) { /** * @param waypoints list of GeoPoints. Must have at least 2 entries, start and end points. * @return the road + * @throws IOException if there is problem with internet connection + * @throws StatusException if there si some problem other then internet connection. For problem details see {@link StatusException#getHttpStatusCode()} */ - @Override public Road getRoad(ArrayList waypoints) { + @Override public Road getRoad(ArrayList waypoints) throws IOException, StatusException { String url = getUrl(waypoints); Log.d(BonusPackHelper.LOG_TAG, "MapQuestRoadManager.getRoute:"+url); Road road = null; @@ -94,7 +98,7 @@ protected String getUrl(ArrayList waypoints) { return road; } - @Override public Road[] getRoads(ArrayList waypoints) { + @Override public Road[] getRoads(ArrayList waypoints) throws IOException, StatusException { Road road = getRoad(waypoints); Road[] roads = new Road[1]; roads[0] = road; @@ -134,7 +138,7 @@ protected ArrayList finalizeNodes(ArrayList mNodes, int n = mNodes.size(); if (n == 0) return mNodes; - ArrayList newNodes = new ArrayList(n); + ArrayList newNodes = new ArrayList<>(n); RoadNode lastNode = null; for (int i=1; i first and last MapQuest nodes are irrelevant. RoadNode node = mNodes.get(i); @@ -163,7 +167,7 @@ protected ArrayList finalizeNodes(ArrayList mNodes, * @return new road shape */ public ArrayList finalizeRoadShape(Road road, ArrayList links){ - ArrayList newShape = new ArrayList(road.mRouteHigh.size()); + ArrayList newShape = new ArrayList<>(road.mRouteHigh.size()); RoadNode nodeStart = road.mNodes.get(0); RoadNode nodeEnd = road.mNodes.get(road.mNodes.size()-1); int shapeIndexStart = links.get(nodeStart.mNextRoadLink).mShapeIndex; diff --git a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/routing/OSRMRoadManager.java b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/routing/OSRMRoadManager.java index 1926d576..dda769ed 100644 --- a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/routing/OSRMRoadManager.java +++ b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/routing/OSRMRoadManager.java @@ -9,9 +9,11 @@ import org.osmdroid.bonuspack.R; import org.osmdroid.bonuspack.utils.BonusPackHelper; import org.osmdroid.bonuspack.utils.PolylineEncoder; +import org.osmdroid.bonuspack.utils.StatusException; import org.osmdroid.util.BoundingBox; import org.osmdroid.util.GeoPoint; +import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; @@ -185,7 +187,7 @@ protected Road[] defaultRoad(ArrayList waypoints){ return roads; } - protected Road[] getRoads(ArrayList waypoints, boolean getAlternate) { + protected Road[] getRoads(ArrayList waypoints, boolean getAlternate) throws IOException, StatusException { String url = getUrl(waypoints, getAlternate); Log.d(BonusPackHelper.LOG_TAG, "OSRMRoadManager.getRoads:" + url); //url = "http://comob.free.fr/osrm_sample.json"; //DEBUG - waiting for OSRM V5 live @@ -276,11 +278,11 @@ protected Road[] getRoads(ArrayList waypoints, boolean getAlternate) { } } - @Override public Road[] getRoads(ArrayList waypoints) { + @Override public Road[] getRoads(ArrayList waypoints) throws IOException, StatusException { return getRoads(waypoints, true); } - @Override public Road getRoad(ArrayList waypoints) { + @Override public Road getRoad(ArrayList waypoints) throws IOException, StatusException { Road[] roads = getRoads(waypoints, false); return roads[0]; } diff --git a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/routing/Road.java b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/routing/Road.java index b9b8c714..8cf39c04 100644 --- a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/routing/Road.java +++ b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/routing/Road.java @@ -155,7 +155,7 @@ protected double distanceLLSquared(GeoPoint p1, GeoPoint p2){ * But OSRM legs are not precise, as there is no node "dedicated" to waypoints. */ public void buildLegs(ArrayList waypoints){ - mLegs = new ArrayList(); + mLegs = new ArrayList<>(); int firstNodeIndex = 0; //For all intermediate waypoints, search the node closest to the waypoint int w = waypoints.size(); diff --git a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/routing/RoadManager.java b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/routing/RoadManager.java index 9eb5cc5d..6bb9550e 100644 --- a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/routing/RoadManager.java +++ b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/routing/RoadManager.java @@ -1,8 +1,10 @@ package org.osmdroid.bonuspack.routing; +import org.osmdroid.bonuspack.utils.StatusException; import org.osmdroid.util.GeoPoint; import org.osmdroid.views.overlay.Polyline; +import java.io.IOException; import java.util.ArrayList; /** @@ -23,8 +25,10 @@ public abstract class RoadManager { * @param waypoints * @return the road found. * In case of error, road status is set to error, and the shape has just straight lines between waypoints. + * @throws IOException if there is problem with internet connection + * @throws StatusException if there si some problem other then internet connection. For problem details see {@link StatusException#getHttpStatusCode()} */ - public abstract Road getRoad(ArrayList waypoints); + public abstract Road getRoad(ArrayList waypoints) throws IOException, StatusException; /** * @param waypoints @@ -32,8 +36,10 @@ public abstract class RoadManager { * Road at index 0 is the shortest (in time). * The array may contain more entries, for alternate routes - assuming the routing service used supports alternate routes. * In case of error, return 1 road with its status set to error, and its shape with just straight lines between waypoints. + * @throws IOException if there is problem with internet connection + * @throws StatusException if there si some problem other then internet connection. For problem details see {@link StatusException#getHttpStatusCode()} */ - public abstract Road[] getRoads(ArrayList waypoints); + public abstract Road[] getRoads(ArrayList waypoints) throws IOException, StatusException; public RoadManager() { mOptions = ""; diff --git a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/utils/BonusPackHelper.java b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/utils/BonusPackHelper.java index 216acc0a..e0df9b63 100644 --- a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/utils/BonusPackHelper.java +++ b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/utils/BonusPackHelper.java @@ -62,8 +62,10 @@ private static String readStream(HttpConnection connection){ * @param url * @param userAgent * @return the whole content, or null if any issue. + * @throws IOException if there is problem with internet connection + * @throws StatusException if there si some problem other then internet connection. For problem details see {@link StatusException#getHttpStatusCode()} */ - public static String requestStringFromUrl(String url, String userAgent) { + public static String requestStringFromUrl(String url, String userAgent) throws IOException, StatusException { HttpConnection connection = new HttpConnection(); if (userAgent != null) connection.setUserAgent(userAgent); @@ -75,9 +77,11 @@ public static String requestStringFromUrl(String url, String userAgent) { /** sends an http request, and returns the whole content result in a String. * @param url - * @return the whole content, or null if any issue. + * @return the whole content, or null if any issue. + * @throws IOException if there is problem with internet connection + * @throws StatusException if there si some problem other then internet connection. For problem details see {@link StatusException#getHttpStatusCode()} */ - public static String requestStringFromUrl(String url) { + public static String requestStringFromUrl(String url) throws IOException, StatusException { return requestStringFromUrl(url, null); } diff --git a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/utils/DouglasPeuckerReducer.java b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/utils/DouglasPeuckerReducer.java index fbc85ee1..e39420c9 100644 --- a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/utils/DouglasPeuckerReducer.java +++ b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/utils/DouglasPeuckerReducer.java @@ -46,7 +46,7 @@ public static ArrayList reduceWithTolerance(ArrayList shape, ); // all done, return the reduced shape - ArrayList newShape = new ArrayList(n); // the new shape to return + ArrayList newShape = new ArrayList<>(n); // the new shape to return for (int i=0; i decode(String encodedString, int precision, bo int index = 0; int len = encodedString.length(); int lat = 0, lng = 0, alt = 0; - ArrayList polyline = new ArrayList(len/3); + ArrayList polyline = new ArrayList<>(len / 3); //capacity estimate: polyline size is roughly 1/3 of string length for a 5digits encoding, 1/5 for 10digits. while (index < len) { diff --git a/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/utils/StatusException.java b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/utils/StatusException.java new file mode 100644 index 00000000..e7a623cf --- /dev/null +++ b/OSMBonusPack/src/main/java/org/osmdroid/bonuspack/utils/StatusException.java @@ -0,0 +1,39 @@ +package org.osmdroid.bonuspack.utils; + +/** + * Exception thrown when server returned status different from http status code 200. + * This means there is connection to server just some problem occurred. For problem details see + * http status code {@link #getHttpStatusCode()}. + * */ +public class StatusException extends Exception { + + private static final long serialVersionUID = 4703847528972168524L; + + private int httpStatusCode; + + public StatusException(int httpStatusCode) { + super("HTTP STATUS CODE: "+httpStatusCode); + this.httpStatusCode = httpStatusCode; + } + + public StatusException(String message, int httpStatusCode) { + super(message); + this.httpStatusCode = httpStatusCode; + } + + public StatusException(String message, Throwable cause, int httpStatusCode) { + super(message, cause); + this.httpStatusCode = httpStatusCode; + } + + public StatusException(Throwable cause, int httpStatusCode) { + super(cause); + this.httpStatusCode = httpStatusCode; + } + + /** @return httpStatusCode - http status code returned from server. */ + public int getHttpStatusCode() { + return httpStatusCode; + } + +} diff --git a/OSMBonusPackTuto/build.gradle b/OSMBonusPackTuto/build.gradle index 0b03b111..2d02fed8 100644 --- a/OSMBonusPackTuto/build.gradle +++ b/OSMBonusPackTuto/build.gradle @@ -1,13 +1,13 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 23 - buildToolsVersion "23.0.3" + compileSdkVersion 26 + buildToolsVersion "26.0.2" defaultConfig { applicationId "com.example.osmbonuspacktuto" - minSdkVersion 10 - targetSdkVersion 22 //the limit to avoid implementing new permissions granting. + minSdkVersion 14 + targetSdkVersion 25 //the limit to avoid implementing new permissions granting. versionCode 1 versionName "1.0" } @@ -17,6 +17,9 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } + lintOptions{ + disable 'MissingTranslation' + } } repositories { @@ -27,21 +30,21 @@ repositories { } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) + implementation fileTree(dir: 'libs', include: ['*.jar']) //including when part of the same project - //compile project(":OSMBonusPack") + //implementation project(":OSMBonusPack") //including using JitPack: - compile 'com.github.MKergall:osmbonuspack:6.0' + implementation 'com.github.MKergall:osmbonuspack:6.0' // including as local lib /* - compile(name: 'osmbonuspack_v6.0', ext: 'aar') - compile 'org.osmdroid:osmdroid-android:5.5:release@aar' - compile "com.android.support:support-v4:23.1.1" - compile 'org.apache.commons:commons-lang3:3.3.2' - compile 'com.google.code.gson:gson:2.7' - compile 'com.squareup.okhttp3:okhttp:3.4.1' + implementation(name: 'osmbonuspack_v6.0', ext: 'aar') + implementation 'org.osmdroid:osmdroid-android:5.5:release@aar' + implementation "com.android.support:support-v4:23.1.1" + implementation 'org.apache.commons:commons-lang3:3.3.2' + implementation 'com.google.code.gson:gson:2.7' + implementation 'com.squareup.okhttp3:okhttp:3.4.1' */ } diff --git a/OSMBonusPackTuto/src/main/java/com/example/osmbonuspacktuto/MainActivity.java b/OSMBonusPackTuto/src/main/java/com/example/osmbonuspacktuto/MainActivity.java index 17216227..7dd9b2f9 100644 --- a/OSMBonusPackTuto/src/main/java/com/example/osmbonuspacktuto/MainActivity.java +++ b/OSMBonusPackTuto/src/main/java/com/example/osmbonuspacktuto/MainActivity.java @@ -77,7 +77,7 @@ public class MainActivity extends Activity implements MapEventsReceiver, MapView //Introduction super.onCreate(savedInstanceState); setContentView(R.layout.main); - map = (MapView) findViewById(R.id.map); + map = findViewById(R.id.map); map.setBuiltInZoomControls(true); map.setMultiTouchControls(true); GeoPoint startPoint = new GeoPoint(48.13, -1.63); @@ -102,7 +102,7 @@ public class MainActivity extends Activity implements MapEventsReceiver, MapView //2. Playing with the RoadManager //roadManager roadManager = new MapQuestRoadManager("YOUR_API_KEY"); //roadManager.addRequestOption("routeType=bicycle"); - ArrayList waypoints = new ArrayList(); + ArrayList waypoints = new ArrayList<>(); waypoints.add(startPoint); GeoPoint endPoint = new GeoPoint(48.4, -1.9); waypoints.add(endPoint); @@ -257,7 +257,7 @@ class OnMarkerDragListenerDrawer implements OnMarkerDragListener { Polyline mPolyline; OnMarkerDragListenerDrawer() { - mTrace = new ArrayList(100); + mTrace = new ArrayList<>(100); mPolyline = new Polyline(); mPolyline.setColor(0xAA0000FF); mPolyline.setWidth(2.0f); @@ -286,7 +286,7 @@ class CustomInfoWindow extends MarkerInfoWindow { public CustomInfoWindow(MapView mapView) { super(org.osmdroid.bonuspack.R.layout.bonuspack_bubble, mapView); - Button btn = (Button) (mView.findViewById(org.osmdroid.bonuspack.R.id.bubble_moreinfo)); + Button btn = mView.findViewById(org.osmdroid.bonuspack.R.id.bubble_moreinfo); btn.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { if (mSelectedPoi.mUrl != null) { @@ -308,7 +308,7 @@ public void onOpen(Object item) { //8. put thumbnail image in bubble, fetching the thumbnail in background: if (mSelectedPoi.mThumbnailPath != null) { - ImageView imageView = (ImageView) mView.findViewById(org.osmdroid.bonuspack.R.id.bubble_image); + ImageView imageView = mView.findViewById(org.osmdroid.bonuspack.R.id.bubble_image); mSelectedPoi.fetchThumbnailOnThread(imageView); } } diff --git a/OSMNavigator/build.gradle b/OSMNavigator/build.gradle index a8ebee64..eec9ac93 100644 --- a/OSMNavigator/build.gradle +++ b/OSMNavigator/build.gradle @@ -1,14 +1,15 @@ apply plugin: 'com.android.application' + android { - compileSdkVersion 23 - buildToolsVersion "23.0.3" + compileSdkVersion 26 + buildToolsVersion "26.0.2" defaultConfig { applicationId "com.osmnavigator" - minSdkVersion 10 - targetSdkVersion 23 - versionCode 17 + minSdkVersion 14 + targetSdkVersion 25 + versionCode 18 versionName "1.7" } buildTypes { @@ -17,14 +18,32 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } + lintOptions{ + disable 'MissingTranslation' + } + + // `return void` removes the lint error: `Not all execution paths return a value`. + return void +} + +//for use of aar files as libs +repositories { + jcenter() + flatDir { + dirs 'libs' + } } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) + implementation fileTree(dir: 'libs', include: ['*.jar']) - compile project(":OSMBonusPack") + implementation project(":OSMBonusPack") + implementation 'com.google.code.gson:gson:2.8.0' + implementation 'org.osmdroid:osmdroid-android:5.5:release@aar' + implementation "com.android.support:support-v4:26.1.0" - compile 'org.osmdroid:osmdroid-mapsforge:5.5:release@aar' - compile 'org.mapsforge:mapsforge-map-android:0.6.1' - compile 'org.mapsforge:mapsforge-map:0.6.1' -} + implementation 'org.osmdroid:osmdroid-mapsforge:5.5:release@aar' + implementation 'org.mapsforge:mapsforge-map-android:0.6.1' + implementation 'org.mapsforge:mapsforge-map:0.6.1' +// implementation(name:'osmdroid-android-5.5-release', ext:'aar') +} \ No newline at end of file diff --git a/OSMNavigator/libs/osmdroid-android-5.5-release.aar b/OSMNavigator/libs/osmdroid-android-5.5-release.aar new file mode 100644 index 00000000..b0f0b99c Binary files /dev/null and b/OSMNavigator/libs/osmdroid-android-5.5-release.aar differ diff --git a/OSMNavigator/src/main/java/com/osmnavigator/AutoCompleteOnPreferences.java b/OSMNavigator/src/main/java/com/osmnavigator/AutoCompleteOnPreferences.java index 039f3e49..edfcaeaa 100644 --- a/OSMNavigator/src/main/java/com/osmnavigator/AutoCompleteOnPreferences.java +++ b/OSMNavigator/src/main/java/com/osmnavigator/AutoCompleteOnPreferences.java @@ -60,8 +60,7 @@ public void setPrefKeys(String appKey, String prefName){ protected void setPreferences(){ String[] prefs = getPreferences(); - ArrayAdapter adapter = new ArrayAdapter(getContext(), - android.R.layout.simple_dropdown_item_1line, prefs); + ArrayAdapter adapter = new ArrayAdapter<>(getContext(), android.R.layout.simple_dropdown_item_1line, prefs); this.setAdapter(adapter); } @@ -94,7 +93,7 @@ public static void storePreference(Context context, String value, String appKey, JSONArray prefValuesArray; try { prefValuesArray = new JSONArray(prefValues); - LinkedList prefValuesList = new LinkedList(); + LinkedList prefValuesList = new LinkedList<>(); for (int i=0; i friends = myIntent.getParcelableArrayListExtra("FRIENDS"); @@ -98,12 +98,12 @@ public View getView(int position, View convertView, ViewGroup viewGroup) { .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.item_layout, null); } - TextView tvTitle = (TextView) convertView.findViewById(R.id.title); + TextView tvTitle = convertView.findViewById(R.id.title); tvTitle.setText(entry.mNickName); - TextView tvDetails = (TextView) convertView.findViewById(R.id.details); + TextView tvDetails = convertView.findViewById(R.id.details); tvDetails.setText(entry.mMessage); - ImageView ivPhoto = (ImageView) convertView.findViewById(R.id.thumbnail); + ImageView ivPhoto = convertView.findViewById(R.id.thumbnail); ivPhoto.setImageDrawable(mContext.getResources().getDrawable(R.drawable.ic_menu_sharing/*entry.mThumbnail*/)); //entry.fetchThumbnailOnThread(ivPhoto); diff --git a/OSMNavigator/src/main/java/com/osmnavigator/FriendsManager.java b/OSMNavigator/src/main/java/com/osmnavigator/FriendsManager.java index da0a2d4b..72fb6b88 100644 --- a/OSMNavigator/src/main/java/com/osmnavigator/FriendsManager.java +++ b/OSMNavigator/src/main/java/com/osmnavigator/FriendsManager.java @@ -21,12 +21,14 @@ import com.google.gson.JsonSyntaxException; import org.osmdroid.bonuspack.utils.BonusPackHelper; +import org.osmdroid.bonuspack.utils.StatusException; import org.osmdroid.util.GeoPoint; import org.osmdroid.views.MapView; import org.osmdroid.views.overlay.FolderOverlay; import org.osmdroid.views.overlay.Marker; import org.osmdroid.views.overlay.Overlay; +import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.ArrayList; @@ -64,7 +66,7 @@ void onCreate(Bundle savedInstanceState) { mFriends = null; mIsSharing = false; } - mFriendsButton = (Button) mActivity.findViewById(R.id.buttonFriends); + mFriendsButton = mActivity.findViewById(R.id.buttonFriends); mFriendsButton.setVisibility(mIsSharing ? View.VISIBLE : View.GONE); mFriendsButton.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { @@ -161,7 +163,14 @@ String callStartSharing(String nickname, String group, String message) { nameValuePairs.add(new BasicNameValuePair("message", message)); String result = BonusPackHelper.requestStringFromPost(url, nameValuePairs); */ - String result = BonusPackHelper.requestStringFromUrl(url); + String result; + try { + result = BonusPackHelper.requestStringFromUrl(url); + } catch (IOException e) { + return "Problem with server communication, check internet connection"; + } catch (StatusException e) { + return "Problem with server communication httpStatusCode:"+e.getHttpStatusCode(); + } if (result == null) { return "Technical error with the server"; } @@ -235,7 +244,14 @@ String callUpdateSharing() { } catch (UnsupportedEncodingException e) { } Log.d(BonusPackHelper.LOG_TAG, "callUpdateSharing:" + url); - String result = BonusPackHelper.requestStringFromUrl(url); + String result; + try { + result = BonusPackHelper.requestStringFromUrl(url); + } catch (IOException e) { + return "Problem with server communication, check internet connection"; + } catch (StatusException e) { + return "Problem with server communication httpStatusCode:"+e.getHttpStatusCode(); + } if (result == null) { return "Technical error with the server"; } @@ -332,7 +348,14 @@ String callStopSharing() { + "user_id=" + URLEncoder.encode(getUniqueId(), "UTF-8"); } catch (UnsupportedEncodingException e) { } - String result = BonusPackHelper.requestStringFromUrl(url); + String result; + try { + result = BonusPackHelper.requestStringFromUrl(url); + } catch (IOException e) { + return "Problem with server communication, check internet connection"; + } catch (StatusException e) { + return "Problem with server communication httpStatusCode:"+e.getHttpStatusCode(); + } if (result == null) { return "Technical error with the server"; } diff --git a/OSMNavigator/src/main/java/com/osmnavigator/KmlListAdapter.java b/OSMNavigator/src/main/java/com/osmnavigator/KmlListAdapter.java index a50a7949..5cf5064d 100644 --- a/OSMNavigator/src/main/java/com/osmnavigator/KmlListAdapter.java +++ b/OSMNavigator/src/main/java/com/osmnavigator/KmlListAdapter.java @@ -48,7 +48,7 @@ public KmlListAdapter(Context context, KmlFolder root) { LayoutInflater inflater = (LayoutInflater) viewGroup.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.kml_list_item, null); } - TextView itemText = (TextView) convertView.findViewById(R.id.listItemTxt); + TextView itemText = convertView.findViewById(R.id.listItemTxt); itemText.setText(item.mName); //Handle checkbox: @@ -67,7 +67,7 @@ public KmlListAdapter(Context context, KmlFolder root) { } */ - ImageView img = (ImageView)convertView.findViewById(R.id.listItemImg); + ImageView img = convertView.findViewById(R.id.listItemImg); if (item instanceof KmlFolder) { img.setImageResource(R.drawable.moreinfo_arrow); } else if (item instanceof KmlPlacemark){ diff --git a/OSMNavigator/src/main/java/com/osmnavigator/KmlStyleActivity.java b/OSMNavigator/src/main/java/com/osmnavigator/KmlStyleActivity.java index 47fff2fd..5dc93701 100644 --- a/OSMNavigator/src/main/java/com/osmnavigator/KmlStyleActivity.java +++ b/OSMNavigator/src/main/java/com/osmnavigator/KmlStyleActivity.java @@ -40,21 +40,21 @@ public class KmlStyleActivity extends Activity { mStyle.mPolyStyle = new ColorStyle(); } - eStyleId = (EditText)findViewById(R.id.style_id); + eStyleId = findViewById(R.id.style_id); mInitialStyleId = getIntent().getExtras().getString("STYLE_ID"); eStyleId.setText(mInitialStyleId); - eIconHref = (EditText)findViewById(R.id.icon); + eIconHref = findViewById(R.id.icon); if (mStyle.mIconStyle.mHref != null) eIconHref.setText(mStyle.mIconStyle.mHref); - eOutlineColor = (EditText)findViewById(R.id.outlineColor); + eOutlineColor = findViewById(R.id.outlineColor); eOutlineColor.setText(mStyle.mLineStyle.colorAsAndroidString()); - tOutlineWidthValue = (TextView)findViewById(R.id.outlineWidthValue); + tOutlineWidthValue = findViewById(R.id.outlineWidthValue); tOutlineWidthValue.setText(""+(int)mStyle.mLineStyle.mWidth); - sbOutlineWidth = (SeekBar)findViewById(R.id.outlineWidth); + sbOutlineWidth = findViewById(R.id.outlineWidth); sbOutlineWidth.setProgress((int)mStyle.mLineStyle.mWidth); sbOutlineWidth.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { @@ -64,10 +64,10 @@ public class KmlStyleActivity extends Activity { @Override public void onStopTrackingTouch(SeekBar seekBar) {} }); - eFillColor = (EditText)findViewById(R.id.fillColor); + eFillColor = findViewById(R.id.fillColor); eFillColor.setText(mStyle.mPolyStyle.colorAsAndroidString()); - Button btnOk = (Button) findViewById(R.id.btnOK); + Button btnOk = findViewById(R.id.btnOK); btnOk.setOnClickListener( new View.OnClickListener() { public void onClick(View view) { save(); diff --git a/OSMNavigator/src/main/java/com/osmnavigator/KmlStyleListAdapter.java b/OSMNavigator/src/main/java/com/osmnavigator/KmlStyleListAdapter.java index 22350782..2f2ee981 100644 --- a/OSMNavigator/src/main/java/com/osmnavigator/KmlStyleListAdapter.java +++ b/OSMNavigator/src/main/java/com/osmnavigator/KmlStyleListAdapter.java @@ -40,10 +40,10 @@ public KmlStyleListAdapter(Context context, ArrayList styleList) { LayoutInflater inflater = (LayoutInflater) viewGroup.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.kml_list_item, null); } - TextView itemText = (TextView) convertView.findViewById(R.id.listItemTxt); + TextView itemText = convertView.findViewById(R.id.listItemTxt); itemText.setText(item); - ImageView img = (ImageView)convertView.findViewById(R.id.listItemImg); + ImageView img = convertView.findViewById(R.id.listItemImg); Style style = MapActivity.mKmlDocument.getStyle(item); if (style != null && style.mIconStyle != null && style.mIconStyle.mIcon != null) img.setImageDrawable(style.mIconStyle.getFinalIcon(convertView.getContext())); diff --git a/OSMNavigator/src/main/java/com/osmnavigator/KmlStylesActivity.java b/OSMNavigator/src/main/java/com/osmnavigator/KmlStylesActivity.java index c6e6c42d..094f22d1 100644 --- a/OSMNavigator/src/main/java/com/osmnavigator/KmlStylesActivity.java +++ b/OSMNavigator/src/main/java/com/osmnavigator/KmlStylesActivity.java @@ -30,13 +30,13 @@ public class KmlStylesActivity extends Activity { ListView mListView; HashMap mStyles; //the genuine Styles of the KmlDocument - static ArrayList mStyleList = new ArrayList(); //the list of style names, as an array + static ArrayList mStyleList = new ArrayList<>(); //the list of style names, as an array static int mPosition; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.kml_styles); - mListView = (ListView) findViewById(R.id.listviewKml); + mListView = findViewById(R.id.listviewKml); registerForContextMenu(mListView); mStyles = MapActivity.mKmlDocument.getStyles(); diff --git a/OSMNavigator/src/main/java/com/osmnavigator/KmlTreeActivity.java b/OSMNavigator/src/main/java/com/osmnavigator/KmlTreeActivity.java index 4a1b7348..8aa3cebe 100644 --- a/OSMNavigator/src/main/java/com/osmnavigator/KmlTreeActivity.java +++ b/OSMNavigator/src/main/java/com/osmnavigator/KmlTreeActivity.java @@ -37,20 +37,20 @@ public class KmlTreeActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.kml_main); - mListView = (ListView) findViewById(R.id.listviewKml); + mListView = findViewById(R.id.listviewKml); registerForContextMenu(mListView); mCurrentKmlFeature = MapActivity.mKmlStack.peek(); mKmlClipboard = MapActivity.mKmlClipboard; - eHeader = (EditText)findViewById(R.id.name); + eHeader = findViewById(R.id.name); eHeader.setText(mCurrentKmlFeature.mName); - eDescription = (EditText)findViewById(R.id.description); + eDescription = findViewById(R.id.description); eDescription.setText(mCurrentKmlFeature.mDescription); - sStyleSpinner = (Spinner) findViewById(R.id.styleSpinner); - ArrayAdapter spinnerAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, stylesWithEmpty()); + sStyleSpinner = findViewById(R.id.styleSpinner); + ArrayAdapter spinnerAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, stylesWithEmpty()); spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); sStyleSpinner.setAdapter(spinnerAdapter); if (mCurrentKmlFeature.mStyle != null){ @@ -58,7 +58,7 @@ public class KmlTreeActivity extends Activity { sStyleSpinner.setSelection(spinnerPosition); } - CheckBox cVisible = (CheckBox)findViewById(R.id.checkbox_visible); + CheckBox cVisible = findViewById(R.id.checkbox_visible); cVisible.setChecked(mCurrentKmlFeature.mVisibility); if (mCurrentKmlFeature instanceof KmlFolder){ diff --git a/OSMNavigator/src/main/java/com/osmnavigator/MapActivity.java b/OSMNavigator/src/main/java/com/osmnavigator/MapActivity.java index 164f1c0f..85530f1e 100644 --- a/OSMNavigator/src/main/java/com/osmnavigator/MapActivity.java +++ b/OSMNavigator/src/main/java/com/osmnavigator/MapActivity.java @@ -69,6 +69,7 @@ import org.osmdroid.bonuspack.routing.RoadManager; import org.osmdroid.bonuspack.routing.RoadNode; import org.osmdroid.bonuspack.utils.BonusPackHelper; +import org.osmdroid.bonuspack.utils.StatusException; import org.osmdroid.events.MapEventsReceiver; import org.osmdroid.mapsforge.MapsForgeTileProvider; import org.osmdroid.mapsforge.MapsForgeTileSource; @@ -189,7 +190,7 @@ public class MapActivity extends Activity implements MapEventsReceiver, Location flickrApiKey = ManifestUtil.retrieveKey(this, "FLICKR_API_KEY"); geonamesAccount = ManifestUtil.retrieveKey(this, "GEONAMES_ACCOUNT"); - map = (MapView) findViewById(R.id.map); + map = findViewById(R.id.map); String tileProviderName = prefs.getString("TILE_PROVIDER", "Mapnik"); mNightMode = prefs.getBoolean("NIGHT_MODE", false); @@ -259,7 +260,7 @@ public class MapActivity extends Activity implements MapEventsReceiver, Location updateUIWithItineraryMarkers(); //Tracking system: - mTrackingModeButton = (Button)findViewById(R.id.buttonTrackingMode); + mTrackingModeButton = findViewById(R.id.buttonTrackingMode); mTrackingModeButton.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { mTrackingMode = !mTrackingMode; @@ -272,20 +273,20 @@ public void onClick(View view) { } else mTrackingMode = false; - AutoCompleteOnPreferences departureText = (AutoCompleteOnPreferences) findViewById(R.id.editDeparture); + AutoCompleteOnPreferences departureText = findViewById(R.id.editDeparture); departureText.setPrefKeys(SHARED_PREFS_APPKEY, PREF_LOCATIONS_KEY); - Button searchDepButton = (Button)findViewById(R.id.buttonSearchDep); + Button searchDepButton = findViewById(R.id.buttonSearchDep); searchDepButton.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { handleSearchButton(START_INDEX, R.id.editDeparture); } }); - AutoCompleteOnPreferences destinationText = (AutoCompleteOnPreferences) findViewById(R.id.editDestination); + AutoCompleteOnPreferences destinationText = findViewById(R.id.editDestination); destinationText.setPrefKeys(SHARED_PREFS_APPKEY, PREF_LOCATIONS_KEY); - Button searchDestButton = (Button)findViewById(R.id.buttonSearchDest); + Button searchDestButton = findViewById(R.id.buttonSearchDest); searchDestButton.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { handleSearchButton(DEST_INDEX, R.id.editDestination); @@ -325,11 +326,10 @@ public void onClick(View view) { //POIs: //POI search interface: String[] poiTags = getResources().getStringArray(R.array.poi_tags); - poiTagText = (AutoCompleteTextView) findViewById(R.id.poiTag); - ArrayAdapter poiAdapter = new ArrayAdapter(this, - android.R.layout.simple_dropdown_item_1line, poiTags); + poiTagText = findViewById(R.id.poiTag); + ArrayAdapter poiAdapter = new ArrayAdapter<>(this, android.R.layout.simple_dropdown_item_1line, poiTags); poiTagText.setAdapter(poiAdapter); - Button setPOITagButton = (Button) findViewById(R.id.buttonSetPOITag); + Button setPOITagButton = findViewById(R.id.buttonSetPOITag); setPOITagButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { //Hide the soft keyboard: @@ -364,7 +364,7 @@ public void onClick(View v) { updateUIWithKml(); } else { //first launch: mKmlDocument = new KmlDocument(); - mKmlStack = new Stack(); + mKmlStack = new Stack<>(); mKmlClipboard = new KmlFolder(); //check if intent has been passed with a kml URI to load (url or file) Intent onCreateIntent = getIntent(); @@ -380,7 +380,7 @@ public void onClick(View v) { checkPermissions(); - Button menuButton = (Button) findViewById(R.id.buttonMenu); + Button menuButton = findViewById(R.id.buttonMenu); menuButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -596,7 +596,13 @@ public String getAddress(GeoPoint p){ try { double dLatitude = p.getLatitude(); double dLongitude = p.getLongitude(); - List
addresses = geocoder.getFromLocation(dLatitude, dLongitude, 1); + List
addresses = null; + try { + addresses = geocoder.getFromLocation(dLatitude, dLongitude, 1); + } catch (StatusException e) { + e.printStackTrace(); + return ""; + } StringBuilder sb = new StringBuilder(); if (addresses.size() > 0) { Address address = addresses.get(0); @@ -674,7 +680,7 @@ protected void onPostExecute(List
foundAdresses) { * Geocoding of the departure or destination address */ public void handleSearchButton(int index, int editResId){ - EditText locationEdit = (EditText)findViewById(editResId); + EditText locationEdit = findViewById(editResId); //Hide the soft keyboard: InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(locationEdit.getWindowToken(), 0); @@ -862,7 +868,7 @@ void selectRoad(int roadIndex){ mSelectedRoad = roadIndex; putRoadNodes(mRoads[roadIndex]); //Set route info in the text view: - TextView textView = (TextView)findViewById(R.id.routeInfo); + TextView textView = findViewById(R.id.routeInfo); textView.setText(mRoads[roadIndex].getLengthDurationText(this, -1)); for (int i=0; i mapOverlays = map.getOverlays(); if (mRoadOverlays != null){ @@ -963,7 +969,12 @@ protected Road[] doInBackground(Object... params) { default: return null; } - return roadManager.getRoads(waypoints); + try { + return roadManager.getRoads(waypoints); + } catch (Exception e) { + e.printStackTrace(); + } + return null; } protected void onPostExecute(Road[] result) { @@ -1086,27 +1097,35 @@ String getOSMTag(String humanReadableFeature){ private class POILoadingTask extends AsyncTask> { String mFeatureTag; String message; + BoundingBox bb; + + @Override + protected void onPreExecute() { + super.onPreExecute(); + bb = map.getBoundingBox(); + } + protected ArrayList doInBackground(Object... params) { mFeatureTag = (String)params[0]; - BoundingBox bb = map.getBoundingBox(); - if (mFeatureTag == null || mFeatureTag.equals("")){ - return null; - } else if (mFeatureTag.equals("wikipedia")){ - GeoNamesPOIProvider poiProvider = new GeoNamesPOIProvider(geonamesAccount); - //Get POI inside the bounding box of the current map view: - ArrayList pois = poiProvider.getPOIInside(bb, 30); - return pois; - } else if (mFeatureTag.equals("flickr")){ - FlickrPOIProvider poiProvider = new FlickrPOIProvider(flickrApiKey); - ArrayList pois = poiProvider.getPOIInside(bb, 30); - return pois; - } else if (mFeatureTag.startsWith("picasa")){ - PicasaPOIProvider poiProvider = new PicasaPOIProvider(null); - //allow to search for keywords among picasa photos: - String q = mFeatureTag.substring("picasa".length()); - ArrayList pois = poiProvider.getPOIInside(bb, 50, q); - return pois; - } else { + try { + if (mFeatureTag == null || mFeatureTag.equals("")){ + return null; + } else if (mFeatureTag.equals("wikipedia")){ + GeoNamesPOIProvider poiProvider = new GeoNamesPOIProvider(geonamesAccount); + //Get POI inside the bounding box of the current map view: + ArrayList pois = poiProvider.getPOIInside(bb, 30); + return pois; + } else if (mFeatureTag.equals("flickr")){ + FlickrPOIProvider poiProvider = new FlickrPOIProvider(flickrApiKey); + ArrayList pois = poiProvider.getPOIInside(bb, 30); + return pois; + } else if (mFeatureTag.startsWith("picasa")){ + PicasaPOIProvider poiProvider = new PicasaPOIProvider(null); + //allow to search for keywords among picasa photos: + String q = mFeatureTag.substring("picasa".length()); + ArrayList pois = poiProvider.getPOIInside(bb, 50, q); + return pois; + } else { /* NominatimPOIProvider poiProvider = new NominatimPOIProvider(); ArrayList pois; @@ -1116,15 +1135,19 @@ protected ArrayList doInBackground(Object... params) { pois = poiProvider.getPOIAlong(mRoad.getRouteLow(), mFeatureTag, 100, 2.0); } */ - OverpassAPIProvider overpassProvider = new OverpassAPIProvider(); - String osmTag = getOSMTag(mFeatureTag); - if (osmTag == null){ - message = mFeatureTag + " is not a valid feature."; - return null; + OverpassAPIProvider overpassProvider = new OverpassAPIProvider(); + String osmTag = getOSMTag(mFeatureTag); + if (osmTag == null){ + message = mFeatureTag + " is not a valid feature."; + return null; + } + String oUrl = overpassProvider.urlForPOISearch(osmTag, bb, 100, 10); + ArrayList pois = overpassProvider.getPOIsFromUrl(oUrl); + return pois; } - String oUrl = overpassProvider.urlForPOISearch(osmTag, bb, 100, 10); - ArrayList pois = overpassProvider.getPOIsFromUrl(oUrl); - return pois; + } catch (Exception e){ + message = "Problem with server connection. "+e.getMessage(); + return null; } } protected void onPostExecute(ArrayList pois) { @@ -1238,7 +1261,7 @@ public void onClick(DialogInterface dialog, int which) { builder.show(); } - boolean getKMLFromOverpass(String query){ + boolean getKMLFromOverpass(String query) throws IOException, StatusException { OverpassAPIProvider overpassProvider = new OverpassAPIProvider(); String oUrl = overpassProvider.urlForTagSearchKml(query, map.getBoundingBox(), 500, 30); return overpassProvider.addInKmlFolder(mKmlDocument.mKmlRoot, oUrl); @@ -1274,7 +1297,11 @@ class KmlLoadingTask extends AsyncTask{ boolean ok = false; if (isOverpassRequest){ //mUri contains the query - ok = getKMLFromOverpass(mUri); + try { + ok = getKMLFromOverpass(mUri); + } catch (Exception e) { + e.printStackTrace(); + } } else if (mUri.startsWith("file:/")){ mUri = mUri.substring("file:/".length()); File file = new File(mUri); @@ -1386,7 +1413,7 @@ void addKmlPoint(GeoPoint position){ @Override public boolean longPressHelper(GeoPoint p) { mClickedGeoPoint = p; - Button searchButton = (Button)findViewById(R.id.buttonSearchDest); + Button searchButton = findViewById(R.id.buttonSearchDest); openContextMenu(searchButton); //menu is hooked on the "Search Destination" button, as it must be hooked somewhere. return true; @@ -1698,7 +1725,7 @@ boolean setMapsForgeTileProvider(){ if (prevLocation != null && pLoc.getProvider().equals(LocationManager.GPS_PROVIDER)){ mSpeed = pLoc.getSpeed() * 3.6; long speedInt = Math.round(mSpeed); - TextView speedTxt = (TextView)findViewById(R.id.speed); + TextView speedTxt = findViewById(R.id.speed); speedTxt.setText(speedInt + " km/h"); //TODO: check if speed is not too small diff --git a/OSMNavigator/src/main/java/com/osmnavigator/POIActivity.java b/OSMNavigator/src/main/java/com/osmnavigator/POIActivity.java index 44f54f48..86737e95 100644 --- a/OSMNavigator/src/main/java/com/osmnavigator/POIActivity.java +++ b/OSMNavigator/src/main/java/com/osmnavigator/POIActivity.java @@ -28,10 +28,10 @@ public class POIActivity extends Activity { super.onCreate(savedInstanceState); setContentView(R.layout.items_list); - TextView title = (TextView)findViewById(R.id.title); + TextView title = findViewById(R.id.title); title.setText("Features"); - ListView list = (ListView)findViewById(R.id.items); + ListView list = findViewById(R.id.items); Intent myIntent = getIntent(); //STATIC - final ArrayList pois = myIntent.getParcelableArrayListExtra("POI"); @@ -87,12 +87,12 @@ public POIAdapter(Context context, ArrayList pois) { .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.item_layout, null); } - TextView tvTitle = (TextView)convertView.findViewById(R.id.title); + TextView tvTitle = convertView.findViewById(R.id.title); tvTitle.setText(entry.mType); - TextView tvDetails = (TextView)convertView.findViewById(R.id.details); + TextView tvDetails = convertView.findViewById(R.id.details); tvDetails.setText(entry.mDescription); - ImageView ivManeuver = (ImageView)convertView.findViewById(R.id.thumbnail); + ImageView ivManeuver = convertView.findViewById(R.id.thumbnail); //ivManeuver.setImageBitmap(entry.mThumbnail); entry.fetchThumbnailOnThread(ivManeuver); diff --git a/OSMNavigator/src/main/java/com/osmnavigator/RouteActivity.java b/OSMNavigator/src/main/java/com/osmnavigator/RouteActivity.java index 9f82a459..96cad17d 100644 --- a/OSMNavigator/src/main/java/com/osmnavigator/RouteActivity.java +++ b/OSMNavigator/src/main/java/com/osmnavigator/RouteActivity.java @@ -31,7 +31,7 @@ public class RouteActivity extends Activity { super.onCreate(savedInstanceState); setContentView(R.layout.items_list); - ListView list = (ListView) findViewById(R.id.items); + ListView list = findViewById(R.id.items); Intent myIntent = getIntent(); final int selectedRoad = myIntent.getIntExtra("SELECTED_ROAD", 0); @@ -89,14 +89,14 @@ public RoadNodesAdapter(Context context, Road road) { .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.item_layout, null); } - TextView tvTitle = (TextView)convertView.findViewById(R.id.title); + TextView tvTitle = convertView.findViewById(R.id.title); String instructions = (entry.mInstructions==null ? "" : entry.mInstructions); tvTitle.setText("" + (position+1) + ". " + instructions); - TextView tvDetails = (TextView)convertView.findViewById(R.id.details); + TextView tvDetails = convertView.findViewById(R.id.details); tvDetails.setText(Road.getLengthDurationText(mContext, entry.mLength, entry.mDuration)); int iconId = iconIds.getResourceId(entry.mManeuverType, R.drawable.ic_empty); Drawable icon = mContext.getResources().getDrawable(iconId); - ImageView ivManeuver = (ImageView)convertView.findViewById(R.id.thumbnail); + ImageView ivManeuver = convertView.findViewById(R.id.thumbnail); ivManeuver.setImageDrawable(icon); return convertView; } diff --git a/OSMNavigator/src/main/java/com/osmnavigator/StartSharingActivity.java b/OSMNavigator/src/main/java/com/osmnavigator/StartSharingActivity.java index 088fbe44..64777588 100644 --- a/OSMNavigator/src/main/java/com/osmnavigator/StartSharingActivity.java +++ b/OSMNavigator/src/main/java/com/osmnavigator/StartSharingActivity.java @@ -20,15 +20,15 @@ protected void onCreate(Bundle savedInstanceState) { SharedPreferences SP = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); - eNickName = (EditText) findViewById(R.id.nickname); + eNickName = findViewById(R.id.nickname); eNickName.setText(SP.getString("NICKNAME", "")); - eGroup = (EditText) findViewById(R.id.group); + eGroup = findViewById(R.id.group); eGroup.setText(SP.getString("GROUP", "")); - eMessage = (EditText) findViewById(R.id.message); + eMessage = findViewById(R.id.message); - Button btnOk = (Button) findViewById(R.id.btnOK); + Button btnOk = findViewById(R.id.btnOK); btnOk.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { saveAndFinish(); diff --git a/OSMNavigator/src/main/res/values/osm_poi_tags.xml b/OSMNavigator/src/main/res/values/osm_poi_tags.xml index 6b959f20..70fd0a44 100644 --- a/OSMNavigator/src/main/res/values/osm_poi_tags.xml +++ b/OSMNavigator/src/main/res/values/osm_poi_tags.xml @@ -1,11 +1,11 @@ - + - + airport|aeroway=aerodrome diff --git a/OSMNavigator/src/main/res/values/poi_tags.xml b/OSMNavigator/src/main/res/values/poi_tags.xml index eb9a726c..b1eaa204 100644 --- a/OSMNavigator/src/main/res/values/poi_tags.xml +++ b/OSMNavigator/src/main/res/values/poi_tags.xml @@ -1,5 +1,5 @@ - + - + Airport diff --git a/build.gradle b/build.gradle index b0593f76..23b764a6 100644 --- a/build.gradle +++ b/build.gradle @@ -2,10 +2,11 @@ buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.2.0' + classpath 'com.android.tools.build:gradle:3.0.1' classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1' // NOTE: Do not place your application dependencies here; they belong @@ -15,6 +16,7 @@ buildscript { allprojects { repositories { + google() jcenter() maven { url "https://jitpack.io" } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 5257388a..7d182a52 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sat Oct 01 17:13:49 CEST 2016 +#Fri Aug 11 10:52:15 CEST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/maven.gradle b/maven.gradle index 7f3f8708..63998ee6 100644 --- a/maven.gradle +++ b/maven.gradle @@ -13,8 +13,8 @@ android.libraryVariants.all { variant -> source = variant.javaCompile.source ext.androidJar = "${android.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar" classpath = files(variant.javaCompile.classpath.files) + files(ext.androidJar) - options.links("http://docs.oracle.com/javase/7/docs/api/"); - options.links("http://developer.android.com/reference/"); + options.links("http://docs.oracle.com/javase/7/docs/api/") + options.links("http://developer.android.com/reference/") options.addStringOption('Xdoclint:none', '-quiet') failOnError false }