[android] #4018 - migrated max/min zoom to UiSettings + added tests + update sample app
This commit is contained in:
@@ -235,13 +235,15 @@ public class MapView extends FrameLayout {
|
||||
mMapboxMap.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
|
||||
|
||||
// Access token
|
||||
if (typedArray.getString(R.styleable.MapView_access_token) != null) {
|
||||
String accessToken = typedArray.getString(R.styleable.MapView_access_token);
|
||||
if (accessToken != null) {
|
||||
setAccessToken(typedArray.getString(R.styleable.MapView_access_token));
|
||||
}
|
||||
|
||||
// Style url
|
||||
if (typedArray.getString(R.styleable.MapView_style_url) != null) {
|
||||
mMapboxMap.setStyleUrl(typedArray.getString(R.styleable.MapView_style_url));
|
||||
String styleUrl = typedArray.getString(R.styleable.MapView_style_url);
|
||||
if (styleUrl != null) {
|
||||
mMapboxMap.setStyleUrl(styleUrl);
|
||||
}
|
||||
|
||||
// Enable gestures
|
||||
@@ -252,6 +254,10 @@ public class MapView extends FrameLayout {
|
||||
uiSettings.setTiltGesturesEnabled(typedArray.getBoolean(R.styleable.MapView_tilt_enabled, true));
|
||||
uiSettings.setZoomControlsEnabled(typedArray.getBoolean(R.styleable.MapView_zoom_controls_enabled, false));
|
||||
|
||||
// Zoom
|
||||
uiSettings.setMaxZoom(typedArray.getFloat(R.styleable.MapView_zoom_max, (float) MapboxConstants.MAXIMUM_ZOOM));
|
||||
uiSettings.setMinZoom(typedArray.getFloat(R.styleable.MapView_zoom_min, (float) MapboxConstants.MINIMUM_ZOOM));
|
||||
|
||||
// Compass
|
||||
uiSettings.setCompassEnabled(typedArray.getBoolean(R.styleable.MapView_compass_enabled, true));
|
||||
uiSettings.setCompassGravity(typedArray.getInt(R.styleable.MapView_compass_gravity, Gravity.TOP | Gravity.END));
|
||||
@@ -277,13 +283,7 @@ public class MapView extends FrameLayout {
|
||||
, (int) (typedArray.getDimension(R.styleable.MapView_attribution_margin_bottom, DIMENSION_SEVEN_DP) * mScreenDensity));
|
||||
|
||||
// User location
|
||||
try {
|
||||
//noinspection ResourceType
|
||||
mMapboxMap.setMyLocationEnabled(typedArray.getBoolean(R.styleable.MapView_my_location_enabled, false));
|
||||
} catch (SecurityException ignore) {
|
||||
// User did not accept location permissions
|
||||
}
|
||||
|
||||
mMapboxMap.setMyLocationEnabled(typedArray.getBoolean(R.styleable.MapView_my_location_enabled, false));
|
||||
} finally {
|
||||
typedArray.recycle();
|
||||
}
|
||||
@@ -732,7 +732,7 @@ public class MapView extends FrameLayout {
|
||||
* @return The minimum zoom level.
|
||||
*/
|
||||
@UiThread
|
||||
public double getMinZoom() {
|
||||
double getMinZoom() {
|
||||
return mNativeMapView.getMinZoom();
|
||||
}
|
||||
|
||||
@@ -744,7 +744,7 @@ public class MapView extends FrameLayout {
|
||||
* @param maxZoom The new maximum zoom level.
|
||||
*/
|
||||
@UiThread
|
||||
public void setMaxZoom(@FloatRange(from = MapboxConstants.MINIMUM_ZOOM, to = MapboxConstants.MAXIMUM_ZOOM) double maxZoom) {
|
||||
void setMaxZoom(@FloatRange(from = MapboxConstants.MINIMUM_ZOOM, to = MapboxConstants.MAXIMUM_ZOOM) double maxZoom) {
|
||||
mNativeMapView.setMaxZoom(maxZoom);
|
||||
}
|
||||
|
||||
@@ -756,7 +756,7 @@ public class MapView extends FrameLayout {
|
||||
* @return The maximum zoom level.
|
||||
*/
|
||||
@UiThread
|
||||
public double getMaxZoom() {
|
||||
double getMaxZoom() {
|
||||
return mNativeMapView.getMaxZoom();
|
||||
}
|
||||
|
||||
|
||||
@@ -302,66 +302,6 @@ public class MapboxMap {
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// ZOOM
|
||||
//
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Sets the minimum zoom level the map can be displayed at.
|
||||
* </p>
|
||||
*
|
||||
* @param minZoom The new minimum zoom level.
|
||||
*/
|
||||
@UiThread
|
||||
public void setMinZoom(@FloatRange(from = MapboxConstants.MINIMUM_ZOOM, to = MapboxConstants.MAXIMUM_ZOOM) double minZoom) {
|
||||
if ((minZoom < MapboxConstants.MINIMUM_ZOOM) || (minZoom > MapboxConstants.MAXIMUM_ZOOM)) {
|
||||
Log.e(MapboxConstants.TAG, "Not setting minZoom, value is in unsupported range: " + minZoom);
|
||||
return;
|
||||
}
|
||||
mMapView.setMinZoom(minZoom);
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Gets the maximum zoom level the map can be displayed at.
|
||||
* </p>
|
||||
*
|
||||
* @return The minimum zoom level.
|
||||
*/
|
||||
@UiThread
|
||||
public double getMinZoom() {
|
||||
return mMapView.getMinZoom();
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Sets the maximum zoom level the map can be displayed at.
|
||||
* </p>
|
||||
*
|
||||
* @param maxZoom The new maximum zoom level.
|
||||
*/
|
||||
@UiThread
|
||||
public void setMaxZoom(@FloatRange(from = MapboxConstants.MINIMUM_ZOOM, to = MapboxConstants.MAXIMUM_ZOOM) double maxZoom) {
|
||||
if ((maxZoom < MapboxConstants.MINIMUM_ZOOM) || (maxZoom > MapboxConstants.MAXIMUM_ZOOM)) {
|
||||
Log.e(MapboxConstants.TAG, "Not setting maxZoom, value is in unsupported range: " + maxZoom);
|
||||
return;
|
||||
}
|
||||
mMapView.setMaxZoom(maxZoom);
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Gets the maximum zoom level the map can be displayed at.
|
||||
* </p>
|
||||
*
|
||||
* @return The maximum zoom level.
|
||||
*/
|
||||
@UiThread
|
||||
public double getMaxZoom() {
|
||||
return mMapView.getMaxZoom();
|
||||
}
|
||||
|
||||
//
|
||||
// Manual zoom controls
|
||||
//
|
||||
|
||||
@@ -1,11 +1,15 @@
|
||||
package com.mapbox.mapboxsdk.maps;
|
||||
|
||||
import android.support.annotation.FloatRange;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.UiThread;
|
||||
import android.util.Log;
|
||||
import android.view.Gravity;
|
||||
import android.view.View;
|
||||
import android.widget.VideoView;
|
||||
|
||||
import com.mapbox.mapboxsdk.constants.MapboxConstants;
|
||||
|
||||
/**
|
||||
* Settings for the user interface of a MapboxMap. To obtain this interface, call getUiSettings().
|
||||
*/
|
||||
@@ -23,6 +27,9 @@ public class UiSettings {
|
||||
private boolean zoomControlsEnabled;
|
||||
private boolean scrollGesturesEnabled;
|
||||
|
||||
private double maxZoomLevel = -1;
|
||||
private double minZoomLevel = -1;
|
||||
|
||||
UiSettings(@NonNull MapView mapView) {
|
||||
this.mapView = mapView;
|
||||
this.compassSettings = new ViewSettings();
|
||||
@@ -30,6 +37,70 @@ public class UiSettings {
|
||||
this.attributionSettings = new ViewSettings();
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Sets the minimum zoom level the map can be displayed at.
|
||||
* </p>
|
||||
*
|
||||
* @param minZoom The new minimum zoom level.
|
||||
*/
|
||||
@UiThread
|
||||
public void setMinZoom(@FloatRange(from = MapboxConstants.MINIMUM_ZOOM, to = MapboxConstants.MAXIMUM_ZOOM) double minZoom) {
|
||||
if ((minZoom < MapboxConstants.MINIMUM_ZOOM) || (minZoom > MapboxConstants.MAXIMUM_ZOOM)) {
|
||||
Log.e(MapboxConstants.TAG, "Not setting minZoom, value is in unsupported range: " + minZoom);
|
||||
return;
|
||||
}
|
||||
minZoomLevel = minZoom;
|
||||
mapView.setMinZoom(minZoom);
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Gets the maximum zoom level the map can be displayed at.
|
||||
* </p>
|
||||
*
|
||||
* @return The minimum zoom level.
|
||||
*/
|
||||
@UiThread
|
||||
public double getMinZoom() {
|
||||
if (minZoomLevel == -1) {
|
||||
return minZoomLevel = mapView.getMinZoom();
|
||||
}
|
||||
return minZoomLevel;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Sets the maximum zoom level the map can be displayed at.
|
||||
* </p>
|
||||
*
|
||||
* @param maxZoom The new maximum zoom level.
|
||||
*/
|
||||
@UiThread
|
||||
public void setMaxZoom(@FloatRange(from = MapboxConstants.MINIMUM_ZOOM, to = MapboxConstants.MAXIMUM_ZOOM) double maxZoom) {
|
||||
if ((maxZoom < MapboxConstants.MINIMUM_ZOOM) || (maxZoom > MapboxConstants.MAXIMUM_ZOOM)) {
|
||||
Log.e(MapboxConstants.TAG, "Not setting maxZoom, value is in unsupported range: " + maxZoom);
|
||||
return;
|
||||
}
|
||||
maxZoomLevel = maxZoom;
|
||||
mapView.setMaxZoom(maxZoom);
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Gets the maximum zoom level the map can be displayed at.
|
||||
* </p>
|
||||
*
|
||||
* @return The maximum zoom level.
|
||||
*/
|
||||
@UiThread
|
||||
public double getMaxZoom() {
|
||||
if (maxZoomLevel == -1) {
|
||||
return maxZoomLevel = mapView.getMaxZoom();
|
||||
}
|
||||
return maxZoomLevel;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Enables or disables the compass. The compass is an icon on the map that indicates the
|
||||
@@ -110,7 +181,7 @@ public class UiSettings {
|
||||
* @return The top margin in pixels
|
||||
*/
|
||||
public int getCompassMarginTop() {
|
||||
return compassSettings.getMargins()[1];
|
||||
return compassSettings.getMargins()[1];
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -119,7 +190,7 @@ public class UiSettings {
|
||||
* @return The right margin in pixels
|
||||
*/
|
||||
public int getCompassMarginRight() {
|
||||
return compassSettings.getMargins()[2];
|
||||
return compassSettings.getMargins()[2];
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -128,7 +199,7 @@ public class UiSettings {
|
||||
* @return The bottom margin in pixels
|
||||
*/
|
||||
public int getCompassMarginBottom() {
|
||||
return compassSettings.getMargins()[3];
|
||||
return compassSettings.getMargins()[3];
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -141,7 +212,7 @@ public class UiSettings {
|
||||
*/
|
||||
public void setLogoEnabled(boolean enabled) {
|
||||
logoSettings.setEnabled(enabled);
|
||||
mapView.setLogoVisibility(enabled );
|
||||
mapView.setLogoVisibility(enabled);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -196,7 +267,7 @@ public class UiSettings {
|
||||
*
|
||||
* @return The left margin in pixels
|
||||
*/
|
||||
public int getLogoMarginLeft(){
|
||||
public int getLogoMarginLeft() {
|
||||
return logoSettings.getMargins()[0];
|
||||
}
|
||||
|
||||
@@ -205,7 +276,7 @@ public class UiSettings {
|
||||
*
|
||||
* @return The top margin in pixels
|
||||
*/
|
||||
public int getLogoMarginTop(){
|
||||
public int getLogoMarginTop() {
|
||||
return logoSettings.getMargins()[1];
|
||||
}
|
||||
|
||||
@@ -214,7 +285,7 @@ public class UiSettings {
|
||||
*
|
||||
* @return The right margin in pixels
|
||||
*/
|
||||
public int getLogoMarginRight(){
|
||||
public int getLogoMarginRight() {
|
||||
return logoSettings.getMargins()[2];
|
||||
}
|
||||
|
||||
@@ -223,7 +294,7 @@ public class UiSettings {
|
||||
*
|
||||
* @return The bottom margin in pixels
|
||||
*/
|
||||
public int getLogoMarginBottom(){
|
||||
public int getLogoMarginBottom() {
|
||||
return logoSettings.getMargins()[3];
|
||||
}
|
||||
|
||||
@@ -292,7 +363,7 @@ public class UiSettings {
|
||||
*
|
||||
* @return The left margin in pixels
|
||||
*/
|
||||
public int getAttributionMarginLeft(){
|
||||
public int getAttributionMarginLeft() {
|
||||
return attributionSettings.getMargins()[0];
|
||||
}
|
||||
|
||||
@@ -301,7 +372,7 @@ public class UiSettings {
|
||||
*
|
||||
* @return The top margin in pixels
|
||||
*/
|
||||
public int getAttributionMarginTop(){
|
||||
public int getAttributionMarginTop() {
|
||||
return attributionSettings.getMargins()[1];
|
||||
}
|
||||
|
||||
@@ -310,7 +381,7 @@ public class UiSettings {
|
||||
*
|
||||
* @return The right margin in pixels
|
||||
*/
|
||||
public int getAttributionMarginRight(){
|
||||
public int getAttributionMarginRight() {
|
||||
return attributionSettings.getMargins()[2];
|
||||
}
|
||||
|
||||
@@ -319,7 +390,7 @@ public class UiSettings {
|
||||
*
|
||||
* @return The bottom margin in pixels
|
||||
*/
|
||||
public int getAttributionMarginBottom(){
|
||||
public int getAttributionMarginBottom() {
|
||||
return attributionSettings.getMargins()[3];
|
||||
}
|
||||
|
||||
@@ -471,9 +542,9 @@ public class UiSettings {
|
||||
setZoomGesturesEnabled(enabled);
|
||||
}
|
||||
|
||||
public void invalidate(){
|
||||
public void invalidate() {
|
||||
mapView.setLogoMargins(getLogoMarginLeft(), getLogoMarginTop(), getLogoMarginRight(), getLogoMarginBottom());
|
||||
mapView.setCompassMargins(getCompassMarginLeft(),getCompassMarginTop(),getCompassMarginRight(),getCompassMarginBottom());
|
||||
mapView.setCompassMargins(getCompassMarginLeft(), getCompassMarginTop(), getCompassMarginRight(), getCompassMarginBottom());
|
||||
mapView.setAttributionMargins(getAttributionMarginLeft(), getAttributionMarginTop(), getAttributionMarginRight(), getAttributionMarginBottom());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
<attr name="center_longitude" format="float" />
|
||||
<attr name="center_latitude" format="float" />
|
||||
<attr name="zoom" format="float" />
|
||||
<attr name="zoom_max" format="float" />
|
||||
<attr name="zoom_min" format="float" />
|
||||
<attr name="direction" format="float" />
|
||||
<attr name="tilt" format="float" />
|
||||
<attr name="zoom_enabled" format="boolean" />
|
||||
|
||||
@@ -15,6 +15,7 @@ import com.mapbox.mapboxsdk.geometry.LatLng;
|
||||
import com.mapbox.mapboxsdk.maps.MapView;
|
||||
import com.mapbox.mapboxsdk.maps.MapboxMap;
|
||||
import com.mapbox.mapboxsdk.maps.OnMapReadyCallback;
|
||||
import com.mapbox.mapboxsdk.maps.UiSettings;
|
||||
import com.mapbox.mapboxsdk.utils.ApiAccess;
|
||||
|
||||
public class MaxMinZoomActivity extends AppCompatActivity {
|
||||
@@ -44,8 +45,11 @@ public class MaxMinZoomActivity extends AppCompatActivity {
|
||||
public void onMapReady(@NonNull final MapboxMap mapboxMap) {
|
||||
mMapboxMap = mapboxMap;
|
||||
mMapboxMap.setStyle(Style.SATELLITE_STREETS);
|
||||
mMapboxMap.setMinZoom(3);
|
||||
mMapboxMap.setMaxZoom(5);
|
||||
|
||||
UiSettings uiSettings = mapboxMap.getUiSettings();
|
||||
uiSettings.setMinZoom(3);
|
||||
uiSettings.setMaxZoom(5);
|
||||
|
||||
mMapboxMap.moveCamera(CameraUpdateFactory.newLatLng(new LatLng(-1.063510, 32.895425)));
|
||||
}
|
||||
});
|
||||
|
||||
@@ -21,6 +21,30 @@ public class UiSettingsTest {
|
||||
assertNotNull("uiSettings should not be null", uiSettings);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMinZoom() {
|
||||
double zoom = 10;
|
||||
UiSettings uiSettings = new UiSettings(mMapView);
|
||||
uiSettings.setMinZoom(zoom);
|
||||
assertEquals("MinZoom should match", zoom, uiSettings.getMinZoom(), 0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMaxZoom() {
|
||||
double zoom = 10;
|
||||
UiSettings uiSettings = new UiSettings(mMapView);
|
||||
uiSettings.setMaxZoom(zoom);
|
||||
assertEquals("MaxZoom should match", zoom, uiSettings.getMaxZoom(), 0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInitialZoomLevels() {
|
||||
//we are mocking MapView we expect a value of 0 to be returned
|
||||
UiSettings uiSettings = new UiSettings(mMapView);
|
||||
assertEquals("MaxZoom should match", 0, uiSettings.getMaxZoom(), 0);
|
||||
assertEquals("MinZoom should match", 0, uiSettings.getMinZoom(), 0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCompassEnabled() {
|
||||
UiSettings uiSettings = new UiSettings(mMapView);
|
||||
@@ -204,7 +228,6 @@ public class UiSettingsTest {
|
||||
assertEquals("Scroll gesture should be disabled", false, uiSettings.isScrollGesturesEnabled());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testInvalidate() {
|
||||
UiSettings uiSettings = new UiSettings(mMapView);
|
||||
|
||||
Reference in New Issue
Block a user