summaryrefslogtreecommitdiff
path: root/wifi
diff options
context:
space:
mode:
authorRoshan Pius <rpius@google.com>2020-11-23 08:11:08 -0800
committerRoshan Pius <rpius@google.com>2020-12-22 23:47:49 -0800
commit80222a8079a886d35036ab26d2cf85479178a164 (patch)
tree8a94e055e2f479701ea94e651ef631e3a8b1481d /wifi
parent36f802a060db905490f6a24aef04d4d3641fe591 (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
Diffstat (limited to 'wifi')
-rw-r--r--wifi/java/android/net/wifi/WifiInfo.java94
-rw-r--r--wifi/tests/src/android/net/wifi/WifiInfoTest.java81
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());
+ }
+ }
}