diff options
author | Roshan Pius <rpius@google.com> | 2020-11-23 08:11:08 -0800 |
---|---|---|
committer | Roshan Pius <rpius@google.com> | 2020-12-22 23:47:49 -0800 |
commit | 80222a8079a886d35036ab26d2cf85479178a164 (patch) | |
tree | 8a94e055e2f479701ea94e651ef631e3a8b1481d | |
parent | 36f802a060db905490f6a24aef04d4d3641fe591 (diff) |
WifiInfo: Add equals implementation
This is needed for connectivity to compare TransportInfo instances.
(cherry-picked from aosp/1508601)
Bug: 162602799
Test: atest android.net.wifi
Change-Id: I215b769339f68b76a1b2fa15f66c4527d184b696
-rw-r--r-- | wifi/java/android/net/wifi/WifiInfo.java | 94 | ||||
-rw-r--r-- | wifi/tests/src/android/net/wifi/WifiInfoTest.java | 81 |
2 files changed, 174 insertions, 1 deletions
diff --git a/wifi/java/android/net/wifi/WifiInfo.java b/wifi/java/android/net/wifi/WifiInfo.java index 39a5a7d93b5b..eb26228e6238 100644 --- a/wifi/java/android/net/wifi/WifiInfo.java +++ b/wifi/java/android/net/wifi/WifiInfo.java @@ -37,6 +37,7 @@ import java.net.InetAddress; import java.net.UnknownHostException; import java.util.EnumMap; import java.util.Locale; +import java.util.Objects; /** * Describes the state of any Wi-Fi connection that is active or @@ -51,7 +52,6 @@ import java.util.Locale; * {@link #getPasspointProviderFriendlyName()} will return null. */ public class WifiInfo implements TransportInfo, Parcelable { - // TODO(b/162602799): Implement equals/hahscode methods. private static final String TAG = "WifiInfo"; /** * This is the map described in the Javadoc comment above. The positions @@ -1182,4 +1182,96 @@ public class WifiInfo implements TransportInfo, Parcelable { public @Nullable String getPasspointUniqueId() { return mPasspointUniqueId; } + + @Override + public boolean equals(Object that) { + if (this == that) return true; + + // Potential API behavior change, so don't change behavior on older devices. + if (!SdkLevel.isAtLeastS()) return false; + + if (!(that instanceof WifiInfo)) return false; + + WifiInfo thatWifiInfo = (WifiInfo) that; + return Objects.equals(mWifiSsid, thatWifiInfo.mWifiSsid) + && Objects.equals(mBSSID, thatWifiInfo.mBSSID) + && Objects.equals(mNetworkId, thatWifiInfo.mNetworkId) + && Objects.equals(mRssi, thatWifiInfo.mRssi) + && Objects.equals(mSupplicantState, thatWifiInfo.mSupplicantState) + && Objects.equals(mLinkSpeed, thatWifiInfo.mLinkSpeed) + && Objects.equals(mTxLinkSpeed, thatWifiInfo.mTxLinkSpeed) + && Objects.equals(mRxLinkSpeed, thatWifiInfo.mRxLinkSpeed) + && Objects.equals(mFrequency, thatWifiInfo.mFrequency) + && Objects.equals(mIpAddress, thatWifiInfo.mIpAddress) + && Objects.equals(mMacAddress, thatWifiInfo.mMacAddress) + && Objects.equals(mMeteredHint, thatWifiInfo.mMeteredHint) + && Objects.equals(mEphemeral, thatWifiInfo.mEphemeral) + && Objects.equals(mTrusted, thatWifiInfo.mTrusted) + && Objects.equals(mOemPaid, thatWifiInfo.mOemPaid) + && Objects.equals(mOemPrivate, thatWifiInfo.mOemPrivate) + && Objects.equals(mCarrierMerged, thatWifiInfo.mCarrierMerged) + && Objects.equals(mRequestingPackageName, thatWifiInfo.mRequestingPackageName) + && Objects.equals(mOsuAp, thatWifiInfo.mOsuAp) + && Objects.equals(mFqdn, thatWifiInfo.mFqdn) + && Objects.equals(mProviderFriendlyName, thatWifiInfo.mProviderFriendlyName) + && Objects.equals(mSubscriptionId, thatWifiInfo.mSubscriptionId) + && Objects.equals(txBad, thatWifiInfo.txBad) + && Objects.equals(txRetries, thatWifiInfo.txRetries) + && Objects.equals(txSuccess, thatWifiInfo.txSuccess) + && Objects.equals(rxSuccess, thatWifiInfo.rxSuccess) + && Objects.equals(mLostTxPacketsPerSecond, thatWifiInfo.mLostTxPacketsPerSecond) + && Objects.equals(mTxRetriedTxPacketsPerSecond, + thatWifiInfo.mTxRetriedTxPacketsPerSecond) + && Objects.equals(mSuccessfulTxPacketsPerSecond, + thatWifiInfo.mSuccessfulTxPacketsPerSecond) + && Objects.equals(mSuccessfulRxPacketsPerSecond, + thatWifiInfo.mSuccessfulRxPacketsPerSecond) + && Objects.equals(score, thatWifiInfo.score) + && Objects.equals(mWifiStandard, thatWifiInfo.mWifiStandard) + && Objects.equals(mMaxSupportedTxLinkSpeed, thatWifiInfo.mMaxSupportedTxLinkSpeed) + && Objects.equals(mMaxSupportedRxLinkSpeed, thatWifiInfo.mMaxSupportedRxLinkSpeed) + && Objects.equals(mPasspointUniqueId, thatWifiInfo.mPasspointUniqueId); + } + + @Override + public int hashCode() { + // Potential API behavior change, so don't change behavior on older devices. + if (!SdkLevel.isAtLeastS()) return System.identityHashCode(this); + + return Objects.hash(mWifiSsid, + mBSSID, + mNetworkId, + mRssi, + mSupplicantState, + mLinkSpeed, + mTxLinkSpeed, + mRxLinkSpeed, + mFrequency, + mIpAddress, + mMacAddress, + mMeteredHint, + mEphemeral, + mTrusted, + mOemPaid, + mOemPrivate, + mCarrierMerged, + mRequestingPackageName, + mOsuAp, + mFqdn, + mProviderFriendlyName, + mSubscriptionId, + txBad, + txRetries, + txSuccess, + rxSuccess, + mLostTxPacketsPerSecond, + mTxRetriedTxPacketsPerSecond, + mSuccessfulTxPacketsPerSecond, + mSuccessfulRxPacketsPerSecond, + score, + mWifiStandard, + mMaxSupportedTxLinkSpeed, + mMaxSupportedRxLinkSpeed, + mPasspointUniqueId); + } } diff --git a/wifi/tests/src/android/net/wifi/WifiInfoTest.java b/wifi/tests/src/android/net/wifi/WifiInfoTest.java index 33438ed9008e..ba8ca48d8607 100644 --- a/wifi/tests/src/android/net/wifi/WifiInfoTest.java +++ b/wifi/tests/src/android/net/wifi/WifiInfoTest.java @@ -18,6 +18,7 @@ package android.net.wifi; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertTrue; @@ -27,6 +28,8 @@ import android.telephony.SubscriptionManager; import androidx.test.filters.SmallTest; +import com.android.modules.utils.build.SdkLevel; + import org.junit.Test; import java.nio.charset.StandardCharsets; @@ -206,4 +209,82 @@ public class WifiInfoTest { assertEquals(TEST_RSSI, info2.getRssi()); assertEquals(TEST_NETWORK_ID2, info2.getNetworkId()); } + + @Test + public void testWifiInfoEquals() throws Exception { + WifiInfo.Builder builder = new WifiInfo.Builder() + .setSsid(TEST_SSID.getBytes(StandardCharsets.UTF_8)) + .setBssid(TEST_BSSID) + .setRssi(TEST_RSSI) + .setNetworkId(TEST_NETWORK_ID); + + WifiInfo info1 = builder.build(); + WifiInfo info2 = builder.build(); + if (SdkLevel.isAtLeastS()) { + assertEquals(info1, info2); + } else { + assertNotEquals(info1, info2); + } + + info1.setSubscriptionId(TEST_SUB_ID); + // Same behavior pre-S & post-S. + assertNotEquals(info1, info2); + + info2.setSubscriptionId(TEST_SUB_ID); + if (SdkLevel.isAtLeastS()) { + assertEquals(info1, info2); + } else { + assertNotEquals(info1, info2); + } + + info1.setSSID(WifiSsid.createFromHex(null)); + // Same behavior pre-S & post-S. + assertNotEquals(info1, info2); + + info2.setSSID(WifiSsid.createFromHex(null)); + if (SdkLevel.isAtLeastS()) { + assertEquals(info1, info2); + } else { + assertNotEquals(info1, info2); + } + } + + @Test + public void testWifiInfoHashcode() throws Exception { + WifiInfo.Builder builder = new WifiInfo.Builder() + .setSsid(TEST_SSID.getBytes(StandardCharsets.UTF_8)) + .setBssid(TEST_BSSID) + .setRssi(TEST_RSSI) + .setNetworkId(TEST_NETWORK_ID); + + WifiInfo info1 = builder.build(); + WifiInfo info2 = builder.build(); + if (SdkLevel.isAtLeastS()) { + assertEquals(info1.hashCode(), info2.hashCode()); + } else { + assertNotEquals(info1.hashCode(), info2.hashCode()); + } + + info1.setSubscriptionId(TEST_SUB_ID); + // Same behavior pre-S & post-S. + assertNotEquals(info1.hashCode(), info2.hashCode()); + + info2.setSubscriptionId(TEST_SUB_ID); + if (SdkLevel.isAtLeastS()) { + assertEquals(info1.hashCode(), info2.hashCode()); + } else { + assertNotEquals(info1.hashCode(), info2.hashCode()); + } + + info1.setSSID(WifiSsid.createFromHex(null)); + // Same behavior pre-S & post-S. + assertNotEquals(info1.hashCode(), info2.hashCode()); + + info2.setSSID(WifiSsid.createFromHex(null)); + if (SdkLevel.isAtLeastS()) { + assertEquals(info1.hashCode(), info2.hashCode()); + } else { + assertNotEquals(info1.hashCode(), info2.hashCode()); + } + } } |