[android] #4009 - add tests for tracking settings, optimise architecture to make it testable through unit tests

This commit is contained in:
Tobrun
2016-02-18 13:31:09 +01:00
parent dd7bbc024a
commit e4fa1816a7
5 changed files with 92 additions and 62 deletions

View File

@@ -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
}

View File

@@ -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;
}
}

View File

@@ -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;