diff options
author | Peng Liu <peng.liu@mapbox.com> | 2019-10-07 16:39:38 +0300 |
---|---|---|
committer | Peng Liu <peng.liu@mapbox.com> | 2019-10-07 16:39:38 +0300 |
commit | e4ed9b99d1024875cc523602587f070f847a190e (patch) | |
tree | bcb67db8d606e1291600915dd4b90d323d523ff3 | |
parent | de150e03eb79a6f55e410370c540ceaeecafb840 (diff) | |
download | qtlocation-mapboxgl-e4ed9b99d1024875cc523602587f070f847a190e.tar.gz |
[android] Add prefetching zoom delta into MapboxMapOptions.
4 files changed, 59 insertions, 0 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java index b6b9004fc2..0deea4e1a2 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java @@ -101,6 +101,7 @@ public final class MapboxMap { setDebugActive(options.getDebugActive()); setApiBaseUrl(options); setPrefetchesTiles(options); + setPrefetchZoomDelta(options); } /** @@ -276,9 +277,19 @@ public final class MapboxMap { } /** + * Sets tile pre-fetching zoom delta from MapboxOptions. + * + * @param options the options object + */ + private void setPrefetchZoomDelta(@NonNull MapboxMapOptions options) { + setPrefetchZoomDelta(options.getPrefetchZoomDelta()); + } + + /** * Set the tile pre-fetching zoom delta. Pre-fetching makes sure that a low-resolution * tile at the (current_zoom_level - delta) is rendered as soon as possible at the * expense of a little bandwidth. + * Note: Setting zoom delta to 0 will disable pre-fetching. * * @param delta zoom delta */ diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMapOptions.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMapOptions.java index 6cd3271d12..06ecb38567 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMapOptions.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMapOptions.java @@ -8,6 +8,7 @@ import android.graphics.drawable.Drawable; import android.os.Parcel; import android.os.Parcelable; import android.support.annotation.ColorInt; +import android.support.annotation.IntRange; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.VisibleForTesting; @@ -70,6 +71,7 @@ public class MapboxMapOptions implements Parcelable { private boolean quickZoomGesturesEnabled = true; private boolean prefetchesTiles = true; + private int prefetchZoomDelta = 4; private boolean zMediaOverlay = false; private boolean localIdeographFontFamilyEnabled = true; @@ -134,6 +136,7 @@ public class MapboxMapOptions implements Parcelable { textureMode = in.readByte() != 0; translucentTextureSurface = in.readByte() != 0; prefetchesTiles = in.readByte() != 0; + prefetchZoomDelta = in.readInt(); zMediaOverlay = in.readByte() != 0; localIdeographFontFamilyEnabled = in.readByte() != 0; localIdeographFontFamily = in.readString(); @@ -257,6 +260,8 @@ public class MapboxMapOptions implements Parcelable { typedArray.getBoolean(R.styleable.mapbox_MapView_mapbox_renderTextureTranslucentSurface, false)); mapboxMapOptions.setPrefetchesTiles( typedArray.getBoolean(R.styleable.mapbox_MapView_mapbox_enableTilePrefetch, true)); + mapboxMapOptions.setPrefetchZoomDelta( + typedArray.getInt(R.styleable.mapbox_MapView_mapbox_prefetchZoomDelta, 4)); mapboxMapOptions.renderSurfaceOnTop( typedArray.getBoolean(R.styleable.mapbox_MapView_mapbox_enableZMediaOverlay, false)); @@ -641,6 +646,24 @@ public class MapboxMapOptions implements Parcelable { } /** + * Set the tile pre-fetching zoom delta. Pre-fetching makes sure that a low-resolution + * tile at the (current_zoom_level - delta) is rendered as soon as possible at the + * expense of a little bandwidth. + * Note: This operation will override the MapboxMapOptions#setPrefetchesTiles(boolean) + * Setting zoom delta to 0 will disable pre-fetching. + * Default zoom delta is 4. + * + * + * @param delta zoom delta + * @return This + */ + @NonNull + public MapboxMapOptions setPrefetchZoomDelta(@IntRange(from = 0) int delta) { + this.prefetchZoomDelta = delta; + return this; + } + + /** * Enable cross-source symbol collision detection, defaults to true. * <p> * If set to false, symbol layers will only run collision detection against @@ -727,6 +750,15 @@ public class MapboxMapOptions implements Parcelable { } /** + * Check current pre-fetching zoom delta. + * + * @return current zoom delta. + */ + public int getPrefetchZoomDelta() { + return prefetchZoomDelta; + } + + /** * Check whether cross-source symbol collision detection is enabled. * * @return true if enabled @@ -1081,6 +1113,7 @@ public class MapboxMapOptions implements Parcelable { dest.writeByte((byte) (textureMode ? 1 : 0)); dest.writeByte((byte) (translucentTextureSurface ? 1 : 0)); dest.writeByte((byte) (prefetchesTiles ? 1 : 0)); + dest.writeInt(prefetchZoomDelta); dest.writeByte((byte) (zMediaOverlay ? 1 : 0)); dest.writeByte((byte) (localIdeographFontFamilyEnabled ? 1 : 0)); dest.writeString(localIdeographFontFamily); @@ -1175,6 +1208,9 @@ public class MapboxMapOptions implements Parcelable { if (prefetchesTiles != options.prefetchesTiles) { return false; } + if (prefetchZoomDelta != options.prefetchZoomDelta) { + return false; + } if (zMediaOverlay != options.zMediaOverlay) { return false; } @@ -1231,6 +1267,7 @@ public class MapboxMapOptions implements Parcelable { result = 31 * result + (textureMode ? 1 : 0); result = 31 * result + (translucentTextureSurface ? 1 : 0); result = 31 * result + (prefetchesTiles ? 1 : 0); + result = 31 * result + prefetchZoomDelta; result = 31 * result + (zMediaOverlay ? 1 : 0); result = 31 * result + (localIdeographFontFamilyEnabled ? 1 : 0); result = 31 * result + (localIdeographFontFamily != null ? localIdeographFontFamily.hashCode() : 0); diff --git a/platform/android/MapboxGLAndroidSDK/src/main/res/values/attrs.xml b/platform/android/MapboxGLAndroidSDK/src/main/res/values/attrs.xml index ff8a32ac64..137f72f8d2 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/res/values/attrs.xml +++ b/platform/android/MapboxGLAndroidSDK/src/main/res/values/attrs.xml @@ -109,6 +109,7 @@ <attr name="mapbox_foregroundLoadColor" format="color"/> <attr name="mapbox_enableTilePrefetch" format="boolean"/> + <attr name="mapbox_prefetchZoomDelta" format="integer"/> <attr name="mapbox_enableZMediaOverlay" format="boolean"/> <attr name="mapbox_pixelRatio" format="float"/> diff --git a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/maps/MapboxMapOptionsTest.java b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/maps/MapboxMapOptionsTest.java index 6978afcf1f..c46e6e3190 100644 --- a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/maps/MapboxMapOptionsTest.java +++ b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/maps/MapboxMapOptionsTest.java @@ -168,6 +168,16 @@ public class MapboxMapOptionsTest { } @Test + public void testPrefetchZoomDelta() { + // Default value + assertEquals(4, new MapboxMapOptions().getPrefetchZoomDelta()); + + // Check mutations + assertEquals(5, new MapboxMapOptions().setPrefetchZoomDelta(5).getPrefetchZoomDelta()); + } + + + @Test public void testCrossSourceCollisions() { // Default value assertTrue(new MapboxMapOptions().getCrossSourceCollisions()); |