aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorŁukasz Paczos <lukasz.paczos@mapbox.com>2019-10-10 12:04:38 +0200
committerŁukasz Paczos <lukasz.paczos@mapbox.com>2019-10-10 17:52:29 +0200
commit3e06965f33d16c8135a8dc920db9f61b2f99c0db (patch)
treef4d3725546e44095aa5182617f03e8484173c53a
parente909997a31621f22cf907f7c630099cd2200f135 (diff)
[android] - manually write and read camera's padding array to parcel
This avoids relying on Parcel's util methods that do not handle null arrays gracefully.
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraPosition.java23
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/camera/CameraPositionTest.java11
2 files changed, 31 insertions, 3 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 e2341029f..fb89688e2 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
@@ -30,8 +30,16 @@ public final class CameraPosition implements Parcelable {
LatLng target = in.readParcelable(LatLng.class.getClassLoader());
double tilt = in.readDouble();
double zoom = in.readDouble();
- double[] padding = new double[4];
- in.readDoubleArray(padding);
+
+ double[] padding = null;
+ int paddingSize = in.readInt();
+ if (paddingSize > 0) {
+ padding = new double[paddingSize];
+ for (int i = 0; i < paddingSize; i++) {
+ padding[i] = in.readDouble();
+ }
+ }
+
return new CameraPosition(target, zoom, tilt, bearing, padding);
}
@@ -139,7 +147,16 @@ public final class CameraPosition implements Parcelable {
out.writeParcelable(target, flags);
out.writeDouble(tilt);
out.writeDouble(zoom);
- out.writeDoubleArray(padding);
+
+ if (padding != null) {
+ int length = padding.length;
+ out.writeInt(length);
+ for (double v : padding) {
+ out.writeDouble(v);
+ }
+ } else {
+ out.writeInt(-1);
+ }
}
/**
diff --git a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/camera/CameraPositionTest.java b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/camera/CameraPositionTest.java
index 6974705fa..dcf84c87b 100644
--- a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/camera/CameraPositionTest.java
+++ b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/camera/CameraPositionTest.java
@@ -117,4 +117,15 @@ public class CameraPositionTest {
CameraPosition cameraPosition2 = CameraPosition.CREATOR.createFromParcel(parcel);
assertEquals("Parcel should match original object", cameraPosition1, cameraPosition2);
}
+
+ @Test
+ public void testParcelableNulls() {
+ CameraPosition cameraPosition1 = new CameraPosition(null, 3, 4, 5, null);
+ Parcel parcel = Parcel.obtain();
+ cameraPosition1.writeToParcel(parcel, 0);
+ parcel.setDataPosition(0);
+
+ CameraPosition cameraPosition2 = CameraPosition.CREATOR.createFromParcel(parcel);
+ assertEquals("Parcel should match original object", cameraPosition1, cameraPosition2);
+ }
}