From 3e06965f33d16c8135a8dc920db9f61b2f99c0db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Paczos?= Date: Thu, 10 Oct 2019 12:04:38 +0200 Subject: [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. --- .../mapbox/mapboxsdk/camera/CameraPosition.java | 23 +++++++++++++++++++--- .../mapboxsdk/camera/CameraPositionTest.java | 11 +++++++++++ 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 e2341029ff..fb89688e28 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 6974705fae..dcf84c87b3 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); + } } -- cgit v1.2.1