[android] #4009 - add tests for tracking settings, optimise architecture to make it testable through unit tests
This commit is contained in:
@@ -363,10 +363,11 @@ public class MapView extends FrameLayout {
|
||||
// User did not accept location permissions
|
||||
}
|
||||
|
||||
TrackingSettings trackingSettings = mMapboxMap.getTrackingSettings();
|
||||
//noinspection ResourceType
|
||||
setMyLocationTrackingMode(savedInstanceState.getInt(MapboxConstants.STATE_MY_LOCATION_TRACKING_MODE, MyLocationTracking.TRACKING_NONE));
|
||||
trackingSettings.setMyLocationTrackingMode(savedInstanceState.getInt(MapboxConstants.STATE_MY_LOCATION_TRACKING_MODE, MyLocationTracking.TRACKING_NONE));
|
||||
//noinspection ResourceType
|
||||
setMyBearingTrackingMode(savedInstanceState.getInt(MapboxConstants.STATE_MY_BEARING_TRACKING_MODE, MyBearingTracking.NONE));
|
||||
trackingSettings.setMyBearingTrackingMode(savedInstanceState.getInt(MapboxConstants.STATE_MY_BEARING_TRACKING_MODE, MyBearingTracking.NONE));
|
||||
} else {
|
||||
// Force a check for Telemetry
|
||||
validateTelemetryServiceConfigured();
|
||||
@@ -411,8 +412,12 @@ public class MapView extends FrameLayout {
|
||||
outState.putString(MapboxConstants.STATE_ACCESS_TOKEN, mMapboxMap.getAccessToken());
|
||||
outState.putLong(MapboxConstants.STATE_DEFAULT_TRANSITION_DURATION, mNativeMapView.getDefaultTransitionDuration());
|
||||
outState.putBoolean(MapboxConstants.STATE_MY_LOCATION_ENABLED, mMapboxMap.isMyLocationEnabled());
|
||||
outState.putInt(MapboxConstants.STATE_MY_LOCATION_TRACKING_MODE, getMyLocationTrackingMode());
|
||||
outState.putInt(MapboxConstants.STATE_MY_BEARING_TRACKING_MODE, getMyBearingTrackingMode());
|
||||
|
||||
|
||||
// TrackingSettings
|
||||
TrackingSettings trackingSettings = mMapboxMap.getTrackingSettings();
|
||||
outState.putInt(MapboxConstants.STATE_MY_LOCATION_TRACKING_MODE, trackingSettings.getMyLocationTrackingMode());
|
||||
outState.putInt(MapboxConstants.STATE_MY_BEARING_TRACKING_MODE, trackingSettings.getMyBearingTrackingMode());
|
||||
|
||||
// UiSettings
|
||||
UiSettings uiSettings = mMapboxMap.getUiSettings();
|
||||
@@ -1148,7 +1153,7 @@ public class MapView extends FrameLayout {
|
||||
/**
|
||||
* Sets the distance from the edges of the map view’s frame to the edges of the map
|
||||
* view’s logical viewport.
|
||||
* <p>
|
||||
* <p/>
|
||||
* When the value of this property is equal to {0,0,0,0}, viewport
|
||||
* properties such as `centerCoordinate` assume a viewport that matches the map
|
||||
* view’s frame. Otherwise, those properties are inset, excluding part of the
|
||||
@@ -1416,7 +1421,7 @@ public class MapView extends FrameLayout {
|
||||
|
||||
/**
|
||||
* Sets Bearing in degrees
|
||||
* <p>
|
||||
* <p/>
|
||||
* NOTE: Used by UserLocationView
|
||||
*
|
||||
* @param bearing Bearing in degrees
|
||||
@@ -1550,7 +1555,7 @@ public class MapView extends FrameLayout {
|
||||
}
|
||||
|
||||
// Single finger double tap
|
||||
if (mUserLocationView.getMyLocationTrackingMode() == MyLocationTracking.TRACKING_NONE) {
|
||||
if (mMapboxMap.getTrackingSettings().isLocationTrackingDisabled()) {
|
||||
// Zoom in on gesture
|
||||
zoom(true, e.getX(), e.getY());
|
||||
} else {
|
||||
@@ -1775,7 +1780,7 @@ public class MapView extends FrameLayout {
|
||||
mQuickZoom = !mTwoTap;
|
||||
|
||||
// Scale the map
|
||||
if (mMapboxMap.getUiSettings().isScrollGesturesEnabled() && !mQuickZoom && mUserLocationView.getMyLocationTrackingMode() == MyLocationTracking.TRACKING_NONE) {
|
||||
if (mMapboxMap.getUiSettings().isScrollGesturesEnabled() && !mQuickZoom && mMapboxMap.getTrackingSettings().isLocationTrackingDisabled()) {
|
||||
// around gesture
|
||||
mNativeMapView.scaleBy(detector.getScaleFactor(), detector.getFocusX() / mScreenDensity, detector.getFocusY() / mScreenDensity);
|
||||
} else {
|
||||
@@ -1853,7 +1858,7 @@ public class MapView extends FrameLayout {
|
||||
bearing += detector.getRotationDegreesDelta();
|
||||
|
||||
// Rotate the map
|
||||
if (mUserLocationView.getMyLocationTrackingMode() == MyLocationTracking.TRACKING_NONE) {
|
||||
if (mMapboxMap.getTrackingSettings().isLocationTrackingDisabled()) {
|
||||
// around gesture
|
||||
mNativeMapView.setBearing(bearing,
|
||||
detector.getFocusX() / mScreenDensity,
|
||||
@@ -2379,7 +2384,6 @@ public class MapView extends FrameLayout {
|
||||
if (myLocationTrackingMode != MyLocationTracking.TRACKING_NONE && !mMapboxMap.isMyLocationEnabled()) {
|
||||
mMapboxMap.setMyLocationEnabled(true);
|
||||
}
|
||||
|
||||
mUserLocationView.setMyLocationTrackingMode(myLocationTrackingMode);
|
||||
MapboxMap.OnMyLocationTrackingModeChangeListener listener = mMapboxMap.getOnMyLocationTrackingModeChangeListener();
|
||||
if (listener != null) {
|
||||
@@ -2387,19 +2391,6 @@ public class MapView extends FrameLayout {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the current user location tracking mode.
|
||||
*
|
||||
* @return The current user location tracking mode.
|
||||
* One of the values from {@link MyLocationTracking.Mode}.
|
||||
* @see MyLocationTracking.Mode
|
||||
*/
|
||||
@UiThread
|
||||
@MyLocationTracking.Mode
|
||||
int getMyLocationTrackingMode() {
|
||||
return mUserLocationView.getMyLocationTrackingMode();
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Set the current my bearing tracking mode.
|
||||
@@ -2426,26 +2417,11 @@ public class MapView extends FrameLayout {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the current user bearing tracking mode.
|
||||
* See {@link MyBearingTracking} for possible return values.
|
||||
*
|
||||
* @return the current user bearing tracking mode.
|
||||
* @see MyBearingTracking
|
||||
*/
|
||||
@UiThread
|
||||
@MyLocationTracking.Mode
|
||||
int getMyBearingTrackingMode() {
|
||||
//noinspection ResourceType
|
||||
return mUserLocationView.getMyBearingTrackingMode();
|
||||
}
|
||||
|
||||
private void resetTrackingModes() {
|
||||
try {
|
||||
//noinspection ResourceType
|
||||
setMyLocationTrackingMode(MyLocationTracking.TRACKING_NONE);
|
||||
//noinspection ResourceType
|
||||
setMyBearingTrackingMode(MyBearingTracking.NONE);
|
||||
TrackingSettings trackingSettings = mMapboxMap.getTrackingSettings();
|
||||
trackingSettings.setMyLocationTrackingMode(MyLocationTracking.TRACKING_NONE);
|
||||
trackingSettings.setMyBearingTrackingMode(MyBearingTracking.NONE);
|
||||
} catch (SecurityException ignore) {
|
||||
// User did not accept location permissions
|
||||
}
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
package com.mapbox.mapboxsdk.maps;
|
||||
|
||||
import android.Manifest;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.RequiresPermission;
|
||||
import android.support.annotation.UiThread;
|
||||
|
||||
import com.mapbox.mapboxsdk.constants.MyBearingTracking;
|
||||
@@ -14,6 +12,12 @@ public class TrackingSettings {
|
||||
private UiSettings uiSettings;
|
||||
private boolean dismissTrackingOnGesture = true;
|
||||
|
||||
@MyLocationTracking.Mode
|
||||
private int mMyLocationTrackingMode;
|
||||
|
||||
@MyBearingTracking.Mode
|
||||
private int mMyBearingTrackingMode;
|
||||
|
||||
TrackingSettings(@NonNull MapView mapView, UiSettings uiSettings) {
|
||||
this.mapView = mapView;
|
||||
this.uiSettings = uiSettings;
|
||||
@@ -33,10 +37,8 @@ public class TrackingSettings {
|
||||
* @see MyLocationTracking
|
||||
*/
|
||||
@UiThread
|
||||
@RequiresPermission(anyOf = {
|
||||
Manifest.permission.ACCESS_COARSE_LOCATION,
|
||||
Manifest.permission.ACCESS_FINE_LOCATION})
|
||||
public void setMyLocationTrackingMode(@MyLocationTracking.Mode int myLocationTrackingMode) {
|
||||
mMyLocationTrackingMode = myLocationTrackingMode;
|
||||
mapView.setMyLocationTrackingMode(myLocationTrackingMode);
|
||||
validateGesturesForTrackingModes();
|
||||
}
|
||||
@@ -51,7 +53,7 @@ public class TrackingSettings {
|
||||
@UiThread
|
||||
@MyLocationTracking.Mode
|
||||
public int getMyLocationTrackingMode() {
|
||||
return mapView.getMyLocationTrackingMode();
|
||||
return mMyLocationTrackingMode;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -70,10 +72,8 @@ public class TrackingSettings {
|
||||
* @see MyBearingTracking
|
||||
*/
|
||||
@UiThread
|
||||
@RequiresPermission(anyOf = {
|
||||
Manifest.permission.ACCESS_COARSE_LOCATION,
|
||||
Manifest.permission.ACCESS_FINE_LOCATION})
|
||||
public void setMyBearingTrackingMode(@MyBearingTracking.Mode int myBearingTrackingMode) {
|
||||
mMyBearingTrackingMode = myBearingTrackingMode;
|
||||
mapView.setMyBearingTrackingMode(myBearingTrackingMode);
|
||||
}
|
||||
|
||||
@@ -87,7 +87,7 @@ public class TrackingSettings {
|
||||
@UiThread
|
||||
@MyLocationTracking.Mode
|
||||
public int getMyBearingTrackingMode() {
|
||||
return mapView.getMyBearingTrackingMode();
|
||||
return mMyBearingTrackingMode;
|
||||
}
|
||||
|
||||
public boolean isDismissTrackingOnGesture() {
|
||||
@@ -100,7 +100,7 @@ public class TrackingSettings {
|
||||
}
|
||||
|
||||
private void validateGesturesForTrackingModes() {
|
||||
if(!dismissTrackingOnGesture) {
|
||||
if (!dismissTrackingOnGesture) {
|
||||
int myLocationTrackingMode = getMyLocationTrackingMode();
|
||||
int myBearingTrackingMode = getMyBearingTrackingMode();
|
||||
|
||||
@@ -114,4 +114,8 @@ public class TrackingSettings {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isLocationTrackingDisabled(){
|
||||
return mMyLocationTrackingMode == MyLocationTracking.TRACKING_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -255,11 +255,6 @@ public final class UserLocationView extends View {
|
||||
}
|
||||
}
|
||||
|
||||
@MyLocationTracking.Mode
|
||||
public int getMyLocationTrackingMode() {
|
||||
return mMyLocationTrackingMode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setEnabled(boolean enabled) {
|
||||
super.setEnabled(enabled);
|
||||
@@ -412,11 +407,6 @@ public final class UserLocationView extends View {
|
||||
update();
|
||||
}
|
||||
|
||||
@MyBearingTracking.Mode
|
||||
public int getMyBearingTrackingMode() {
|
||||
return mMyBearingTrackingMode;
|
||||
}
|
||||
|
||||
private class MyBearingListener implements SensorEventListener {
|
||||
|
||||
private SensorManager mSensorManager;
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
package com.mapbox.mapboxsdk.maps;
|
||||
|
||||
import com.mapbox.mapboxsdk.constants.MyBearingTracking;
|
||||
import com.mapbox.mapboxsdk.constants.MyLocationTracking;
|
||||
|
||||
import org.junit.Test;
|
||||
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.mockito.Mockito.mock;
|
||||
|
||||
public class TrackingSettingsTest {
|
||||
|
||||
@InjectMocks
|
||||
MapView mMapView = mock(MapView.class);
|
||||
|
||||
@Test
|
||||
public void testSanity() {
|
||||
TrackingSettings trackingSettings = new TrackingSettings(mMapView, new UiSettings(mMapView));
|
||||
assertNotNull("trackingsettings should not be null", trackingSettings);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMyLocationTrackingMode() {
|
||||
TrackingSettings trackingSettings = new TrackingSettings(mMapView, new UiSettings(mMapView));
|
||||
trackingSettings.setMyLocationTrackingMode(MyLocationTracking.TRACKING_FOLLOW);
|
||||
assertEquals("MyLocationTrackingMode should match", MyLocationTracking.TRACKING_FOLLOW, trackingSettings.getMyLocationTrackingMode());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMyBearingTrackingMode() {
|
||||
TrackingSettings trackingSettings = new TrackingSettings(mMapView, new UiSettings(mMapView));
|
||||
trackingSettings.setMyBearingTrackingMode(MyBearingTracking.COMPASS);
|
||||
assertEquals("MyLocationTrackingMode should match", MyBearingTracking.COMPASS, trackingSettings.getMyBearingTrackingMode());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDismissTrackingModesOnGesture() {
|
||||
TrackingSettings trackingSettings = new TrackingSettings(mMapView, new UiSettings(mMapView));
|
||||
trackingSettings.setDismissTrackingOnGesture(false);
|
||||
assertFalse("DismissTrackingOnGesture should be false", trackingSettings.isDismissTrackingOnGesture());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testValidateGesturesForTrackingModes(){
|
||||
TrackingSettings trackingSettings = new TrackingSettings(mMapView, new UiSettings(mMapView));
|
||||
trackingSettings.setDismissTrackingOnGesture(false);
|
||||
trackingSettings.setMyLocationTrackingMode(MyLocationTracking.TRACKING_FOLLOW);
|
||||
assertFalse("DismissTrackingOnGesture should be false", trackingSettings.isDismissTrackingOnGesture());
|
||||
}
|
||||
}
|
||||
@@ -204,4 +204,11 @@ public class UiSettingsTest {
|
||||
assertEquals("Scroll gesture should be disabled", false, uiSettings.isScrollGesturesEnabled());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testInvalidate() {
|
||||
UiSettings uiSettings = new UiSettings(mMapView);
|
||||
uiSettings.invalidate();
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user