summaryrefslogtreecommitdiff
path: root/android
diff options
context:
space:
mode:
authorLeith Bade <leith@mapbox.com>2015-11-02 14:54:54 +1100
committerLeith Bade <leith@mapbox.com>2015-11-03 16:34:14 +1100
commitf45dc606c6d73c99b091da2dc48841263cbf9645 (patch)
tree502edba4e91b70e7bc409693bf714a8094dafc77 /android
parent18fc747860c7f8141acd5b5b95a7d84866952e5d (diff)
downloadqtlocation-mapboxgl-f45dc606c6d73c99b091da2dc48841263cbf9645.tar.gz
[android] Add setZoomControlsEnabled and setAllGesturesEnabled
Fixes #1943
Diffstat (limited to 'android')
-rw-r--r--android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/views/MapView.java106
-rw-r--r--android/MapboxGLAndroidSDK/src/main/res-public/values/public.xml1
-rw-r--r--android/MapboxGLAndroidSDK/src/main/res/values/attrs.xml1
-rw-r--r--android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/MainActivity.java1
4 files changed, 83 insertions, 26 deletions
diff --git a/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/views/MapView.java b/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/views/MapView.java
index 72f6132b49..b11dcdd7a3 100644
--- a/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/views/MapView.java
+++ b/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/views/MapView.java
@@ -117,6 +117,7 @@ public final class MapView extends FrameLayout {
private static final String STATE_ZOOM_ENABLED = "zoomEnabled";
private static final String STATE_SCROLL_ENABLED = "scrollEnabled";
private static final String STATE_ROTATE_ENABLED = "rotateEnabled";
+ private static final String STATE_ZOOM_CONTROLS_ENABLED = "zoomControlsEnabled";
private static final String STATE_DEBUG_ACTIVE = "debugActive";
private static final String STATE_STYLE_URL = "styleUrl";
private static final String STATE_ACCESS_TOKEN = "accessToken";
@@ -182,6 +183,7 @@ public final class MapView extends FrameLayout {
// Shows zoom buttons
private ZoomButtonsController mZoomButtonsController;
+ private boolean mZoomControlsEnabled = false;
// Used to track trackball long presses
private TrackballLongPressTimeOut mCurrentTrackballLongPressTimeOut;
@@ -636,22 +638,20 @@ public final class MapView extends FrameLayout {
mRotateGestureDetector = new RotateGestureDetector(context, new RotateGestureListener());
// Shows the zoom controls
- // But not when in Eclipse UI editor
- if (!isInEditMode()) {
- if (!context.getPackageManager()
- .hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH)) {
- mZoomButtonsController = new ZoomButtonsController(this);
- mZoomButtonsController.setZoomSpeed(ANIMATION_DURATION);
- mZoomButtonsController.setOnZoomListener(new OnZoomListener());
- }
-
- // Check current connection status
- ConnectivityManager connectivityManager = (ConnectivityManager) context
- .getSystemService(Context.CONNECTIVITY_SERVICE);
- NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
- boolean isConnected = (activeNetwork != null) && activeNetwork.isConnectedOrConnecting();
- onConnectivityChanged(isConnected);
+ if (!context.getPackageManager()
+ .hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH)) {
+ mZoomControlsEnabled = true;
}
+ mZoomButtonsController = new ZoomButtonsController(this);
+ mZoomButtonsController.setZoomSpeed(ANIMATION_DURATION);
+ mZoomButtonsController.setOnZoomListener(new OnZoomListener());
+
+ // Check current connection status
+ ConnectivityManager connectivityManager = (ConnectivityManager) context
+ .getSystemService(Context.CONNECTIVITY_SERVICE);
+ NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
+ boolean isConnected = (activeNetwork != null) && activeNetwork.isConnectedOrConnecting();
+ onConnectivityChanged(isConnected);
// Setup user location UI
mUserLocationView = (UserLocationView) view.findViewById(R.id.userLocationView);
@@ -681,6 +681,7 @@ public final class MapView extends FrameLayout {
setZoomEnabled(typedArray.getBoolean(R.styleable.MapView_zoom_enabled, true));
setScrollEnabled(typedArray.getBoolean(R.styleable.MapView_scroll_enabled, true));
setRotateEnabled(typedArray.getBoolean(R.styleable.MapView_rotate_enabled, true));
+ setZoomControlsEnabled(typedArray.getBoolean(R.styleable.MapView_zoom_controls_enabled, isZoomControlsEnabled()));
setDebugActive(typedArray.getBoolean(R.styleable.MapView_debug_active, false));
if (typedArray.getString(R.styleable.MapView_style_url) != null) {
setStyleUrl(typedArray.getString(R.styleable.MapView_style_url));
@@ -755,6 +756,7 @@ public final class MapView extends FrameLayout {
setZoomEnabled(savedInstanceState.getBoolean(STATE_ZOOM_ENABLED));
setScrollEnabled(savedInstanceState.getBoolean(STATE_SCROLL_ENABLED));
setRotateEnabled(savedInstanceState.getBoolean(STATE_ROTATE_ENABLED));
+ setZoomControlsEnabled(savedInstanceState.getBoolean(STATE_ZOOM_CONTROLS_ENABLED));
setDebugActive(savedInstanceState.getBoolean(STATE_DEBUG_ACTIVE));
setStyleUrl(savedInstanceState.getString(STATE_STYLE_URL));
setAccessToken(savedInstanceState.getString(STATE_ACCESS_TOKEN));
@@ -835,11 +837,12 @@ public final class MapView extends FrameLayout {
// need to set zoom level first because of limitation on rotating when zoomed out
outState.putDouble(STATE_ZOOM_LEVEL, getZoomLevel());
outState.putDouble(STATE_CENTER_DIRECTION, getDirection());
- outState.putBoolean(STATE_ZOOM_ENABLED, mZoomEnabled);
- outState.putBoolean(STATE_SCROLL_ENABLED, mScrollEnabled);
- outState.putBoolean(STATE_ROTATE_ENABLED, mRotateEnabled);
+ outState.putBoolean(STATE_ZOOM_ENABLED, isZoomEnabled());
+ outState.putBoolean(STATE_SCROLL_ENABLED, isScrollEnabled());
+ outState.putBoolean(STATE_ROTATE_ENABLED, isRotateEnabled());
+ outState.putBoolean(STATE_ZOOM_CONTROLS_ENABLED, isZoomControlsEnabled());
outState.putBoolean(STATE_DEBUG_ACTIVE, isDebugActive());
- outState.putString(STATE_STYLE_URL, mStyleUrl);
+ outState.putString(STATE_STYLE_URL, getStyleUrl());
outState.putString(STATE_ACCESS_TOKEN, getAccessToken());
outState.putStringArrayList(STATE_STYLE_CLASSES, new ArrayList<>(getStyleClasses()));
outState.putLong(STATE_DEFAULT_TRANSITION_DURATION, mNativeMapView.getDefaultTransitionDuration());
@@ -1238,8 +1241,40 @@ public final class MapView extends FrameLayout {
public void setZoomEnabled(boolean zoomEnabled) {
this.mZoomEnabled = zoomEnabled;
- if ((mZoomButtonsController != null) && (getVisibility() == View.VISIBLE) && mZoomEnabled) {
+ if (mZoomControlsEnabled && (getVisibility() == View.VISIBLE) && mZoomEnabled) {
+ mZoomButtonsController.setVisible(true);
+ } else {
+ mZoomButtonsController.setVisible(false);
+ }
+ }
+
+ /**
+ * Gets whether the zoom controls are enabled.
+ *
+ * @return If true, the zoom controls are enabled.
+ */
+ public boolean isZoomControlsEnabled() {
+ return mZoomControlsEnabled;
+ }
+
+ /**
+ * Sets whether the zoom controls are enabled.
+ * If enabled, the zoom controls are a pair of buttons
+ * (one for zooming in, one for zooming out) that appear on the screen.
+ * When pressed, they cause the camera to zoom in (or out) by one zoom level.
+ * If disabled, the zoom controls are not shown.
+ * <p/>
+ * By default the zoom controls are enabled if the device is only single touch capable;
+ *
+ * @param enabled If true, the zoom controls are enabled.
+ */
+ public void setZoomControlsEnabled(boolean enabled) {
+ mZoomControlsEnabled = enabled;
+
+ if (mZoomControlsEnabled && (getVisibility() == View.VISIBLE) && mZoomEnabled) {
mZoomButtonsController.setVisible(true);
+ } else {
+ mZoomButtonsController.setVisible(false);
}
}
@@ -2205,7 +2240,7 @@ public final class MapView extends FrameLayout {
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
// Required by ZoomButtonController (from Android SDK documentation)
- if (mZoomButtonsController != null) {
+ if (mZoomControlsEnabled) {
mZoomButtonsController.setVisible(false);
}
}
@@ -2214,10 +2249,10 @@ public final class MapView extends FrameLayout {
@Override
protected void onVisibilityChanged(@NonNull View changedView, int visibility) {
// Required by ZoomButtonController (from Android SDK documentation)
- if ((mZoomButtonsController != null) && (visibility != View.VISIBLE)) {
+ if (mZoomControlsEnabled && (visibility != View.VISIBLE)) {
mZoomButtonsController.setVisible(false);
}
- if ((mZoomButtonsController != null) && (visibility == View.VISIBLE)
+ if (mZoomControlsEnabled && (visibility == View.VISIBLE)
&& mZoomEnabled) {
mZoomButtonsController.setVisible(true);
}
@@ -2227,6 +2262,25 @@ public final class MapView extends FrameLayout {
// Touch events
//
+ /**
+ * Sets the preference for whether all gestures should be enabled or disabled.
+ * <p/>
+ * This setting controls only user interactions with the map. If you set the value to false,
+ * you may still change the map location programmatically.
+ * <p/>
+ * The default value is true.
+ *
+ * @param enabled If true, all gestures are available; otherwise, all gestures are disabled.
+ * @see MapView#setZoomEnabled(boolean)
+ * @see MapView#setScrollEnabled(boolean)
+ * @see MapView#setRotateEnabled(boolean)
+ */
+ public void setAllGesturesEnabled(boolean enabled) {
+ setZoomEnabled(enabled);
+ setScrollEnabled(enabled);
+ setRotateEnabled(enabled);
+ }
+
// Called when user touches the screen, all positions are absolute
@Override
public boolean onTouchEvent(@NonNull MotionEvent event) {
@@ -2291,7 +2345,7 @@ public final class MapView extends FrameLayout {
@Override
public boolean onDown(MotionEvent e) {
// Show the zoom controls
- if ((mZoomButtonsController != null) && mZoomEnabled) {
+ if (mZoomControlsEnabled && mZoomEnabled) {
mZoomButtonsController.setVisible(true);
}
@@ -2893,14 +2947,14 @@ public final class MapView extends FrameLayout {
case MotionEvent.ACTION_HOVER_ENTER:
case MotionEvent.ACTION_HOVER_MOVE:
// Show the zoom controls
- if ((mZoomButtonsController != null) && mZoomEnabled) {
+ if (mZoomControlsEnabled && mZoomEnabled) {
mZoomButtonsController.setVisible(true);
}
return true;
case MotionEvent.ACTION_HOVER_EXIT:
// Hide the zoom controls
- if (mZoomButtonsController != null) {
+ if (mZoomControlsEnabled) {
mZoomButtonsController.setVisible(false);
}
diff --git a/android/MapboxGLAndroidSDK/src/main/res-public/values/public.xml b/android/MapboxGLAndroidSDK/src/main/res-public/values/public.xml
index 66149ffcb6..777d879d48 100644
--- a/android/MapboxGLAndroidSDK/src/main/res-public/values/public.xml
+++ b/android/MapboxGLAndroidSDK/src/main/res-public/values/public.xml
@@ -17,6 +17,7 @@
<public name="zoom_enabled" type="attr" />
<public name="scroll_enabled" type="attr" />
<public name="rotate_enabled" type="attr" />
+ <public name="zoom_controls_enabled" type="attr" />
<public name="debug_active" type="attr" />
<public name="style_url" type="attr" />
<public name="access_token" type="attr" />
diff --git a/android/MapboxGLAndroidSDK/src/main/res/values/attrs.xml b/android/MapboxGLAndroidSDK/src/main/res/values/attrs.xml
index be946714d6..ad8b600efb 100644
--- a/android/MapboxGLAndroidSDK/src/main/res/values/attrs.xml
+++ b/android/MapboxGLAndroidSDK/src/main/res/values/attrs.xml
@@ -8,6 +8,7 @@
<attr name="zoom_enabled" format="boolean" />
<attr name="scroll_enabled" format="boolean" />
<attr name="rotate_enabled" format="boolean" />
+ <attr name="zoom_controls_enabled" format="boolean" />
<attr name="debug_active" format="boolean" />
<attr name="style_url" format="string" />
<attr name="access_token" format="string" />
diff --git a/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/MainActivity.java b/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/MainActivity.java
index 32cff91ced..d0bdb3223e 100644
--- a/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/MainActivity.java
+++ b/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/MainActivity.java
@@ -115,6 +115,7 @@ public class MainActivity extends AppCompatActivity {
mMapView = (MapView) findViewById(R.id.mainMapView);
mMapView.setAccessToken(ApiAccess.getToken(this));
+ mMapView.setZoomControlsEnabled(true);
mMapView.onCreate(savedInstanceState);
mMapView.setOnFpsChangedListener(new MyOnFpsChangedListener());