diff options
author | Tobrun <tobrun.van.nuland@gmail.com> | 2016-04-01 10:59:23 +0200 |
---|---|---|
committer | Tobrun <tobrun.van.nuland@gmail.com> | 2016-04-01 10:59:23 +0200 |
commit | e6920965815171e13aba8450b77c7ecc39eb0440 (patch) | |
tree | 675297ec818624226c4ea0e706864a7f5fdb1437 /platform | |
parent | 01a0f5464d8c4b376a30144499dcc44d4006b9f4 (diff) | |
download | qtlocation-mapboxgl-e6920965815171e13aba8450b77c7ecc39eb0440.tar.gz |
[android] #4565 - improved coverage of camera package
Diffstat (limited to 'platform')
5 files changed, 201 insertions, 14 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraPosition.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraPosition.java index 679a474ae7..f9346e21d6 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraPosition.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraPosition.java @@ -70,7 +70,7 @@ public final class CameraPosition implements Parcelable { @Override public int describeContents() { - return hashCode(); + return 0; } @Override diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraUpdateFactory.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraUpdateFactory.java index fdbe44a622..58272098cf 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraUpdateFactory.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraUpdateFactory.java @@ -240,16 +240,21 @@ public final class CameraUpdateFactory { nePixel.y = Math.max(nePixel.y, viewportHeight - pixel.y); } - // Calculate wid=th/height + // Calculate width/height float width = nePixel.x - swPixel.x; float height = nePixel.y - swPixel.y; + + double zoom = 0; + float minScale = 1; // Calculate the zoom level - float scaleX = (uiSettings.getWidth() - padding.left - padding.right) / width; - float scaleY = (uiSettings.getHeight() - padding.top - padding.bottom) / height; - float minScale = scaleX < scaleY ? scaleX : scaleY; - double zoom = projection.calculateZoom(minScale); - zoom = MathUtils.clamp(zoom, (float) mapboxMap.getMinZoom(), (float) mapboxMap.getMaxZoom()); + if (padding != null) { + float scaleX = (uiSettings.getWidth() - padding.left - padding.right) / width; + float scaleY = (uiSettings.getHeight() - padding.top - padding.bottom) / height; + minScale = scaleX < scaleY ? scaleX : scaleY; + zoom = projection.calculateZoom(minScale); + zoom = MathUtils.clamp(zoom, (float) mapboxMap.getMinZoom(), (float) mapboxMap.getMaxZoom()); + } // Calculate the center point PointF paddedNEPixel = new PointF(nePixel.x + padding.right / minScale, nePixel.y + padding.top / minScale); @@ -290,13 +295,22 @@ public final class CameraUpdateFactory { // Convert point to LatLng LatLng latLng = projection.fromScreenLocation(targetPoint); - CameraPosition cameraPosition = mapboxMap.getCameraPosition(); - return new CameraPosition.Builder() - .target(latLng) - .zoom(cameraPosition.zoom) - .tilt(cameraPosition.tilt) - .bearing(cameraPosition.bearing) - .build(); + CameraPosition previousPosition = mapboxMap.getCameraPosition(); + if (latLng != null) { + return new CameraPosition.Builder() + .target(latLng) + .zoom(previousPosition.zoom) + .tilt(previousPosition.tilt) + .bearing(previousPosition.bearing) + .build(); + } else { + return new CameraPosition.Builder(true) + .tilt(previousPosition.tilt) + .zoom(previousPosition.zoom) + .bearing(previousPosition.bearing) + .target(previousPosition.target) + .build(); + } } } 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 21aee525a3..088d43e2aa 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 @@ -1449,6 +1449,14 @@ public class MapboxMap { return mMapView; } + void setUiSettings(UiSettings uiSettings){ + mUiSettings = uiSettings; + } + + void setProjection(Projection projection){ + mProjection = projection; + } + // // Invalidate // diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/camera/CameraPositionTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/camera/CameraPositionTest.java index 222007df79..9ca5c70ef1 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/camera/CameraPositionTest.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/camera/CameraPositionTest.java @@ -1,17 +1,29 @@ package com.mapbox.mapboxsdk.camera; +import android.content.res.TypedArray; +import android.os.Parcel; + import com.mapbox.mapboxsdk.constants.MapboxConstants; import com.mapbox.mapboxsdk.constants.MathConstants; import com.mapbox.mapboxsdk.geometry.LatLng; +import com.mapbox.mapboxsdk.testapp.R; import com.mapbox.mapboxsdk.utils.MathUtils; +import com.mapbox.mapboxsdk.utils.MockParcel; import org.junit.Test; +import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; public class CameraPositionTest { + private static final double DELTA = 1e-15; + @Test public void testSanity() { LatLng latLng = new LatLng(1, 2); @@ -20,6 +32,55 @@ public class CameraPositionTest { } @Test + public void testDefaultTypedArrayBuilder() { + TypedArray typedArray = null; + CameraPosition cameraPosition = new CameraPosition.Builder(typedArray).build(); + assertEquals("bearing should match", -1, cameraPosition.bearing, DELTA); + assertEquals("latlng should match", null, cameraPosition.target); + assertEquals("tilt should match", -1, cameraPosition.tilt, DELTA); + assertEquals("zoom should match", -1, cameraPosition.zoom, DELTA); + } + + @Test + public void testTypedArrayBuilder() { + float bearing = 180; + float zoom = 12; + float latitude = 10; + float longitude = 11; + float tilt = 44; + + TypedArray typedArray = mock(TypedArray.class); + when(typedArray.getFloat(R.styleable.MapView_direction, 0.0f)).thenReturn(bearing); + when(typedArray.getFloat(R.styleable.MapView_center_latitude, 0.0f)).thenReturn(latitude); + when(typedArray.getFloat(R.styleable.MapView_center_longitude, 0.0f)).thenReturn(longitude); + when(typedArray.getFloat(R.styleable.MapView_zoom, 0.0f)).thenReturn(zoom); + when(typedArray.getFloat(R.styleable.MapView_tilt, 0.0f)).thenReturn(tilt); + doNothing().when(typedArray).recycle(); + + CameraPosition cameraPosition = new CameraPosition.Builder(typedArray).build(); + assertEquals("bearing should match", bearing, cameraPosition.bearing, DELTA); + assertEquals("latlng should match", new LatLng(latitude, longitude), cameraPosition.target); + assertEquals("tilt should match", tilt, cameraPosition.tilt, DELTA); + assertEquals("zoom should match", zoom, cameraPosition.zoom, DELTA); + } + + @Test + public void testJniBuilder() { + double bearing = 180; + double zoom = 12; + double latitude = 10; + double longitude = 11; + double tilt = 44; + + double[] cameraVars = new double[]{latitude, longitude, bearing, tilt, zoom}; + CameraPosition cameraPosition = new CameraPosition.Builder(cameraVars).build(); + assertEquals("bearing should match", bearing, cameraPosition.bearing, DELTA); + assertEquals("latlng should match", new LatLng(latitude, longitude), cameraPosition.target); + assertEquals("tilt should match", tilt, cameraPosition.tilt, DELTA); + assertEquals("zoom should match", zoom, cameraPosition.zoom, DELTA); + } + + @Test public void testToString() { LatLng latLng = new LatLng(1, 2); CameraPosition cameraPosition = new CameraPosition(latLng, 3, 4, 5); @@ -74,4 +135,53 @@ public class CameraPositionTest { (CameraUpdateFactory.ZoomUpdate) CameraUpdateFactory.zoomTo(zoomLevel)); assertEquals("zoom should match", zoomLevel, builder.build().zoom, 0); } + + @Test + public void testEquals() { + LatLng latLng = new LatLng(1, 2); + CameraPosition cameraPosition = new CameraPosition(latLng, 3, 4, 5); + CameraPosition cameraPositionBearing = new CameraPosition(latLng, 3, 4, 9); + CameraPosition cameraPositionTilt = new CameraPosition(latLng, 3, 9, 5); + CameraPosition cameraPositionZoom = new CameraPosition(latLng, 9, 4, 5); + CameraPosition cameraPositionTarget = new CameraPosition(new LatLng(), 3, 4, 5); + + assertEquals("cameraPosition should match itself", cameraPosition, cameraPosition); + assertNotEquals("cameraPosition should not match null", null, cameraPosition); + assertNotEquals("cameraPosition should not match object", new Object(), cameraPosition); + assertNotEquals("cameraPosition should not match for bearing", cameraPositionBearing, cameraPosition); + assertNotEquals("cameraPosition should not match for tilt", cameraPositionTilt, cameraPosition); + assertNotEquals("cameraPosition should not match for zoom", cameraPositionZoom, cameraPosition); + assertNotEquals("cameraPosition should not match for target", cameraPositionTarget, cameraPosition); + } + + @Test + public void testParcelable() { + LatLng latLng = new LatLng(1, 2); + CameraPosition object = new CameraPosition(latLng, 3, 4, 5); + Parcel parcel = MockParcel.obtain(object); + object.writeToParcel(parcel, 0); + parcel.setDataPosition(0); + CameraPosition parceable = CameraPosition.CREATOR.createFromParcel(parcel); + assertEquals("parcel should match initial object", object, parceable); + } + + @Test + public void testParcelableArray() { + LatLng latLng = new LatLng(1, 2); + CameraPosition object1 = new CameraPosition(latLng, 3, 4, 5); + CameraPosition object2 = new CameraPosition(latLng, 9, 9, 9); + CameraPosition[] objects = new CameraPosition[]{object1, object2}; + Parcel parcel = MockParcel.obtain(objects); + parcel.writeParcelableArray(objects, 0); + parcel.setDataPosition(0); + CameraPosition[] parcelableArray = (CameraPosition[]) parcel.readParcelableArray(CameraPosition.class.getClassLoader()); + assertArrayEquals("parcel should match initial object", objects, parcelableArray); + } + + @Test + public void testDescribeContents() { + LatLng latLng = new LatLng(1, 2); + CameraPosition object = new CameraPosition(latLng, 3, 4, 5); + assertEquals("contents should be 0", 0, object.describeContents()); + } } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/maps/MapboxMapTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/maps/MapboxMapTest.java index 48a3a97003..25cc3cb327 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/maps/MapboxMapTest.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/maps/MapboxMapTest.java @@ -2,6 +2,7 @@ package com.mapbox.mapboxsdk.maps; import android.graphics.Color; import android.graphics.Point; +import android.graphics.PointF; import com.mapbox.mapboxsdk.annotations.Marker; import com.mapbox.mapboxsdk.annotations.MarkerOptions; @@ -12,6 +13,7 @@ import com.mapbox.mapboxsdk.annotations.PolylineOptions; import com.mapbox.mapboxsdk.camera.CameraPosition; import com.mapbox.mapboxsdk.camera.CameraUpdateFactory; import com.mapbox.mapboxsdk.geometry.LatLng; +import com.mapbox.mapboxsdk.geometry.LatLngBounds; import org.junit.Before; import org.junit.Test; @@ -26,6 +28,7 @@ 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.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -372,6 +375,58 @@ public class MapboxMapTest { } // + // Camera - LatLngBounds + // + @Test + public void testLatLngBounds() { + LatLng la = new LatLng(34.053940, -118.242622); + LatLng ny = new LatLng(40.712730, -74.005953); + LatLng centroid = new LatLng( + (la.getLatitude() + ny.getLatitude()) / 2, + (la.getLongitude() + ny.getLongitude()) / 2); + + Projection projection = mock(Projection.class); + when(projection.toScreenLocation(la)).thenReturn(new PointF(20, 20)); + when(projection.toScreenLocation(ny)).thenReturn(new PointF(100, 100)); + when(projection.fromScreenLocation(any(PointF.class))).thenReturn(centroid); + + UiSettings uiSettings = mock(UiSettings.class); + when(uiSettings.getHeight()).thenReturn(1000f); + + mMapboxMap.setProjection(projection); + mMapboxMap.setUiSettings(uiSettings); + + LatLngBounds bounds = new LatLngBounds.Builder().include(la).include(ny).build(); + mMapboxMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, 1)); + + assertEquals("LatLng should be same", centroid, mMapboxMap.getCameraPosition().target); + } + + + // + // CameraPositionUpdate - NPX target + // + @Test + public void testCamerePositionUpdateNullTarget() { + LatLng latLng = new LatLng(1, 1); + mMapboxMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); + mMapboxMap.moveCamera(CameraUpdateFactory.newLatLng(null)); + assertEquals("LatLng should be same", latLng, mMapboxMap.getCameraPosition().target); + } + + // + // Camera - ScrollBy + // + @Test + public void testScrollBy() { + LatLng latLng = new LatLng(1, 1); + mMapboxMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); + mMapboxMap.moveCamera(CameraUpdateFactory.scrollBy(0, 0)); + assertEquals("LatLng should be same", latLng, mMapboxMap.getCameraPosition().target); + mMapboxMap.moveCamera(CameraUpdateFactory.scrollBy(12, 12)); + } + + // // Camera - Zoom // |