[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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user