diff options
Diffstat (limited to 'wifi')
-rw-r--r-- | wifi/java/android/net/wifi/WifiInfo.java | 87 | ||||
-rw-r--r-- | wifi/tests/src/android/net/wifi/WifiInfoTest.java | 81 |
2 files changed, 167 insertions, 1 deletions
diff --git a/wifi/java/android/net/wifi/WifiInfo.java b/wifi/java/android/net/wifi/WifiInfo.java index cc437a8e552a..74370827f9e9 100644 --- a/wifi/java/android/net/wifi/WifiInfo.java +++ b/wifi/java/android/net/wifi/WifiInfo.java @@ -28,6 +28,7 @@ import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; +import com.android.modules.utils.build.SdkLevel; import com.android.net.module.util.Inet4AddressUtils; import java.net.Inet4Address; @@ -35,6 +36,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 @@ -49,7 +51,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 @@ -1058,4 +1059,88 @@ 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(mRequestingPackageName, thatWifiInfo.mRequestingPackageName) + && Objects.equals(mOsuAp, thatWifiInfo.mOsuAp) + && Objects.equals(mFqdn, thatWifiInfo.mFqdn) + && Objects.equals(mProviderFriendlyName, thatWifiInfo.mProviderFriendlyName) + && 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, + mRequestingPackageName, + mOsuAp, + mFqdn, + mProviderFriendlyName, + 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 311bbc41b8fe..9787cc05ea24 100644 --- a/wifi/tests/src/android/net/wifi/WifiInfoTest.java +++ b/wifi/tests/src/android/net/wifi/WifiInfoTest.java @@ -17,6 +17,7 @@ package android.net.wifi; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertTrue; @@ -25,6 +26,8 @@ import android.os.Parcel; import androidx.test.filters.SmallTest; +import com.android.modules.utils.build.SdkLevel; + import org.junit.Test; import java.nio.charset.StandardCharsets; @@ -148,4 +151,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.setTrusted(false); + // Same behavior pre-S & post-S. + assertNotEquals(info1, info2); + + info2.setTrusted(false); + 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.setTrusted(false); + // Same behavior pre-S & post-S. + assertNotEquals(info1.hashCode(), info2.hashCode()); + + info2.setTrusted(false); + 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()); + } + } } |