WifiManagerFacade: Fetch WifiInfo from NetworkCapabilities

Fetch the WifiInfo for peer to peer requests (via NetworkRequest)
from onCapabilitiesChanged() callback for the request. This enables the
existing peer to peer tests to pass on STA + STA enabled devices
(WifiManager.getConnectionInfo() will return the internet connection
details when STA + STA is enabled).

Bug: 169066733
Test: act.py -c test_station_3/tests/google/wifi/config.json -tb
chromeos1-dev-test-station-3 -tc WifiNetworkRequestTest

Change-Id: I4a7995c660dec4d607c67e755c17098f336225ba
diff --git a/Common/src/com/googlecode/android_scripting/facade/wifi/WifiManagerFacade.java b/Common/src/com/googlecode/android_scripting/facade/wifi/WifiManagerFacade.java
index 926e93d..0094bc5 100755
--- a/Common/src/com/googlecode/android_scripting/facade/wifi/WifiManagerFacade.java
+++ b/Common/src/com/googlecode/android_scripting/facade/wifi/WifiManagerFacade.java
@@ -20,6 +20,7 @@
 
 import static com.googlecode.android_scripting.jsonrpc.JsonBuilder.build;
 
+import android.annotation.NonNull;
 import android.app.Service;
 import android.content.BroadcastReceiver;
 import android.content.Context;
@@ -30,6 +31,7 @@
 import android.net.DhcpInfo;
 import android.net.MacAddress;
 import android.net.Network;
+import android.net.NetworkCapabilities;
 import android.net.NetworkInfo;
 import android.net.NetworkInfo.DetailedState;
 import android.net.NetworkRequest;
@@ -210,10 +212,11 @@
 
     private final class NetworkCallbackImpl extends NetworkCallback {
         private static final String EVENT_TAG = mEventType + "NetworkCallback";
+        private boolean mOnAvailableCalled = false;
 
         @Override
         public void onAvailable(Network network) {
-            mEventFacade.postEvent(EVENT_TAG + "OnAvailable", mWifi.getConnectionInfo());
+            mOnAvailableCalled = true;
         }
 
         @Override
@@ -225,6 +228,20 @@
         public void onLost(Network network) {
             mEventFacade.postEvent(EVENT_TAG + "OnLost", null);
         }
+
+        @Override
+        public void onCapabilitiesChanged(@NonNull Network network,
+                @NonNull NetworkCapabilities networkCapabilities) {
+            if (mOnAvailableCalled) {
+                // send the onAvailable event with WifiInfo details fetched from the first
+                // onCapabilitiesChanged callback after onAvailable callback invocation.
+                mEventFacade.postEvent(EVENT_TAG + "OnAvailable",
+                        networkCapabilities.getTransportInfo());
+                mOnAvailableCalled = false;
+            }
+            mEventFacade.postEvent(EVENT_TAG + "OnCapabilitiesChanged",
+                    networkCapabilities.getTransportInfo());
+        }
     };
 
     private static class SoftApCallbackImp implements WifiManager.SoftApCallback {