[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.
This commit is contained in:
Łukasz Paczos
2019-10-10 12:04:38 +02:00
parent e909997a31
commit 3e06965f33
2 changed files with 31 additions and 3 deletions

View File

@@ -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);
}
}
/**

View File

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