Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5df50b83 authored by Tyler Gunn's avatar Tyler Gunn
Browse files

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 a04bd3d2)
parent 7795e97f
Loading
Loading
Loading
Loading
+55 −0
Original line number Diff line number Diff line
@@ -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;
    }
}