[android] #4018 - migrated max/min zoom to UiSettings + added tests + update sample app

This commit is contained in:
Tobrun
2016-02-18 16:25:19 +01:00
parent 27ed15c18c
commit 9ec0103431
6 changed files with 130 additions and 90 deletions

View File

@@ -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();
}

View File

@@ -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
//

View File

@@ -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());
}
}

View File

@@ -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" />

View File

@@ -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)));
}
});

View File

@@ -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);