diff options
author | Leith Bade <leith@mapbox.com> | 2015-11-02 14:54:54 +1100 |
---|---|---|
committer | Leith Bade <leith@mapbox.com> | 2015-11-03 16:34:14 +1100 |
commit | f45dc606c6d73c99b091da2dc48841263cbf9645 (patch) | |
tree | 502edba4e91b70e7bc409693bf714a8094dafc77 /android | |
parent | 18fc747860c7f8141acd5b5b95a7d84866952e5d (diff) | |
download | qtlocation-mapboxgl-f45dc606c6d73c99b091da2dc48841263cbf9645.tar.gz |
[android] Add setZoomControlsEnabled and setAllGesturesEnabled
Fixes #1943
Diffstat (limited to 'android')
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()); |