diff options
| author | 2018-08-28 08:39:39 -0700 | |
|---|---|---|
| committer | 2018-09-05 23:35:15 +0000 | |
| commit | f3113c78fb1af9f5520feecb4d796b7b51e40432 (patch) | |
| tree | 5ba4c229805193b5c7c4d499ee932c56bc2f91c7 | |
| parent | 0ec8d66578d16b4e7d792c8e2829d4e942734292 (diff) | |
Add equality method for PhoneAccount.
Checks for equality between two PhoneAccounts, not taking into account
the icon, which cannot be compared with equality.
Test: Manual as part of telephony account registry updates.
Test: Added new unit tests to test equality.
Bug: 112884689
Merged-In: Change-Id: Ibd0c69425bf185dc6b79db4ca4e9ca4a770320a3
Change-Id: Ibd0c69425bf185dc6b79db4ca4e9ca4a770320a3
(cherry picked from commit a04bd3d292ce29ad6f8c94348ea1c8ce80d29e8e)
(cherry picked from commit 5df50b83bcc22a3d23de6f48d5d93418bfb63f1d)
| -rw-r--r-- | telecomm/java/android/telecom/PhoneAccount.java | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/telecomm/java/android/telecom/PhoneAccount.java b/telecomm/java/android/telecom/PhoneAccount.java index b3a3bf21cd8b..8e22221d7876 100644 --- a/telecomm/java/android/telecom/PhoneAccount.java +++ b/telecomm/java/android/telecom/PhoneAccount.java @@ -28,6 +28,7 @@ import java.lang.String; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Objects; /** * Represents a distinct method to place or receive a phone call. Apps which can place calls and @@ -348,6 +349,33 @@ public final class PhoneAccount implements Parcelable { private boolean mIsEnabled; private String mGroupId; + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + PhoneAccount that = (PhoneAccount) o; + return mCapabilities == that.mCapabilities && + mHighlightColor == that.mHighlightColor && + mSupportedAudioRoutes == that.mSupportedAudioRoutes && + mIsEnabled == that.mIsEnabled && + Objects.equals(mAccountHandle, that.mAccountHandle) && + Objects.equals(mAddress, that.mAddress) && + Objects.equals(mSubscriptionAddress, that.mSubscriptionAddress) && + Objects.equals(mLabel, that.mLabel) && + Objects.equals(mShortDescription, that.mShortDescription) && + Objects.equals(mSupportedUriSchemes, that.mSupportedUriSchemes) && + areBundlesEqual(mExtras, that.mExtras) && + Objects.equals(mGroupId, that.mGroupId); + } + + @Override + public int hashCode() { + return Objects.hash(mAccountHandle, mAddress, mSubscriptionAddress, mCapabilities, + mHighlightColor, mLabel, mShortDescription, mSupportedUriSchemes, + mSupportedAudioRoutes, + mExtras, mIsEnabled, mGroupId); + } + /** * Helper class for creating a {@link PhoneAccount}. */ @@ -1010,4 +1038,31 @@ public final class PhoneAccount implements Parcelable { return sb.toString(); } + + /** + * Determines if two {@link Bundle}s are equal. + * @param extras First {@link Bundle} to check. + * @param newExtras {@link Bundle} to compare against. + * @return {@code true} if the {@link Bundle}s are equal, {@code false} otherwise. + */ + private static boolean areBundlesEqual(Bundle extras, Bundle newExtras) { + if (extras == null || newExtras == null) { + return extras == newExtras; + } + + if (extras.size() != newExtras.size()) { + return false; + } + + for(String key : extras.keySet()) { + if (key != null) { + final Object value = extras.get(key); + final Object newValue = newExtras.get(key); + if (!Objects.equals(value, newValue)) { + return false; + } + } + } + return true; + } } |