summaryrefslogtreecommitdiff
path: root/platform/android
diff options
context:
space:
mode:
authorTobrun <tobrun.van.nuland@gmail.com>2016-12-08 14:37:01 +0100
committerGitHub <noreply@github.com>2016-12-08 14:37:01 +0100
commit7cf10ee524b39d3fbcd0414ed392c4deac8677b2 (patch)
treee3d2de3d6cdc89b7cec743efd9a4f9b4a165e640 /platform/android
parent3d2dc471918a38610105509a73eda39d5112ce6b (diff)
downloadqtlocation-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
Diffstat (limited to 'platform/android')
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java2
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java10
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/TrackingSettings.java58
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java11
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationViewSettings.java29
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/maps/TrackingSettingsTest.java36
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationViewSettingsTest.java7
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());
}
-
}