diff --git a/include/mbgl/storage/default_file_source.hpp b/include/mbgl/storage/default_file_source.hpp index 9262e0a1b..db3bff5cd 100644 --- a/include/mbgl/storage/default_file_source.hpp +++ b/include/mbgl/storage/default_file_source.hpp @@ -120,9 +120,6 @@ public: * * If pause is called then no revalidation or network request activity * will occur. - * - * Note: Calling pause and then calling getAPIBaseURL or getAccessToken - * will lock the thread that those calls are made on. */ void pause(); diff --git a/include/mbgl/style/layers/background_layer.hpp b/include/mbgl/style/layers/background_layer.hpp index 94076931e..0de3302b7 100644 --- a/include/mbgl/style/layers/background_layer.hpp +++ b/include/mbgl/style/layers/background_layer.hpp @@ -25,16 +25,19 @@ public: PropertyValue getBackgroundColor(const optional& klass = {}) const; void setBackgroundColor(PropertyValue, const optional& klass = {}); void setBackgroundColorTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getBackgroundColorTransition(const optional& klass = {}) const; static PropertyValue getDefaultBackgroundPattern(); PropertyValue getBackgroundPattern(const optional& klass = {}) const; void setBackgroundPattern(PropertyValue, const optional& klass = {}); void setBackgroundPatternTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getBackgroundPatternTransition(const optional& klass = {}) const; static PropertyValue getDefaultBackgroundOpacity(); PropertyValue getBackgroundOpacity(const optional& klass = {}) const; void setBackgroundOpacity(PropertyValue, const optional& klass = {}); void setBackgroundOpacityTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getBackgroundOpacityTransition(const optional& klass = {}) const; // Private implementation diff --git a/include/mbgl/style/layers/circle_layer.hpp b/include/mbgl/style/layers/circle_layer.hpp index 35db4b396..c12d47670 100644 --- a/include/mbgl/style/layers/circle_layer.hpp +++ b/include/mbgl/style/layers/circle_layer.hpp @@ -33,51 +33,61 @@ public: DataDrivenPropertyValue getCircleRadius(const optional& klass = {}) const; void setCircleRadius(DataDrivenPropertyValue, const optional& klass = {}); void setCircleRadiusTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getCircleRadiusTransition(const optional& klass = {}) const; static DataDrivenPropertyValue getDefaultCircleColor(); DataDrivenPropertyValue getCircleColor(const optional& klass = {}) const; void setCircleColor(DataDrivenPropertyValue, const optional& klass = {}); void setCircleColorTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getCircleColorTransition(const optional& klass = {}) const; static DataDrivenPropertyValue getDefaultCircleBlur(); DataDrivenPropertyValue getCircleBlur(const optional& klass = {}) const; void setCircleBlur(DataDrivenPropertyValue, const optional& klass = {}); void setCircleBlurTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getCircleBlurTransition(const optional& klass = {}) const; static DataDrivenPropertyValue getDefaultCircleOpacity(); DataDrivenPropertyValue getCircleOpacity(const optional& klass = {}) const; void setCircleOpacity(DataDrivenPropertyValue, const optional& klass = {}); void setCircleOpacityTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getCircleOpacityTransition(const optional& klass = {}) const; static PropertyValue> getDefaultCircleTranslate(); PropertyValue> getCircleTranslate(const optional& klass = {}) const; void setCircleTranslate(PropertyValue>, const optional& klass = {}); void setCircleTranslateTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getCircleTranslateTransition(const optional& klass = {}) const; static PropertyValue getDefaultCircleTranslateAnchor(); PropertyValue getCircleTranslateAnchor(const optional& klass = {}) const; void setCircleTranslateAnchor(PropertyValue, const optional& klass = {}); void setCircleTranslateAnchorTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getCircleTranslateAnchorTransition(const optional& klass = {}) const; static PropertyValue getDefaultCirclePitchScale(); PropertyValue getCirclePitchScale(const optional& klass = {}) const; void setCirclePitchScale(PropertyValue, const optional& klass = {}); void setCirclePitchScaleTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getCirclePitchScaleTransition(const optional& klass = {}) const; static DataDrivenPropertyValue getDefaultCircleStrokeWidth(); DataDrivenPropertyValue getCircleStrokeWidth(const optional& klass = {}) const; void setCircleStrokeWidth(DataDrivenPropertyValue, const optional& klass = {}); void setCircleStrokeWidthTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getCircleStrokeWidthTransition(const optional& klass = {}) const; static DataDrivenPropertyValue getDefaultCircleStrokeColor(); DataDrivenPropertyValue getCircleStrokeColor(const optional& klass = {}) const; void setCircleStrokeColor(DataDrivenPropertyValue, const optional& klass = {}); void setCircleStrokeColorTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getCircleStrokeColorTransition(const optional& klass = {}) const; static DataDrivenPropertyValue getDefaultCircleStrokeOpacity(); DataDrivenPropertyValue getCircleStrokeOpacity(const optional& klass = {}) const; void setCircleStrokeOpacity(DataDrivenPropertyValue, const optional& klass = {}); void setCircleStrokeOpacityTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getCircleStrokeOpacityTransition(const optional& klass = {}) const; // Private implementation diff --git a/include/mbgl/style/layers/fill_extrusion_layer.hpp b/include/mbgl/style/layers/fill_extrusion_layer.hpp index c19a4ee16..31d517d01 100644 --- a/include/mbgl/style/layers/fill_extrusion_layer.hpp +++ b/include/mbgl/style/layers/fill_extrusion_layer.hpp @@ -33,36 +33,43 @@ public: PropertyValue getFillExtrusionOpacity(const optional& klass = {}) const; void setFillExtrusionOpacity(PropertyValue, const optional& klass = {}); void setFillExtrusionOpacityTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getFillExtrusionOpacityTransition(const optional& klass = {}) const; static DataDrivenPropertyValue getDefaultFillExtrusionColor(); DataDrivenPropertyValue getFillExtrusionColor(const optional& klass = {}) const; void setFillExtrusionColor(DataDrivenPropertyValue, const optional& klass = {}); void setFillExtrusionColorTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getFillExtrusionColorTransition(const optional& klass = {}) const; static PropertyValue> getDefaultFillExtrusionTranslate(); PropertyValue> getFillExtrusionTranslate(const optional& klass = {}) const; void setFillExtrusionTranslate(PropertyValue>, const optional& klass = {}); void setFillExtrusionTranslateTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getFillExtrusionTranslateTransition(const optional& klass = {}) const; static PropertyValue getDefaultFillExtrusionTranslateAnchor(); PropertyValue getFillExtrusionTranslateAnchor(const optional& klass = {}) const; void setFillExtrusionTranslateAnchor(PropertyValue, const optional& klass = {}); void setFillExtrusionTranslateAnchorTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getFillExtrusionTranslateAnchorTransition(const optional& klass = {}) const; static PropertyValue getDefaultFillExtrusionPattern(); PropertyValue getFillExtrusionPattern(const optional& klass = {}) const; void setFillExtrusionPattern(PropertyValue, const optional& klass = {}); void setFillExtrusionPatternTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getFillExtrusionPatternTransition(const optional& klass = {}) const; static DataDrivenPropertyValue getDefaultFillExtrusionHeight(); DataDrivenPropertyValue getFillExtrusionHeight(const optional& klass = {}) const; void setFillExtrusionHeight(DataDrivenPropertyValue, const optional& klass = {}); void setFillExtrusionHeightTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getFillExtrusionHeightTransition(const optional& klass = {}) const; static DataDrivenPropertyValue getDefaultFillExtrusionBase(); DataDrivenPropertyValue getFillExtrusionBase(const optional& klass = {}) const; void setFillExtrusionBase(DataDrivenPropertyValue, const optional& klass = {}); void setFillExtrusionBaseTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getFillExtrusionBaseTransition(const optional& klass = {}) const; // Private implementation diff --git a/include/mbgl/style/layers/fill_layer.hpp b/include/mbgl/style/layers/fill_layer.hpp index c064eab35..aac4be92e 100644 --- a/include/mbgl/style/layers/fill_layer.hpp +++ b/include/mbgl/style/layers/fill_layer.hpp @@ -33,36 +33,43 @@ public: PropertyValue getFillAntialias(const optional& klass = {}) const; void setFillAntialias(PropertyValue, const optional& klass = {}); void setFillAntialiasTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getFillAntialiasTransition(const optional& klass = {}) const; static DataDrivenPropertyValue getDefaultFillOpacity(); DataDrivenPropertyValue getFillOpacity(const optional& klass = {}) const; void setFillOpacity(DataDrivenPropertyValue, const optional& klass = {}); void setFillOpacityTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getFillOpacityTransition(const optional& klass = {}) const; static DataDrivenPropertyValue getDefaultFillColor(); DataDrivenPropertyValue getFillColor(const optional& klass = {}) const; void setFillColor(DataDrivenPropertyValue, const optional& klass = {}); void setFillColorTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getFillColorTransition(const optional& klass = {}) const; static DataDrivenPropertyValue getDefaultFillOutlineColor(); DataDrivenPropertyValue getFillOutlineColor(const optional& klass = {}) const; void setFillOutlineColor(DataDrivenPropertyValue, const optional& klass = {}); void setFillOutlineColorTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getFillOutlineColorTransition(const optional& klass = {}) const; static PropertyValue> getDefaultFillTranslate(); PropertyValue> getFillTranslate(const optional& klass = {}) const; void setFillTranslate(PropertyValue>, const optional& klass = {}); void setFillTranslateTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getFillTranslateTransition(const optional& klass = {}) const; static PropertyValue getDefaultFillTranslateAnchor(); PropertyValue getFillTranslateAnchor(const optional& klass = {}) const; void setFillTranslateAnchor(PropertyValue, const optional& klass = {}); void setFillTranslateAnchorTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getFillTranslateAnchorTransition(const optional& klass = {}) const; static PropertyValue getDefaultFillPattern(); PropertyValue getFillPattern(const optional& klass = {}) const; void setFillPattern(PropertyValue, const optional& klass = {}); void setFillPatternTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getFillPatternTransition(const optional& klass = {}) const; // Private implementation diff --git a/include/mbgl/style/layers/layer.hpp.ejs b/include/mbgl/style/layers/layer.hpp.ejs index d66eae819..972d932b5 100644 --- a/include/mbgl/style/layers/layer.hpp.ejs +++ b/include/mbgl/style/layers/layer.hpp.ejs @@ -61,6 +61,7 @@ public: <%- propertyValueType(property) %> get<%- camelize(property.name) %>(const optional& klass = {}) const; void set<%- camelize(property.name) %>(<%- propertyValueType(property) %>, const optional& klass = {}); void set<%- camelize(property.name) %>Transition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions get<%- camelize(property.name) %>Transition(const optional& klass = {}) const; <% } -%> // Private implementation diff --git a/include/mbgl/style/layers/line_layer.hpp b/include/mbgl/style/layers/line_layer.hpp index 2ed269ae7..756cc6f43 100644 --- a/include/mbgl/style/layers/line_layer.hpp +++ b/include/mbgl/style/layers/line_layer.hpp @@ -53,51 +53,61 @@ public: DataDrivenPropertyValue getLineOpacity(const optional& klass = {}) const; void setLineOpacity(DataDrivenPropertyValue, const optional& klass = {}); void setLineOpacityTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getLineOpacityTransition(const optional& klass = {}) const; static DataDrivenPropertyValue getDefaultLineColor(); DataDrivenPropertyValue getLineColor(const optional& klass = {}) const; void setLineColor(DataDrivenPropertyValue, const optional& klass = {}); void setLineColorTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getLineColorTransition(const optional& klass = {}) const; static PropertyValue> getDefaultLineTranslate(); PropertyValue> getLineTranslate(const optional& klass = {}) const; void setLineTranslate(PropertyValue>, const optional& klass = {}); void setLineTranslateTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getLineTranslateTransition(const optional& klass = {}) const; static PropertyValue getDefaultLineTranslateAnchor(); PropertyValue getLineTranslateAnchor(const optional& klass = {}) const; void setLineTranslateAnchor(PropertyValue, const optional& klass = {}); void setLineTranslateAnchorTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getLineTranslateAnchorTransition(const optional& klass = {}) const; static PropertyValue getDefaultLineWidth(); PropertyValue getLineWidth(const optional& klass = {}) const; void setLineWidth(PropertyValue, const optional& klass = {}); void setLineWidthTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getLineWidthTransition(const optional& klass = {}) const; static DataDrivenPropertyValue getDefaultLineGapWidth(); DataDrivenPropertyValue getLineGapWidth(const optional& klass = {}) const; void setLineGapWidth(DataDrivenPropertyValue, const optional& klass = {}); void setLineGapWidthTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getLineGapWidthTransition(const optional& klass = {}) const; static DataDrivenPropertyValue getDefaultLineOffset(); DataDrivenPropertyValue getLineOffset(const optional& klass = {}) const; void setLineOffset(DataDrivenPropertyValue, const optional& klass = {}); void setLineOffsetTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getLineOffsetTransition(const optional& klass = {}) const; static DataDrivenPropertyValue getDefaultLineBlur(); DataDrivenPropertyValue getLineBlur(const optional& klass = {}) const; void setLineBlur(DataDrivenPropertyValue, const optional& klass = {}); void setLineBlurTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getLineBlurTransition(const optional& klass = {}) const; static PropertyValue> getDefaultLineDasharray(); PropertyValue> getLineDasharray(const optional& klass = {}) const; void setLineDasharray(PropertyValue>, const optional& klass = {}); void setLineDasharrayTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getLineDasharrayTransition(const optional& klass = {}) const; static PropertyValue getDefaultLinePattern(); PropertyValue getLinePattern(const optional& klass = {}) const; void setLinePattern(PropertyValue, const optional& klass = {}); void setLinePatternTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getLinePatternTransition(const optional& klass = {}) const; // Private implementation diff --git a/include/mbgl/style/layers/raster_layer.hpp b/include/mbgl/style/layers/raster_layer.hpp index 72665baa7..3596a71f5 100644 --- a/include/mbgl/style/layers/raster_layer.hpp +++ b/include/mbgl/style/layers/raster_layer.hpp @@ -28,36 +28,43 @@ public: PropertyValue getRasterOpacity(const optional& klass = {}) const; void setRasterOpacity(PropertyValue, const optional& klass = {}); void setRasterOpacityTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getRasterOpacityTransition(const optional& klass = {}) const; static PropertyValue getDefaultRasterHueRotate(); PropertyValue getRasterHueRotate(const optional& klass = {}) const; void setRasterHueRotate(PropertyValue, const optional& klass = {}); void setRasterHueRotateTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getRasterHueRotateTransition(const optional& klass = {}) const; static PropertyValue getDefaultRasterBrightnessMin(); PropertyValue getRasterBrightnessMin(const optional& klass = {}) const; void setRasterBrightnessMin(PropertyValue, const optional& klass = {}); void setRasterBrightnessMinTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getRasterBrightnessMinTransition(const optional& klass = {}) const; static PropertyValue getDefaultRasterBrightnessMax(); PropertyValue getRasterBrightnessMax(const optional& klass = {}) const; void setRasterBrightnessMax(PropertyValue, const optional& klass = {}); void setRasterBrightnessMaxTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getRasterBrightnessMaxTransition(const optional& klass = {}) const; static PropertyValue getDefaultRasterSaturation(); PropertyValue getRasterSaturation(const optional& klass = {}) const; void setRasterSaturation(PropertyValue, const optional& klass = {}); void setRasterSaturationTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getRasterSaturationTransition(const optional& klass = {}) const; static PropertyValue getDefaultRasterContrast(); PropertyValue getRasterContrast(const optional& klass = {}) const; void setRasterContrast(PropertyValue, const optional& klass = {}); void setRasterContrastTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getRasterContrastTransition(const optional& klass = {}) const; static PropertyValue getDefaultRasterFadeDuration(); PropertyValue getRasterFadeDuration(const optional& klass = {}) const; void setRasterFadeDuration(PropertyValue, const optional& klass = {}); void setRasterFadeDurationTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getRasterFadeDurationTransition(const optional& klass = {}) const; // Private implementation diff --git a/include/mbgl/style/layers/symbol_layer.hpp b/include/mbgl/style/layers/symbol_layer.hpp index aeccabb97..d24f808ba 100644 --- a/include/mbgl/style/layers/symbol_layer.hpp +++ b/include/mbgl/style/layers/symbol_layer.hpp @@ -173,71 +173,85 @@ public: DataDrivenPropertyValue getIconOpacity(const optional& klass = {}) const; void setIconOpacity(DataDrivenPropertyValue, const optional& klass = {}); void setIconOpacityTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getIconOpacityTransition(const optional& klass = {}) const; static DataDrivenPropertyValue getDefaultIconColor(); DataDrivenPropertyValue getIconColor(const optional& klass = {}) const; void setIconColor(DataDrivenPropertyValue, const optional& klass = {}); void setIconColorTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getIconColorTransition(const optional& klass = {}) const; static DataDrivenPropertyValue getDefaultIconHaloColor(); DataDrivenPropertyValue getIconHaloColor(const optional& klass = {}) const; void setIconHaloColor(DataDrivenPropertyValue, const optional& klass = {}); void setIconHaloColorTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getIconHaloColorTransition(const optional& klass = {}) const; static DataDrivenPropertyValue getDefaultIconHaloWidth(); DataDrivenPropertyValue getIconHaloWidth(const optional& klass = {}) const; void setIconHaloWidth(DataDrivenPropertyValue, const optional& klass = {}); void setIconHaloWidthTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getIconHaloWidthTransition(const optional& klass = {}) const; static DataDrivenPropertyValue getDefaultIconHaloBlur(); DataDrivenPropertyValue getIconHaloBlur(const optional& klass = {}) const; void setIconHaloBlur(DataDrivenPropertyValue, const optional& klass = {}); void setIconHaloBlurTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getIconHaloBlurTransition(const optional& klass = {}) const; static PropertyValue> getDefaultIconTranslate(); PropertyValue> getIconTranslate(const optional& klass = {}) const; void setIconTranslate(PropertyValue>, const optional& klass = {}); void setIconTranslateTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getIconTranslateTransition(const optional& klass = {}) const; static PropertyValue getDefaultIconTranslateAnchor(); PropertyValue getIconTranslateAnchor(const optional& klass = {}) const; void setIconTranslateAnchor(PropertyValue, const optional& klass = {}); void setIconTranslateAnchorTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getIconTranslateAnchorTransition(const optional& klass = {}) const; static DataDrivenPropertyValue getDefaultTextOpacity(); DataDrivenPropertyValue getTextOpacity(const optional& klass = {}) const; void setTextOpacity(DataDrivenPropertyValue, const optional& klass = {}); void setTextOpacityTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getTextOpacityTransition(const optional& klass = {}) const; static DataDrivenPropertyValue getDefaultTextColor(); DataDrivenPropertyValue getTextColor(const optional& klass = {}) const; void setTextColor(DataDrivenPropertyValue, const optional& klass = {}); void setTextColorTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getTextColorTransition(const optional& klass = {}) const; static DataDrivenPropertyValue getDefaultTextHaloColor(); DataDrivenPropertyValue getTextHaloColor(const optional& klass = {}) const; void setTextHaloColor(DataDrivenPropertyValue, const optional& klass = {}); void setTextHaloColorTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getTextHaloColorTransition(const optional& klass = {}) const; static DataDrivenPropertyValue getDefaultTextHaloWidth(); DataDrivenPropertyValue getTextHaloWidth(const optional& klass = {}) const; void setTextHaloWidth(DataDrivenPropertyValue, const optional& klass = {}); void setTextHaloWidthTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getTextHaloWidthTransition(const optional& klass = {}) const; static DataDrivenPropertyValue getDefaultTextHaloBlur(); DataDrivenPropertyValue getTextHaloBlur(const optional& klass = {}) const; void setTextHaloBlur(DataDrivenPropertyValue, const optional& klass = {}); void setTextHaloBlurTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getTextHaloBlurTransition(const optional& klass = {}) const; static PropertyValue> getDefaultTextTranslate(); PropertyValue> getTextTranslate(const optional& klass = {}) const; void setTextTranslate(PropertyValue>, const optional& klass = {}); void setTextTranslateTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getTextTranslateTransition(const optional& klass = {}) const; static PropertyValue getDefaultTextTranslateAnchor(); PropertyValue getTextTranslateAnchor(const optional& klass = {}) const; void setTextTranslateAnchor(PropertyValue, const optional& klass = {}); void setTextTranslateAnchorTransition(const TransitionOptions&, const optional& klass = {}); + TransitionOptions getTextTranslateAnchorTransition(const optional& klass = {}) const; // Private implementation diff --git a/platform/android/CHANGELOG.md b/platform/android/CHANGELOG.md index 1186d392d..d8338347c 100644 --- a/platform/android/CHANGELOG.md +++ b/platform/android/CHANGELOG.md @@ -2,6 +2,83 @@ Mapbox welcomes participation and contributions from everyone. If you'd like to do so please see the [`Contributing Guide`](https://github.com/mapbox/mapbox-gl-native/blob/master/CONTRIBUTING.md) first to get started. +## 5.0.0 - March 17th, 2017 + +5.0.0 final release contains: + +* Support for data-driven styles [#7752](https://github.com/mapbox/mapbox-gl-native/pull/7752) +* Additional APIs to manage runtime styling layers [#8195](https://github.com/mapbox/mapbox-gl-native/pull/8195) +* Allow query all features in sources (`querySourceFeatures`) [#5792](https://github.com/mapbox/mapbox-gl-native/issues/5792) +* Improve accessibility TalkBack support by including content description in views [#8230](https://github.com/mapbox/mapbox-gl-native/pull/8230) +* Consistent double tap zoom acceleration [#7514](https://github.com/mapbox/mapbox-gl-native/issues/7514) +* Allow zooming/scaling to use `AnimationOptions` [#8181](https://github.com/mapbox/mapbox-gl-native/pull/8181) +* Cleanup inconsistencies `float` vs `double` [#4445](https://github.com/mapbox/mapbox-gl-native/issues/4445) +* Add `mapbox_` prefix to attributes [#6482](https://github.com/mapbox/mapbox-gl-native/issues/6482) +* Update LOST to 2.x [#6573](https://github.com/mapbox/mapbox-gl-native/issues/6537) +* MAS submodules (`geojson`, `telemetry`) are now smaller to reduce the overall method count [#7642](https://github.com/mapbox/mapbox-gl-native/pull/7642) +* Telemetry Service is now include automatically via Manifest merge to simplify set up [#8338](https://github.com/mapbox/mapbox-gl-native/pull/8338) +* Support for Android Nougat [#5910](5910-move-listener-logic-for-nougat) + - Move location listening logic to `onStart`/`onStop` activity lifecylce methods +* Removal of `accessToken` on `MapView` and `MapboxMap` [#5621](https://github.com/mapbox/mapbox-gl-native/issues/5621) +* Introduction of new make targets [#5940](https://github.com/mapbox/mapbox-gl-native/issues/5940) + - Targets for testing, running and using external tools directly from the command line +* Cleanup Gradle files [#6009](https://github.com/mapbox/mapbox-gl-native/issues/6009) + - Introducing single purpose `.gradle` files +* Checkstyle integration [#7442](https://github.com/mapbox/mapbox-gl-native/pull/7442) +* Transform refactor [#6532](https://github.com/mapbox/mapbox-gl-native/issues/6532) + - All camera related code is moved to a dedicated transform class cfr. core architecture +* Encapsulate gestures [#6557](https://github.com/mapbox/mapbox-gl-native/issues/6557) + - All gesture event code is encapsulated in `MapGestureDetector` + - All key event code is encapsulated in `MapKeyListener` +* Transparent background for `MyLocationView` [#7116](https://github.com/mapbox/mapbox-gl-native/issues/7116) +* Correctly scale accuracy circle for `MyLocationView` [#8255](https://github.com/mapbox/mapbox-gl-native/pull/8255) +* Update documentation on generate sanity tests [#7147](https://github.com/mapbox/mapbox-gl-native/issues/7147) +* Update documentation on style templates [#7157](https://github.com/mapbox/mapbox-gl-native/issues/7157) +* Fix `NullPointerException` during save instance state [#7157](https://github.com/mapbox/mapbox-gl-native/issues/7157) +* Move management style to core [#7275](https://github.com/mapbox/mapbox-gl-native/issues/7275) +* Fix `OnCameraChange` not called for the final position of animation bug [#7350](https://github.com/mapbox/mapbox-gl-native/issues/7350) +* `MapboxAccountManager` refactor [#6534](https://github.com/mapbox/mapbox-gl-native/issues/6534) + - Consolidating the location where tokens are set + - Rename to reflect the increased responsibilities introduced in prior releases +* AnnotationManager refactor [#6067](https://github.com/mapbox/mapbox-gl-native/issues/6067) + - Extracting all business logic related to annotations into a separate class cfr. to core and the iOS codebase +* Gesture handling improvements: + - Fix missing call to `onFling` when while pinch zooming [#7666](https://github.com/mapbox/mapbox-gl-native/issues/7666) + - Round tap-zoom gestures to nearest integer [#8027](https://github.com/mapbox/mapbox-gl-native/pull/8027) +* Support for style-wide transition animation duration and delay [#6779](https://github.com/mapbox/mapbox-gl-native/issues/6779) +* Allow callback parameter for style setting [#8262](https://github.com/mapbox/mapbox-gl-native/issues/8262) +* Support for all animated camera changes to configure dismissing tracking modes [#7854](https://github.com/mapbox/mapbox-gl-native/issues/7854) +* Avoid disabling location tracking on all gestures [#7878](https://github.com/mapbox/mapbox-gl-native/issues/7878) +* `LatLng` objects produced by the SDK are wrapped by default [#4522](https://github.com/mapbox/mapbox-gl-native/issues/4522) +* Proguard update for new SDK packages [#8437](https://github.com/mapbox/mapbox-gl-native/pull/8437) +* Javadoc cleanup [#8438](https://github.com/mapbox/mapbox-gl-native/pull/8438) +* MarkerViewClickListener and MapClickListener called simultaneously [#8447](https://github.com/mapbox/mapbox-gl-native/pull/8447) +* Fix LOST v2.0.0 integration [#8445](https://github.com/mapbox/mapbox-gl-native/pull/8445) +* Crash with OnMapChangeListener [#8380](https://github.com/mapbox/mapbox-gl-native/pull/8380) +* Feature query crash [#8374](https://github.com/mapbox/mapbox-gl-native/pull/8374) +* flyTo fix [#8302](https://github.com/mapbox/mapbox-gl-native/pull/8302) +* Don't dispatch MarkerView motion event up to MapView [#8447](https://github.com/mapbox/mapbox-gl-native/pull/8447) + +## 5.0.0-beta.3 - March 10th, 2017 + +5.0.0-beta.3 focuses on addressing stability issues and bug fixes. It also includes: + +* Allow query all features in sources (`querySourceFeatures`) [#5792](https://github.com/mapbox/mapbox-gl-native/issues/5792) +* Improve accessibility TalkBack support by including content description in views [#8230](https://github.com/mapbox/mapbox-gl-native/pull/8230) +* Allow zooming/scaling to use `AnimationOptions` [#8181](https://github.com/mapbox/mapbox-gl-native/pull/8181) +* Telemetry Service is now include automatically via Manifest merge to simplify set up [#8338](https://github.com/mapbox/mapbox-gl-native/pull/8338) +* Correctly scale accuracy circle for `MyLocationView` [#8255](https://github.com/mapbox/mapbox-gl-native/pull/8255) +* Round tap-zoom gestures to nearest integer [#8027](https://github.com/mapbox/mapbox-gl-native/pull/8027) +* Allow callback parameter for style setting [#8262](https://github.com/mapbox/mapbox-gl-native/issues/8262) +* Avoid disabling location tracking on all gestures [#7878](https://github.com/mapbox/mapbox-gl-native/issues/7878) + +## 5.0.0-beta.2 - March 1st, 2017 + +5.0.0-beta.2 focuses on addressing stability issues and bug fixes. It also includes: + +* Data-driven styling for `{text,icon}-{color,opacity,halo-color,halo-blur,halo-width}` [#7939](https://github.com/mapbox/mapbox-gl-native/pull/7939) +* Additional APIs to manage runtime styling layers [#8195](https://github.com/mapbox/mapbox-gl-native/pull/8195) + ## 5.0.0-beta.1 - February 14th, 2017 * Support for data-driven styles [#7752](https://github.com/mapbox/mapbox-gl-native/pull/7752) diff --git a/platform/android/MapboxGLAndroidSDK/build.gradle b/platform/android/MapboxGLAndroidSDK/build.gradle index dd25a8d7b..f2d28e53d 100644 --- a/platform/android/MapboxGLAndroidSDK/build.gradle +++ b/platform/android/MapboxGLAndroidSDK/build.gradle @@ -27,6 +27,8 @@ android { minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion buildConfigField "String", "GIT_REVISION_SHORT", String.format("\"%s\"", getGitRevision()) + buildConfigField "String", "MAPBOX_VERSION_STRING", String.format("\"Mapbox/%s\"", project.VERSION_NAME) + buildConfigField "String", "MAPBOX_EVENTS_USER_AGENT", String.format("\"MapboxEventsAndroid/%s\"", project.VERSION_NAME) } defaultPublishConfig project.hasProperty("mapbox.buildtype") ? project.getProperty("mapbox.buildtype") : "debug" diff --git a/platform/android/MapboxGLAndroidSDK/gradle.properties b/platform/android/MapboxGLAndroidSDK/gradle.properties index 13a5f1032..9f555da5f 100644 --- a/platform/android/MapboxGLAndroidSDK/gradle.properties +++ b/platform/android/MapboxGLAndroidSDK/gradle.properties @@ -1,5 +1,5 @@ GROUP=com.mapbox.mapboxsdk -VERSION_NAME=5.0.0-SNAPSHOT +VERSION_NAME=5.1.0-SNAPSHOT POM_DESCRIPTION=Mapbox GL Android SDK POM_URL=https://github.com/mapbox/mapbox-gl-native diff --git a/platform/android/MapboxGLAndroidSDK/proguard-rules.pro b/platform/android/MapboxGLAndroidSDK/proguard-rules.pro index 92ef05df6..baecd80e5 100644 --- a/platform/android/MapboxGLAndroidSDK/proguard-rules.pro +++ b/platform/android/MapboxGLAndroidSDK/proguard-rules.pro @@ -17,10 +17,10 @@ # Package camera -keep class com.mapbox.mapboxsdk.camera.** { *; } -# Package: geometry +# Package geometry -keep class com.mapbox.mapboxsdk.geometry.** { *; } -# Package: http +# Package http -keep class com.mapbox.mapboxsdk.http.** { *; } # Package maps @@ -32,9 +32,13 @@ # Package offline -keep class com.mapbox.mapboxsdk.offline.** { *; } +# Package storage +-keep class com.mapbox.mapboxsdk.storage.** { *; } + # Package style -keep class com.mapbox.mapboxsdk.style.layers.** { *; } -keep class com.mapbox.mapboxsdk.style.sources.** { *; } +-keep class com.mapbox.mapboxsdk.style.functions.** { *; } # Package telemetry -keep class com.mapbox.mapboxsdk.telemetry.** { *; } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/AndroidManifest.xml b/platform/android/MapboxGLAndroidSDK/src/main/AndroidManifest.xml index c848e61e6..231e36e09 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/AndroidManifest.xml +++ b/platform/android/MapboxGLAndroidSDK/src/main/AndroidManifest.xml @@ -8,4 +8,9 @@ + + + + + diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java index 296d93d0c..83d04e702 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/Mapbox.java @@ -37,7 +37,8 @@ public final class Mapbox { INSTANCE = new Mapbox(appContext, accessToken); LocationEngine locationEngine = new LocationSource(appContext); locationEngine.setPriority(LocationEnginePriority.NO_POWER); - MapboxTelemetry.getInstance().initialize(appContext, accessToken, locationEngine); + MapboxTelemetry.getInstance().initialize( + appContext, accessToken, BuildConfig.MAPBOX_EVENTS_USER_AGENT, locationEngine); ConnectivityReceiver.instance(appContext); } return INSTANCE; @@ -106,4 +107,4 @@ public final class Mapbox { NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); return (activeNetwork != null && activeNetwork.isConnected()); } -} +} \ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/Annotation.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/Annotation.java index 831c1db5a..a588ff6d2 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/Annotation.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/Annotation.java @@ -6,10 +6,12 @@ import com.mapbox.mapboxsdk.maps.MapView; import com.mapbox.mapboxsdk.maps.MapboxMap; /** - * Annotation is an overlay on top of a {@link MapView}, - * from which {@link Polygon}, {@link Polyline} and {@link Marker} are derived. + * Annotation is an overlay on top of a Map. *

- * it manages attachment to a map and identification, but does not require + * Known subclasses are {@link Polygon}, {@link Polyline} and {@link Marker}. + *

+ *

+ * This class manages attachment to a map and identification, but does not require * content to be placed at a geographical point. *

*/ @@ -96,6 +98,12 @@ public abstract class Annotation implements Comparable { return mapView; } + /** + * Compares this Annotation object with another Annotation. + * + * @param annotation Another Annotation to compare with this object. + * @return returns 0 if id's match, 1 if id is lower, -1 if id is higher of another Annotation + */ @Override public int compareTo(@NonNull Annotation annotation) { if (id < annotation.getId()) { @@ -107,12 +115,10 @@ public abstract class Annotation implements Comparable { } /** - * Compares this {@link PolylineOptions} object with another {@link PolylineOptions} and - * determines if their color, alpha, width, and vertices match. + * Checks if this Annotation object is equal to another Annotation. * - * @param object Another {@link PolylineOptions} to compare with this object. - * @return True if color, alpha, width, and vertices match this {@link PolylineOptions} object. - * Else, false. + * @param object Another Annotation to check equality with this object. + * @return returns true both id's match else returns false. */ @Override public boolean equals(Object object) { diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MultiPoint.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/BasePointCollection.java similarity index 90% rename from platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MultiPoint.java rename to platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/BasePointCollection.java index 2bd3c8278..e57821b54 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MultiPoint.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/BasePointCollection.java @@ -8,12 +8,12 @@ import java.util.List; /** * Multipoint is an abstract annotation for combining geographical locations. */ -public abstract class MultiPoint extends Annotation { +public abstract class BasePointCollection extends Annotation { private List points; private float alpha = 1.0f; - protected MultiPoint() { + protected BasePointCollection() { super(); points = new ArrayList<>(); } @@ -58,7 +58,7 @@ public abstract class MultiPoint extends Annotation { } /** - * Set this {@link MultiPoint}s alpha. + * Set this {@link BasePointCollection}s alpha. * * @param alpha float value between 0 and 1. */ diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/BubbleLayout.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/BubbleLayout.java index 2e6445170..07e038c08 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/BubbleLayout.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/BubbleLayout.java @@ -14,7 +14,7 @@ import com.mapbox.mapboxsdk.R; /** * Bubble View for Android with custom stroke width and color, arrow size, position and direction. */ -class BubbleLayout extends LinearLayout { +public class BubbleLayout extends LinearLayout { public static final float DEFAULT_STROKE_WIDTH = -1; private ArrowDirection arrowDirection; diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerViewContainer.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerViewContainer.java new file mode 100644 index 000000000..d590582f0 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerViewContainer.java @@ -0,0 +1,34 @@ +package com.mapbox.mapboxsdk.annotations; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.ViewGroup; +import android.widget.FrameLayout; + +/** + * ViewGroup that dispatches TouchEvents to the parent ViewGroup. + *

+ * This allows to dispatch touch events that occur on MarkerView to MapView. + * https://github.com/mapbox/mapbox-gl-native/issues/5388 + *

+ */ +public class MarkerViewContainer extends FrameLayout { + + public MarkerViewContainer(Context context, AttributeSet attrs) { + super(context, attrs); + setTag(false); + } + + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + super.dispatchTouchEvent(ev); + boolean actionUp = (boolean) getTag(); + if (!actionUp) { + ((ViewGroup) getParent()).onTouchEvent(ev); + } else { + setTag(false); + } + return true; + } +} diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerViewManager.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerViewManager.java index 315e12d28..0f1298eea 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerViewManager.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerViewManager.java @@ -8,6 +8,7 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.util.LongSparseArray; import android.view.LayoutInflater; +import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; @@ -503,6 +504,26 @@ public class MarkerViewManager implements MapView.OnMapChangedListener { } } + adaptedView.setOnTouchListener(new View.OnTouchListener() { + + @Override + public boolean onTouch(View v, MotionEvent event) { + if (event.getAction() == MotionEvent.ACTION_UP) { + boolean clickHandled = false; + if (onMarkerViewClickListener != null) { + clickHandled = onMarkerViewClickListener.onMarkerClick(marker, v, adapter); + markerViewContainer.setTag(true); + } + + if (!clickHandled) { + ensureInfoWindowOffset(marker); + select(marker, v, adapter); + } + } + return true; + } + }); + marker.setMapboxMap(mapboxMap); markerViewMap.put(marker, adaptedView); if (convertView == null) { @@ -530,34 +551,6 @@ public class MarkerViewManager implements MapView.OnMapChangedListener { updateMarkerViewsPosition(); } - /** - * When the provided {@link MarkerView} is clicked on by a user, we check if a custom click - * event has been created and if not, display a {@link InfoWindow}. - * - * @param markerView that the click event occurred. - */ - public boolean onClickMarkerView(MarkerView markerView) { - boolean clickHandled = false; - - MapboxMap.MarkerViewAdapter adapter = getViewAdapter(markerView); - View view = getView(markerView); - if (adapter == null || view == null) { - // not a valid state - return true; - } - - if (onMarkerViewClickListener != null) { - clickHandled = onMarkerViewClickListener.onMarkerClick(markerView, view, adapter); - } - - if (!clickHandled) { - ensureInfoWindowOffset(markerView); - select(markerView, view, adapter); - } - - return clickHandled; - } - /** * Handles the {@link MarkerView}'s info window offset. * diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/Polygon.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/Polygon.java index 7b9de86bc..4a72cb7d8 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/Polygon.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/Polygon.java @@ -7,7 +7,7 @@ import com.mapbox.mapboxsdk.maps.MapboxMap; /** * Polygon is a geometry annotation that's a closed loop of coordinates. */ -public final class Polygon extends MultiPoint { +public final class Polygon extends BasePointCollection { private int fillColor = Color.BLACK; // default fillColor is black private int strokeColor = Color.BLACK; // default strokeColor is black diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/Polyline.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/Polyline.java index a430d1100..6cea29ef8 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/Polyline.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/Polyline.java @@ -7,7 +7,7 @@ import com.mapbox.mapboxsdk.maps.MapboxMap; /** * Polyline is a geometry feature with an unclosed list of coordinates drawn as a line */ -public final class Polyline extends MultiPoint { +public final class Polyline extends BasePointCollection { private int color = Color.BLACK; // default color is black private float width = 10; // As specified by Google API Docs (in pixels) diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/exceptions/ConversionException.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/exceptions/ConversionException.java index be2b58668..0d16c53b8 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/exceptions/ConversionException.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/exceptions/ConversionException.java @@ -1,22 +1,11 @@ package com.mapbox.mapboxsdk.exceptions; /** - * Thrown on conversion errors + * A ConversionException is thrown when a conversion failed to execute. */ public class ConversionException extends RuntimeException { - public ConversionException() { - } - public ConversionException(String detailMessage) { super(detailMessage); } - - public ConversionException(String detailMessage, Throwable throwable) { - super(detailMessage, throwable); - } - - public ConversionException(Throwable throwable) { - super(throwable); - } } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/exceptions/InvalidMarkerPositionException.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/exceptions/InvalidMarkerPositionException.java index bd24379af..f0f9b9236 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/exceptions/InvalidMarkerPositionException.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/exceptions/InvalidMarkerPositionException.java @@ -1,5 +1,8 @@ package com.mapbox.mapboxsdk.exceptions; +/** + * A InvalidMarkerPositionException is thrown when a Marker object is created with an invalid LatLng position. + */ public class InvalidMarkerPositionException extends RuntimeException { public InvalidMarkerPositionException() { diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/http/HTTPRequest.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/http/HTTPRequest.java index cedc5fe46..9c8cda554 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/http/HTTPRequest.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/http/HTTPRequest.java @@ -183,7 +183,7 @@ class HTTPRequest implements Callback { return USER_AGENT_STRING = Util.toHumanReadableAscii( String.format("%s %s (%s) Android/%s (%s)", getApplicationIdentifier(), - com.mapbox.services.android.telemetry.BuildConfig.MAPBOX_VERSION_STRING, + BuildConfig.MAPBOX_VERSION_STRING, BuildConfig.GIT_REVISION_SHORT, Build.VERSION.SDK_INT, Build.CPU_ABI) diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationSource.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationSource.java index 5a87f6384..f41a022fa 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationSource.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationSource.java @@ -102,6 +102,7 @@ public class LocationSource extends LocationEngine implements public void requestLocationUpdates() { // Common params LocationRequest request = LocationRequest.create() + .setInterval(1000) .setFastestInterval(1000) .setSmallestDisplacement(3.0f); diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/AnnotationManager.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/AnnotationManager.java index 0c7772335..e91779dfd 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/AnnotationManager.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/AnnotationManager.java @@ -10,6 +10,7 @@ import com.mapbox.mapboxsdk.annotations.Annotation; import com.mapbox.mapboxsdk.annotations.BaseMarkerOptions; import com.mapbox.mapboxsdk.annotations.BaseMarkerViewOptions; import com.mapbox.mapboxsdk.annotations.Icon; +import com.mapbox.mapboxsdk.annotations.IconFactory; import com.mapbox.mapboxsdk.annotations.Marker; import com.mapbox.mapboxsdk.annotations.MarkerView; import com.mapbox.mapboxsdk.annotations.MarkerViewManager; @@ -256,7 +257,11 @@ class AnnotationManager { private MarkerView prepareViewMarker(BaseMarkerViewOptions markerViewOptions) { MarkerView marker = markerViewOptions.getMarker(); - iconManager.loadIconForMarkerView(marker); + Icon icon = markerViewOptions.getIcon(); + if (icon == null) { + icon = IconFactory.getInstance(mapView.getContext()).defaultMarkerView(); + } + marker.setIcon(icon); return marker; } @@ -660,24 +665,16 @@ class AnnotationManager { if (annotation.getId() == newSelectedMarkerId) { Marker marker = (Marker) annotation; - if (marker instanceof MarkerView) { - handledDefaultClick = markerViewManager.onClickMarkerView((MarkerView) marker); - } else { + if (!(marker instanceof MarkerView)) { if (onMarkerClickListener != null) { // end developer has provided a custom click listener handledDefaultClick = onMarkerClickListener.onMarkerClick(marker); } - } - - if (annotation instanceof MarkerView) { - markerViewManager.onClickMarkerView((MarkerView) annotation); - } else { if (!handledDefaultClick) { // only select marker if user didn't handle the click event themselves selectMarker(marker); } } - return true; } } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/IconManager.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/IconManager.java index c9d81a88b..c15263027 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/IconManager.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/IconManager.java @@ -71,27 +71,6 @@ class IconManager { return icon; } - Icon loadIconForMarkerView(MarkerView marker) { - Icon icon = marker.getIcon(); - int iconSize = icons.size() + 1; - if (icon == null) { - icon = IconFactory.getInstance(nativeMapView.getContext()).defaultMarkerView(); - marker.setIcon(icon); - } - Bitmap bitmap = icon.getBitmap(); - averageIconHeight = averageIconHeight + (bitmap.getHeight() - averageIconHeight) / iconSize; - averageIconWidth = averageIconWidth + (bitmap.getWidth() - averageIconWidth) / iconSize; - if (!icons.contains(icon)) { - icons.add(icon); - } else { - Icon oldIcon = icons.get(icons.indexOf(icon)); - if (!oldIcon.getBitmap().sameAs(icon.getBitmap())) { - throw new IconBitmapChangedException(); - } - } - return icon; - } - int getTopOffsetPixelsForIcon(Icon icon) { return (int) (nativeMapView.getTopOffsetPixelsForAnnotationSymbol(icon.getId()) * nativeMapView.getPixelRatio()); } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java index 0f4d3197c..67e55352f 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java @@ -4,13 +4,13 @@ import android.content.Context; import android.graphics.PointF; import android.location.Location; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.v4.view.GestureDetectorCompat; import android.support.v4.view.ScaleGestureDetectorCompat; import android.view.InputDevice; import android.view.MotionEvent; import android.view.ScaleGestureDetector; import android.view.ViewConfiguration; -import android.widget.ZoomButtonsController; import com.almeros.android.multitouch.gesturedetectors.RotateGestureDetector; import com.almeros.android.multitouch.gesturedetectors.ShoveGestureDetector; @@ -92,6 +92,20 @@ final class MapGestureDetector { this.focalPoint = focalPoint; } + /** + * Get the current active gesture focal point. + *

+ * This could be either the user provided focal point in {@link UiSettings#setFocalPoint(PointF)} or the focal point + * defined as a result of {@link TrackingSettings#setMyLocationEnabled(boolean)}. + *

+ * + * @return the current active gesture focal point. + */ + @Nullable + PointF getFocalPoint() { + return focalPoint; + } + /** * Given coordinates from a gesture, use the current projection to translate it into * a Location object. @@ -159,10 +173,10 @@ final class MapGestureDetector { if (twoTap && isTap && !inProgress) { if (focalPoint != null) { - transform.zoom(false, focalPoint.x, focalPoint.y); + transform.zoom(false, focalPoint); } else { PointF focalPoint = TwoFingerGestureDetector.determineFocalPoint(event); - transform.zoom(false, focalPoint.x, focalPoint.y); + transform.zoom(false, focalPoint); } twoTap = false; return true; @@ -262,10 +276,10 @@ final class MapGestureDetector { // Single finger double tap if (focalPoint != null) { // User provided focal point - transform.zoom(true, focalPoint.x, focalPoint.y); + transform.zoom(true, focalPoint); } else { // Zoom in on gesture - transform.zoom(true, e.getX(), e.getY()); + transform.zoom(true, new PointF(e.getX(), e.getY())); } break; } @@ -636,34 +650,6 @@ final class MapGestureDetector { } } - // This class handles input events from the zoom control buttons - // Zoom controls allow single touch only devices to zoom in and out - private static class OnZoomListener implements ZoomButtonsController.OnZoomListener { - - private UiSettings uiSettings; - private Transform transform; - - OnZoomListener(UiSettings uiSettings, Transform transform) { - this.uiSettings = uiSettings; - this.transform = transform; - } - - // Not used - @Override - public void onVisibilityChanged(boolean visible) { - // Ignore - } - - // Called when user pushes a zoom button - @Override - public void onZoom(boolean zoomIn) { - if (!uiSettings.isZoomGesturesEnabled()) { - return; - } - transform.zoom(zoomIn); - } - } - void setOnMapClickListener(MapboxMap.OnMapClickListener onMapClickListener) { this.onMapClickListener = onMapClickListener; } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapKeyListener.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapKeyListener.java index c993cd3ec..717524228 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapKeyListener.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapKeyListener.java @@ -1,5 +1,6 @@ package com.mapbox.mapboxsdk.maps; +import android.graphics.PointF; import android.os.Handler; import android.support.annotation.NonNull; import android.view.KeyEvent; @@ -125,7 +126,8 @@ final class MapKeyListener { } // Zoom out - transform.zoom(false, uiSettings.getWidth() / 2, uiSettings.getHeight() / 2); + PointF focalPoint = new PointF(uiSettings.getWidth() / 2, uiSettings.getHeight() / 2); + transform.zoom(false, focalPoint); return true; default: @@ -160,7 +162,8 @@ final class MapKeyListener { } // Zoom in - transform.zoom(true, uiSettings.getWidth() / 2, uiSettings.getHeight() / 2); + PointF focalPoint = new PointF(uiSettings.getWidth() / 2, uiSettings.getHeight() / 2); + transform.zoom(true, focalPoint); return true; } @@ -214,7 +217,8 @@ final class MapKeyListener { // Only handle if we have not already long pressed if (currentTrackballLongPressTimeOut != null) { // Zoom in - transform.zoom(true, uiSettings.getWidth() / 2, uiSettings.getHeight() / 2); + PointF focalPoint = new PointF(uiSettings.getWidth() / 2, uiSettings.getHeight() / 2); + transform.zoom(true, focalPoint); } return true; @@ -255,7 +259,8 @@ final class MapKeyListener { // Check if the trackball is still pressed if (!cancelled) { // Zoom out - transform.zoom(false, uiSettings.getWidth() / 2, uiSettings.getHeight() / 2); + PointF pointF = new PointF(uiSettings.getWidth() / 2, uiSettings.getHeight() / 2); + transform.zoom(false, pointF); // Ensure the up action is not run currentTrackballLongPressTimeOut = null; diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java index 8fa2d0b15..8c8b70d78 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java @@ -31,6 +31,7 @@ import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.FrameLayout; import android.widget.ImageView; +import android.widget.ZoomButtonsController; import com.mapbox.mapboxsdk.Mapbox; import com.mapbox.mapboxsdk.R; @@ -147,7 +148,9 @@ public class MapView extends FrameLayout { // user input mapGestureDetector = new MapGestureDetector(context, transform, proj, uiSettings, trackingSettings, annotations); mapKeyListener = new MapKeyListener(transform, trackingSettings, uiSettings); - mapZoomButtonController = new MapZoomButtonController(this, uiSettings, transform); + + MapZoomControllerListener zoomListener = new MapZoomControllerListener(mapGestureDetector, uiSettings, transform); + mapZoomButtonController = new MapZoomButtonController(this, uiSettings, zoomListener); // inject widgets with MapboxMap compassView.setMapboxMap(mapboxMap); @@ -508,7 +511,7 @@ public class MapView extends FrameLayout { if (destroyed) { return; } - mapboxMap.onUpdate(); + mapboxMap.onUpdateRegionChange(); } } @@ -521,13 +524,15 @@ public class MapView extends FrameLayout { @CallSuper protected void onDetachedFromWindow() { super.onDetachedFromWindow(); - mapZoomButtonController.setVisible(false); + if (mapZoomButtonController != null) { + mapZoomButtonController.setVisible(false); + } } // Called when view is hidden and shown @Override protected void onVisibilityChanged(@NonNull View changedView, int visibility) { - if (isInEditMode()) { + if (isInEditMode() || mapZoomButtonController == null) { return; } mapZoomButtonController.setVisible(visibility == View.VISIBLE); @@ -801,7 +806,7 @@ public class MapView extends FrameLayout { public static final int DID_FINISH_RENDERING_FRAME = 9; /** - * This event is triggered when the map finished rendeirng the frame fully. + * This event is triggered when the map finished rendering the frame fully. *

* Register to {@link MapChange} events with {@link MapView#addOnMapChangedListener(OnMapChangedListener)}. *

@@ -937,12 +942,59 @@ public class MapView extends FrameLayout { } } + private class MapZoomControllerListener implements ZoomButtonsController.OnZoomListener { + + private final MapGestureDetector mapGestureDetector; + private final UiSettings uiSettings; + private final Transform transform; + + MapZoomControllerListener(MapGestureDetector detector, UiSettings uiSettings, Transform transform) { + this.mapGestureDetector = detector; + this.uiSettings = uiSettings; + this.transform = transform; + } + + // Not used + @Override + public void onVisibilityChanged(boolean visible) { + // Ignore + } + + // Called when user pushes a zoom button on the ZoomButtonController + @Override + public void onZoom(boolean zoomIn) { + if (uiSettings.isZoomGesturesEnabled()) { + onZoom(zoomIn, mapGestureDetector.getFocalPoint()); + } + } + + private void onZoom(boolean zoomIn, @Nullable PointF focalPoint) { + if (focalPoint != null) { + transform.zoom(zoomIn, focalPoint); + } else { + PointF centerPoint = new PointF(getMeasuredWidth() / 2, getMeasuredHeight() / 2); + transform.zoom(zoomIn, centerPoint); + } + } + } + private class CameraZoomInvalidator implements TrackingSettings.CameraZoomInvalidator { + @Override public void zoomTo(double zoomLevel) { - double currentZoomLevel = mapboxMap.getCameraPosition().zoom; + Transform transform = mapboxMap.getTransform(); + double currentZoomLevel = transform.getCameraPosition().zoom; if (currentZoomLevel < zoomLevel) { - mapboxMap.getTransform().setZoom(zoomLevel); + setZoom(zoomLevel, mapGestureDetector.getFocalPoint(), transform); + } + } + + private void setZoom(double zoomLevel, @Nullable PointF focalPoint, @NonNull Transform transform) { + if (focalPoint != null) { + transform.setZoom(zoomLevel, focalPoint); + } else { + PointF centerPoint = new PointF(getMeasuredWidth() / 2, getMeasuredHeight() / 2); + transform.setZoom(zoomLevel, centerPoint); } } } @@ -969,8 +1021,10 @@ public class MapView extends FrameLayout { mapboxMap.onPostMapReady(); } }); + } else if (change == DID_FINISH_RENDERING_FRAME || change == DID_FINISH_RENDERING_FRAME_FULLY_RENDERED) { + mapboxMap.onUpdateFullyRendered(); } else if (change == REGION_IS_CHANGING || change == REGION_DID_CHANGE || change == DID_FINISH_LOADING_MAP) { - mapboxMap.onUpdate(); + mapboxMap.onUpdateRegionChange(); } } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapZoomButtonController.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapZoomButtonController.java index 06084d906..16513904c 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapZoomButtonController.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapZoomButtonController.java @@ -16,11 +16,11 @@ final class MapZoomButtonController extends ZoomButtonsController { private UiSettings uiSettings; - MapZoomButtonController(@NonNull View ownerView, @NonNull UiSettings uiSettings, @NonNull Transform transform) { + MapZoomButtonController(@NonNull View ownerView, @NonNull UiSettings uiSettings, @NonNull OnZoomListener listener) { super(ownerView); this.uiSettings = uiSettings; setZoomSpeed(MapboxConstants.ANIMATION_DURATION); - setOnZoomListener(new OnZoomListener(uiSettings, transform)); + setOnZoomListener(listener); } @Override @@ -29,31 +29,4 @@ final class MapZoomButtonController extends ZoomButtonsController { super.setVisible(visible); } } - - // Zoom controls allow single touch only devices to zoom in and out - private static class OnZoomListener implements ZoomButtonsController.OnZoomListener { - - private final UiSettings uiSettings; - private final Transform transform; - - OnZoomListener(UiSettings uiSettings, Transform transform) { - this.uiSettings = uiSettings; - this.transform = transform; - } - - // Not used - @Override - public void onVisibilityChanged(boolean visible) { - // Ignore - } - - // Called when user pushes a zoom button - @Override - public void onZoom(boolean zoomIn) { - if (!uiSettings.isZoomGesturesEnabled()) { - return; - } - transform.zoom(zoomIn); - } - } } 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 46c5e269c..6edae8b94 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 @@ -96,6 +96,9 @@ public final class MapboxMap { setStyleUrl(options); } + /** + * Called when the hosting Activity/Fragment onStart() method is called. + */ void onStart() { nativeMapView.update(); trackingSettings.onStart(); @@ -105,10 +108,18 @@ public final class MapboxMap { } } + /** + * Called when the hosting Activity/Fragment onStop() method is called. + */ void onStop() { trackingSettings.onStop(); } + /** + * Called when the hosting Activity/Fragment is going to be destroyed and map state needs to be saved. + * + * @param outState the bundle to save the state to. + */ void onSaveInstanceState(Bundle outState) { outState.putParcelable(MapboxConstants.STATE_CAMERA_POSITION, transform.getCameraPosition()); outState.putBoolean(MapboxConstants.STATE_DEBUG_ACTIVE, nativeMapView.getDebug()); @@ -117,6 +128,11 @@ public final class MapboxMap { uiSettings.onSaveInstanceState(outState); } + /** + * Called when the hosting Activity/Fragment is recreated and map state needs to be restored. + * + * @param savedInstanceState the bundle containing the saved state + */ void onRestoreInstanceState(Bundle savedInstanceState) { final CameraPosition cameraPosition = savedInstanceState.getParcelable(MapboxConstants.STATE_CAMERA_POSITION); if (cameraPosition != null) { @@ -153,16 +169,23 @@ public final class MapboxMap { } /** - * Called when the user + * Called when the region is changing or has changed. */ - void onUpdate() { - CameraPosition cameraPosition = transform.invalidateCameraPosition(); - uiSettings.update(cameraPosition); - // FIXME introduce update method with camera position + void onUpdateRegionChange() { trackingSettings.update(); annotationManager.update(); } + /** + * Called when the map frame is fully rendered. + */ + void onUpdateFullyRendered() { + CameraPosition cameraPosition = transform.invalidateCameraPosition(); + if (cameraPosition != null) { + uiSettings.update(cameraPosition); + } + } + // Style /** @@ -815,10 +838,20 @@ public final class MapboxMap { transform.setBearing(bearing, focalX, focalY, duration); } + /** + * Returns the measured height of the Map. + * + * @return the height of the map + */ public float getHeight() { return nativeMapView.getHeight(); } + /** + * Returns the measured width of the Map. + * + * @return the width of the map + */ public float getWidth() { return nativeMapView.getWidth(); } @@ -881,35 +914,80 @@ public final class MapboxMap { /** *

- * Loads a new map style from the specified URL. + * Loads a new map style asynchronous from the specified URL. *

* {@code url} can take the following forms: *
    *
  • {@code Style.*}: load one of the bundled styles in {@link Style}.
  • *
  • {@code mapbox://styles//