ClientModeImpl: Attach WifiInfo in NetworkCapabilities

Bug: 162602799
Test: atest com.android.server.wifi
Change-Id: I255938df90d4f76be26932c18f70933e259faedc
Merged-In: I255938df90d4f76be26932c18f70933e259faedc
diff --git a/service/java/com/android/server/wifi/ClientModeImpl.java b/service/java/com/android/server/wifi/ClientModeImpl.java
index 8c05f7a..1969023 100644
--- a/service/java/com/android/server/wifi/ClientModeImpl.java
+++ b/service/java/com/android/server/wifi/ClientModeImpl.java
@@ -2459,6 +2459,7 @@
              */
             int newSignalLevel = RssiUtil.calculateSignalLevel(mContext, newRssi);
             if (newSignalLevel != mLastSignalLevel) {
+                // TODO (b/162602799): Do we need to change the update frequency?
                 updateCapabilities();
                 sendRssiChangeBroadcast(newRssi);
             }
@@ -4485,6 +4486,12 @@
         if (!mWifiInfo.getSSID().equals(WifiManager.UNKNOWN_SSID)) {
             builder.setSsid(mWifiInfo.getSSID());
         }
+
+        // Only send out WifiInfo in >= Android S devices.
+        if (SdkLevel.isAtLeastS()) {
+            builder.setTransportInfo(new WifiInfo(mWifiInfo));
+        }
+
         Pair<Integer, String> specificRequestUidAndPackageName =
                 mNetworkFactory.getSpecificNetworkRequestUidAndPackageName(
                         currentWifiConfiguration);
diff --git a/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java b/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java
index d4af7ec..f72697a 100644
--- a/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java
@@ -124,6 +124,7 @@
 import com.android.internal.util.AsyncChannel;
 import com.android.internal.util.IState;
 import com.android.internal.util.StateMachine;
+import com.android.modules.utils.build.SdkLevel;
 import com.android.server.wifi.hotspot2.NetworkDetail;
 import com.android.server.wifi.hotspot2.PasspointManager;
 import com.android.server.wifi.hotspot2.PasspointProvisioningTestUtil;
@@ -1039,6 +1040,16 @@
         assertEquals(sFreq, wifiInfo.getFrequency());
         assertTrue(sWifiSsid.equals(wifiInfo.getWifiSsid()));
         assertNull(wifiInfo.getPasspointProviderFriendlyName());
+        expectRegisterNetworkAgent((na) -> {
+        }, (nc) -> {
+                if (SdkLevel.isAtLeastS()) {
+                    WifiInfo wifiInfoFromTi = (WifiInfo) nc.getTransportInfo();
+                    assertEquals(sBSSID, wifiInfoFromTi.getBSSID());
+                    assertEquals(sFreq, wifiInfoFromTi.getFrequency());
+                    assertTrue(sWifiSsid.equals(wifiInfoFromTi.getWifiSsid()));
+                    assertNull(wifiInfoFromTi.getPasspointProviderFriendlyName());
+                }
+            });
         // Ensure the connection stats for the network is updated.
         verify(mWifiConfigManager).updateNetworkAfterConnect(FRAMEWORK_NETWORK_ID);
         verify(mWifiConfigManager).updateRandomizedMacExpireTime(any(), anyLong());
@@ -2424,7 +2435,6 @@
 
         WifiInfo connectionInfo = mCmi.syncRequestConnectionInfo();
 
-        assertNotEquals(wifiInfo, connectionInfo);
         assertEquals(wifiInfo.getSSID(), connectionInfo.getSSID());
         assertEquals(wifiInfo.getBSSID(), connectionInfo.getBSSID());
         assertEquals(wifiInfo.getMacAddress(), connectionInfo.getMacAddress());