From a5eb823a1718cf6cada7b3306a8e11df327d8952 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Sun, 30 Jun 2019 09:26:08 -0400 Subject: [PATCH] Avoid crash with Address parcelable. There seems to be a bad implementation of Address parcelization that pops up in certain scenarios. We can avoid it by just excluding it from the parcel altogether. --- .../components/location/SignalPlace.java | 5 +---- .../securesms/maps/AddressData.java | 19 ++++++++++--------- .../securesms/maps/PlacePickerActivity.java | 6 ++++-- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/org/thoughtcrime/securesms/components/location/SignalPlace.java b/src/org/thoughtcrime/securesms/components/location/SignalPlace.java index 7e8b7ac85b..e27d099d87 100644 --- a/src/org/thoughtcrime/securesms/components/location/SignalPlace.java +++ b/src/org/thoughtcrime/securesms/components/location/SignalPlace.java @@ -1,6 +1,5 @@ package org.thoughtcrime.securesms.components.location; -import android.location.Address; import android.net.Uri; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -35,10 +34,8 @@ public class SignalPlace { private double longitude; public SignalPlace(@NonNull AddressData place) { - Address address = place.getAddress(); - this.name = ""; - this.address = address!= null ? address.getAddressLine(0) : ""; + this.address = place.getAddress(); this.latitude = place.getLatitude(); this.longitude = place.getLongitude(); } diff --git a/src/org/thoughtcrime/securesms/maps/AddressData.java b/src/org/thoughtcrime/securesms/maps/AddressData.java index cf8eec8660..a1d977ebdb 100644 --- a/src/org/thoughtcrime/securesms/maps/AddressData.java +++ b/src/org/thoughtcrime/securesms/maps/AddressData.java @@ -1,23 +1,23 @@ package org.thoughtcrime.securesms.maps; -import android.location.Address; import android.os.Parcel; import android.os.Parcelable; -import androidx.annotation.Nullable; + +import androidx.annotation.NonNull; public final class AddressData implements Parcelable { - private final double latitude; - private final double longitude; - private final @Nullable Address address; + private final double latitude; + private final double longitude; + private final String address; - AddressData(double latitude, double longitude, @Nullable Address address) { + AddressData(double latitude, double longitude, @NonNull String address) { this.latitude = latitude; this.longitude = longitude; this.address = address; } - public @Nullable Address getAddress() { + public @NonNull String getAddress() { return address; } @@ -32,9 +32,10 @@ public final class AddressData implements Parcelable { public static final Creator CREATOR = new Creator() { @Override public AddressData createFromParcel(Parcel in) { + //noinspection ConstantConditions return new AddressData(in.readDouble(), in.readDouble(), - Address.CREATOR.createFromParcel(in)); + in.readString()); } @Override @@ -47,7 +48,7 @@ public final class AddressData implements Parcelable { public void writeToParcel(Parcel dest, int flags) { dest.writeDouble(latitude); dest.writeDouble(longitude); - dest.writeParcelable(address, flags); + dest.writeString(address); } @Override diff --git a/src/org/thoughtcrime/securesms/maps/PlacePickerActivity.java b/src/org/thoughtcrime/securesms/maps/PlacePickerActivity.java index c5d14e26da..4ac82e055f 100644 --- a/src/org/thoughtcrime/securesms/maps/PlacePickerActivity.java +++ b/src/org/thoughtcrime/securesms/maps/PlacePickerActivity.java @@ -156,8 +156,10 @@ public final class PlacePickerActivity extends AppCompatActivity { } private void finishWithAddress() { - Intent returnIntent = new Intent(); - AddressData addressData = new AddressData(currentLocation.latitude, currentLocation.longitude, currentAddress); + Intent returnIntent = new Intent(); + String address = currentAddress != null && currentAddress.getAddressLine(0) != null ? currentAddress.getAddressLine(0) : ""; + AddressData addressData = new AddressData(currentLocation.latitude, currentLocation.longitude, address); + returnIntent.putExtra(ADDRESS_INTENT, addressData); setResult(RESULT_OK, returnIntent); finish();