From 271b907bab302ddc480a08551201b28b3a86e443 Mon Sep 17 00:00:00 2001 From: Soonil Nagarkar Date: Tue, 10 Aug 2021 12:18:30 -0700 Subject: [PATCH] Fix Location equals() Should handle extras in a better manner. Bug: 196075248 Test: presubmits + manual Change-Id: I89e45c289b26ea97486c5a72feb0a805c8c1a950 --- location/java/android/location/Location.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/location/java/android/location/Location.java b/location/java/android/location/Location.java index 1e8b9521e41e..209903c57d90 100644 --- a/location/java/android/location/Location.java +++ b/location/java/android/location/Location.java @@ -1084,6 +1084,12 @@ public class Location implements Parcelable { mExtras = (extras == null) ? null : new Bundle(extras); } + /** + * Location equality is provided primarily for test purposes. Comparing locations for equality + * in production may indicate incorrect assumptions, and should be avoided whenever possible. + * + *

{@inheritDoc} + */ @Override public boolean equals(Object o) { if (this == o) { @@ -1121,7 +1127,17 @@ public class Location implements Parcelable { && (!hasBearingAccuracy() || Float.compare(location.mBearingAccuracyDegrees, mBearingAccuracyDegrees) == 0) && Objects.equals(mProvider, location.mProvider) - && Objects.equals(mExtras, location.mExtras); + && areExtrasEqual(mExtras, location.mExtras); + } + + private static boolean areExtrasEqual(@Nullable Bundle extras1, @Nullable Bundle extras2) { + if ((extras1 == null || extras1.isEmpty()) && (extras2 == null || extras2.isEmpty())) { + return true; + } else if (extras1 == null || extras2 == null) { + return false; + } else { + return extras1.kindofEquals(extras2); + } } @Override