diff options
author | Tobrun <tobrun.van.nuland@gmail.com> | 2016-12-08 14:37:01 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-12-08 14:37:01 +0100 |
commit | 7cf10ee524b39d3fbcd0414ed392c4deac8677b2 (patch) | |
tree | e3d2de3d6cdc89b7cec743efd9a4f9b4a165e640 | |
parent | 3d2dc471918a38610105509a73eda39d5112ce6b (diff) | |
download | qtlocation-mapboxgl-7cf10ee524b39d3fbcd0414ed392c4deac8677b2.tar.gz |
[android] - remove location enabled flag from MapboxMap (#7308)
* [android] - remove location enabled flag from MapboxMap, decouple TrackingSettings from MyLocationViewSettings using a FocalPointChangeListener interface, Move state related to tracking modes to MyLocationView (shared object between MyLocationViewSettings and FocalPointChangeListener).
* fixup tests
7 files changed, 91 insertions, 62 deletions
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 cd7caf395d..58144d7a2c 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 @@ -173,7 +173,7 @@ public class MapView extends FrameLayout { Projection projection = new Projection(nativeMapView); UiSettings uiSettings = new UiSettings(projection, focalPointInvalidator, compassView, attributionsView, logoView); TrackingSettings trackingSettings = new TrackingSettings(myLocationView, uiSettings, focalPointInvalidator); - MyLocationViewSettings myLocationViewSettings = new MyLocationViewSettings(projection, myLocationView, trackingSettings); + MyLocationViewSettings myLocationViewSettings = new MyLocationViewSettings(myLocationView, projection, focalPointInvalidator); MarkerViewManager markerViewManager = new MarkerViewManager(markerViewContainer); AnnotationManager annotationManager = new AnnotationManager(nativeMapView, this, markerViewManager); Transform transform = new Transform(nativeMapView, annotationManager.getMarkerViewManager(), trackingSettings); 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 fe274516c4..9cf09325b6 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 @@ -75,8 +75,6 @@ public final class MapboxMap { private MapboxMap.OnFpsChangedListener onFpsChangedListener; - private boolean myLocationEnabled; - private double maxZoomLevel = -1; private double minZoomLevel = -1; @@ -1526,7 +1524,7 @@ public final class MapboxMap { */ @UiThread public boolean isMyLocationEnabled() { - return myLocationEnabled; + return trackingSettings.isMyLocationEnabled(); } /** @@ -1543,12 +1541,6 @@ public final class MapboxMap { */ @UiThread public void setMyLocationEnabled(boolean enabled) { - if (!trackingSettings.isPermissionsAccepted()) { - Timber.e("Could not activate user location tracking: " - + "user did not accept the permission or permissions were not requested."); - return; - } - myLocationEnabled = enabled; trackingSettings.setMyLocationEnabled(enabled); } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/TrackingSettings.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/TrackingSettings.java index 560f7375c9..201cbe3c6b 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/TrackingSettings.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/TrackingSettings.java @@ -16,6 +16,8 @@ import com.mapbox.mapboxsdk.location.LocationListener; import com.mapbox.mapboxsdk.location.LocationServices; import com.mapbox.mapboxsdk.maps.widgets.MyLocationView; +import timber.log.Timber; + /** * Settings for the user location and bearing tracking of a MapboxMap. */ @@ -26,16 +28,12 @@ public final class TrackingSettings { private final FocalPointChangeListener focalPointChangedListener; private LocationListener myLocationListener; - @MyLocationTracking.Mode - private int myLocationTrackingMode; - - @MyBearingTracking.Mode - private int myBearingTrackingMode; + private boolean myLocationEnabled; + private boolean dismissLocationTrackingOnGesture = true; + private boolean dismissBearingTrackingOnGesture = true; private MapboxMap.OnMyLocationTrackingModeChangeListener onMyLocationTrackingModeChangeListener; private MapboxMap.OnMyBearingTrackingModeChangeListener onMyBearingTrackingModeChangeListener; - private boolean dismissLocationTrackingOnGesture = true; - private boolean dismissBearingTrackingOnGesture = true; TrackingSettings(@NonNull MyLocationView myLocationView, UiSettings uiSettings, FocalPointChangeListener focalPointChangedListener) { this.myLocationView = myLocationView; @@ -58,7 +56,6 @@ public final class TrackingSettings { */ @UiThread public void setMyLocationTrackingMode(@MyLocationTracking.Mode int myLocationTrackingMode) { - this.myLocationTrackingMode = myLocationTrackingMode; myLocationView.setMyLocationTrackingMode(myLocationTrackingMode); if (myLocationTrackingMode == MyLocationTracking.TRACKING_FOLLOW) { @@ -82,7 +79,7 @@ public final class TrackingSettings { @UiThread @MyLocationTracking.Mode public int getMyLocationTrackingMode() { - return myLocationTrackingMode; + return myLocationView.getMyLocationTrackingMode(); } /** @@ -102,7 +99,6 @@ public final class TrackingSettings { */ @UiThread public void setMyBearingTrackingMode(@MyBearingTracking.Mode int myBearingTrackingMode) { - this.myBearingTrackingMode = myBearingTrackingMode; myLocationView.setMyBearingTrackingMode(myBearingTrackingMode); if (onMyBearingTrackingModeChangeListener != null) { onMyBearingTrackingModeChangeListener.onMyBearingTrackingModeChange(myBearingTrackingMode); @@ -119,7 +115,7 @@ public final class TrackingSettings { @UiThread @MyBearingTracking.Mode public int getMyBearingTrackingMode() { - return myBearingTrackingMode; + return myLocationView.getMyBearingTrackingMode(); } /** @@ -205,7 +201,7 @@ public final class TrackingSettings { * @return True if location tracking is disabled. */ public boolean isLocationTrackingDisabled() { - return myLocationTrackingMode == MyLocationTracking.TRACKING_NONE; + return myLocationView.getMyLocationTrackingMode() == MyLocationTracking.TRACKING_NONE; } /** @@ -214,7 +210,7 @@ public final class TrackingSettings { * @return True if bearing tracking is disabled. */ public boolean isBearingTrackingDisabled() { - return myBearingTrackingMode == MyBearingTracking.NONE; + return myLocationView.getMyBearingTrackingMode() == MyBearingTracking.NONE; } /** @@ -227,7 +223,9 @@ public final class TrackingSettings { // The user settings are enabled AND; // EITHER bearing tracking is dismissed on gesture OR there is no bearing tracking return uiSettings.isRotateGesturesEnabled() && - (dismissBearingTrackingOnGesture || myBearingTrackingMode == MyBearingTracking.NONE || (myLocationTrackingMode == MyLocationTracking.TRACKING_NONE)); + (dismissBearingTrackingOnGesture + || myLocationView.getMyBearingTrackingMode() == MyBearingTracking.NONE + || myLocationView.getMyLocationTrackingMode() == MyLocationTracking.TRACKING_NONE); } /** @@ -237,7 +235,8 @@ public final class TrackingSettings { */ public boolean isScrollGestureCurrentlyEnabled() { return uiSettings.isScrollGesturesEnabled() && - (dismissLocationTrackingOnGesture || myLocationTrackingMode == MyLocationTracking.TRACKING_NONE); + (dismissLocationTrackingOnGesture + || myLocationView.getMyLocationTrackingMode() == MyLocationTracking.TRACKING_NONE); } /** @@ -263,18 +262,6 @@ public final class TrackingSettings { resetTrackingModesIfRequired(cameraPosition.target != null, cameraPosition.bearing != -1); } - public void invalidateFocalPointForTracking(MyLocationView myLocationView) { - if (!isLocationTrackingDisabled()) { - focalPointChangedListener.onFocalPointChanged(new PointF(myLocationView.getCenterX(), myLocationView.getCenterY())); - } else { - focalPointChangedListener.onFocalPointChanged(null); - } - } - - void setMyLocationEnabled(boolean enabled) { - myLocationView.setEnabled(enabled); - } - Location getMyLocation() { return myLocationView.getLocation(); } @@ -309,7 +296,22 @@ public final class TrackingSettings { this.onMyBearingTrackingModeChangeListener = onMyBearingTrackingModeChangeListener; } - MyLocationView getMyLocationView(){ + MyLocationView getMyLocationView() { return myLocationView; } + + + boolean isMyLocationEnabled() { + return myLocationEnabled; + } + + void setMyLocationEnabled(boolean locationEnabled) { + if (!isPermissionsAccepted()) { + Timber.e("Could not activate user location tracking: " + + "user did not accept the permission or permissions were not requested."); + return; + } + myLocationEnabled = locationEnabled; + myLocationView.setEnabled(locationEnabled); + } } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java index 1f30734d53..ca070a8864 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java @@ -488,6 +488,17 @@ public class MyLocationView extends View { invalidate(); } + @MyLocationTracking.Mode + public int getMyLocationTrackingMode() { + return myLocationTrackingMode; + } + + + @MyBearingTracking.Mode + public int getMyBearingTrackingMode() { + return myBearingTrackingMode; + } + private void setCompass(double bearing) { setCompass(bearing, 0 /* no animation */); } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationViewSettings.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationViewSettings.java index d8450ff451..5ff97b3af0 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationViewSettings.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationViewSettings.java @@ -1,11 +1,13 @@ package com.mapbox.mapboxsdk.maps.widgets; +import android.graphics.PointF; import android.graphics.drawable.Drawable; import android.support.annotation.ColorInt; import android.support.annotation.IntRange; +import com.mapbox.mapboxsdk.constants.MyLocationTracking; +import com.mapbox.mapboxsdk.maps.FocalPointChangeListener; import com.mapbox.mapboxsdk.maps.Projection; -import com.mapbox.mapboxsdk.maps.TrackingSettings; /** * Settings to configure the visual appearance of the MyLocationView. @@ -13,8 +15,8 @@ import com.mapbox.mapboxsdk.maps.TrackingSettings; public class MyLocationViewSettings { private Projection projection; - private TrackingSettings trackingSettings; private MyLocationView myLocationView; + private FocalPointChangeListener focalPointChangeListener; // // State @@ -59,15 +61,17 @@ public class MyLocationViewSettings { /** * Creates an instance of MyLocationViewSettings + * <p> * - * @param projection the MapView projection - * @param myLocationView the MyLocationView to apply the settings to + * @param myLocationView the MyLocationView to apply the settings to + * @param projection the MapView projection + * @param focalPointChangedListener the interface to be invoked when focal points changes * @see MyLocationView */ - public MyLocationViewSettings(Projection projection, MyLocationView myLocationView, TrackingSettings trackingSettings) { - this.projection = projection; + public MyLocationViewSettings(MyLocationView myLocationView, Projection projection, FocalPointChangeListener focalPointChangedListener) { this.myLocationView = myLocationView; - this.trackingSettings = trackingSettings; + this.projection = projection; + this.focalPointChangeListener = focalPointChangedListener; } /** @@ -212,7 +216,7 @@ public class MyLocationViewSettings { padding = new int[]{left, top, right, bottom}; myLocationView.setContentPadding(padding); projection.invalidateContentPadding(padding); - trackingSettings.invalidateFocalPointForTracking(myLocationView); + invalidateFocalPointForTracking(myLocationView); } /** @@ -265,4 +269,13 @@ public class MyLocationViewSettings { public void setTilt(double tilt) { myLocationView.setTilt(tilt); } + + private void invalidateFocalPointForTracking(MyLocationView myLocationView) { + if (!(myLocationView.getMyLocationTrackingMode() == MyLocationTracking.TRACKING_NONE)) { + focalPointChangeListener.onFocalPointChanged(new PointF(myLocationView.getCenterX(), myLocationView.getCenterY())); + } else { + focalPointChangeListener.onFocalPointChanged(null); + } + } + } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/maps/TrackingSettingsTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/maps/TrackingSettingsTest.java index 21a05d2201..96c2c57084 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/maps/TrackingSettingsTest.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/maps/TrackingSettingsTest.java @@ -1,5 +1,9 @@ package com.mapbox.mapboxsdk.maps; +import android.Manifest; +import android.content.Context; +import android.content.pm.PackageManager; + import com.mapbox.mapboxsdk.constants.MyBearingTracking; import com.mapbox.mapboxsdk.constants.MyLocationTracking; import com.mapbox.mapboxsdk.maps.widgets.MyLocationView; @@ -11,7 +15,11 @@ import org.mockito.InjectMocks; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; public class TrackingSettingsTest { @@ -27,7 +35,7 @@ public class TrackingSettingsTest { private TrackingSettings trackingSettings; @Before - public void beforeTest(){ + public void beforeTest() { trackingSettings = new TrackingSettings(myLocationView, uiSettings, focalPointChangeListener); } @@ -35,19 +43,7 @@ public class TrackingSettingsTest { public void testSanity() { assertNotNull("trackingsettings should not be null", trackingSettings); } - - @Test - public void testMyLocationTrackingMode() { - trackingSettings.setMyLocationTrackingMode(MyLocationTracking.TRACKING_FOLLOW); - assertEquals("MyLocationTrackingMode should match", MyLocationTracking.TRACKING_FOLLOW, trackingSettings.getMyLocationTrackingMode()); - } - - @Test - public void testMyBearingTrackingMode() { - trackingSettings.setMyBearingTrackingMode(MyBearingTracking.COMPASS); - assertEquals("MyLocationTrackingMode should match", MyBearingTracking.COMPASS, trackingSettings.getMyBearingTrackingMode()); - } - + @Test public void testDismissTrackingModesOnGesture() { trackingSettings.setDismissTrackingOnGesture(false); @@ -60,4 +56,16 @@ public class TrackingSettingsTest { trackingSettings.setMyLocationTrackingMode(MyLocationTracking.TRACKING_FOLLOW); assertFalse("DismissTrackingOnGesture should be false", trackingSettings.isDismissTrackingOnGesture()); } + + @Test + public void testMyLocationEnabled() { + // setup mock context to provide accepted location permission + Context context = mock(Context.class); + when(myLocationView.getContext()).thenReturn(context); + when(context.checkPermission(eq(Manifest.permission.ACCESS_COARSE_LOCATION), anyInt(), anyInt())).thenReturn(PackageManager.PERMISSION_GRANTED); + + assertFalse("Location should be disabled by default.", trackingSettings.isMyLocationEnabled()); + trackingSettings.setMyLocationEnabled(true); + assertTrue("Location should be enabled", trackingSettings.isMyLocationEnabled()); + } } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationViewSettingsTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationViewSettingsTest.java index 550040338f..a13b030dcf 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationViewSettingsTest.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationViewSettingsTest.java @@ -3,6 +3,7 @@ package com.mapbox.mapboxsdk.maps.widgets; import android.graphics.Color; import android.graphics.drawable.Drawable; +import com.mapbox.mapboxsdk.maps.FocalPointChangeListener; import com.mapbox.mapboxsdk.maps.Projection; import com.mapbox.mapboxsdk.maps.TrackingSettings; @@ -30,11 +31,14 @@ public class MyLocationViewSettingsTest { @InjectMocks TrackingSettings trackingSettings = mock(TrackingSettings.class); + @InjectMocks + FocalPointChangeListener focalPointChangeListener = mock(FocalPointChangeListener.class); + private MyLocationViewSettings locationViewSettings; @Before public void beforeTest() { - locationViewSettings = new MyLocationViewSettings(projection, myLocationView, trackingSettings); + locationViewSettings = new MyLocationViewSettings(myLocationView, projection, focalPointChangeListener); } @Test @@ -83,6 +87,5 @@ public class MyLocationViewSettingsTest { locationViewSettings.setEnabled(true); assertTrue("state should be true", locationViewSettings.isEnabled()); } - } |