diff options
author | Tobrun <tobrun@mapbox.com> | 2017-03-24 18:41:49 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-03-24 18:41:49 +0100 |
commit | 66ed1a10803320e96382feb00c18ee0bfd507b02 (patch) | |
tree | 4b415a778afa9345dcc086a8dae25f309d8b3705 /platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline | |
parent | c7722b54a846a76736369cc98c59c81b3687201b (diff) | |
download | qtlocation-mapboxgl-66ed1a10803320e96382feb00c18ee0bfd507b02.tar.gz |
[android] - harden offline region creation, add include method, expose world bounds, update tests (#8517)
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline')
2 files changed, 28 insertions, 6 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java index 8bf19c4065..225278b17d 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java @@ -5,6 +5,8 @@ import android.os.Handler; import android.os.Looper; import android.support.annotation.NonNull; +import com.mapbox.mapboxsdk.R; +import com.mapbox.mapboxsdk.geometry.LatLngBounds; import com.mapbox.mapboxsdk.net.ConnectivityReceiver; import com.mapbox.mapboxsdk.storage.FileSource; @@ -26,7 +28,6 @@ public class OfflineManager { System.loadLibrary("mapbox-gl"); } - // Native peer pointer private long nativePtr; @@ -139,7 +140,8 @@ public class OfflineManager { * * @param callback the callback to be invoked */ - public void listOfflineRegions(@NonNull final ListOfflineRegionsCallback callback) { + public void listOfflineRegions(@NonNull + final ListOfflineRegionsCallback callback) { listOfflineRegions(fileSource, new ListOfflineRegionsCallback() { @Override @@ -180,10 +182,15 @@ public class OfflineManager { * @param metadata the metadata in bytes * @param callback the callback to be invoked */ - public void createOfflineRegion( - @NonNull OfflineRegionDefinition definition, - @NonNull byte[] metadata, - @NonNull final CreateOfflineRegionCallback callback) { + public void createOfflineRegion(@NonNull OfflineRegionDefinition definition, @NonNull byte[] metadata, + final CreateOfflineRegionCallback callback) { + if (!isValidOfflineRegionDefinition(definition)) { + callback.onError( + String.format(context.getString(R.string.mapbox_offline_error_region_definition_invalid), + definition.getBounds()) + ); + return; + } ConnectivityReceiver.instance(context).activate(); createOfflineRegion(fileSource, definition, metadata, new CreateOfflineRegionCallback() { @@ -212,6 +219,16 @@ public class OfflineManager { }); } + /** + * Validates if the offline region definition bounds is valid for an offline region download. + * + * @param definition the offline region definition + * @return true if the region fits the world bounds. + */ + private boolean isValidOfflineRegionDefinition(OfflineRegionDefinition definition) { + return LatLngBounds.world().contains(definition.getBounds()); + } + /* * Changing or bypassing this limit without permission from Mapbox is prohibited * by the Mapbox Terms of Service. diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineRegionDefinition.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineRegionDefinition.java index a21ff0a443..18d662a286 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineRegionDefinition.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineRegionDefinition.java @@ -1,9 +1,14 @@ package com.mapbox.mapboxsdk.offline; +import com.mapbox.mapboxsdk.geometry.LatLngBounds; + /** * This is the interface that all Offline Region definitions have to implement. * <p> * For the present, a tile pyramid is the only type of offline region. */ public interface OfflineRegionDefinition { + + LatLngBounds getBounds(); + } |