WifiManagerFacade: Use a separate bcast receiver for network suggestion

Using the state change receiver causes racines with the logic tracking
connection success.

Bug: 120911848
Test: act.py -c wifi_manager.config -tb dut-name -tc WifiNetworkRequestTest -tc
WifiNetworkSuggestionTest:test_connect_to_wpa_psk_2g_with_post_connection_broadcast
Change-Id: I3d8f9dc3398591e4808bc9385b4b7a3489f3e84d
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 b38b9b7..8889f3c 100755
--- a/Common/src/com/googlecode/android_scripting/facade/wifi/WifiManagerFacade.java
+++ b/Common/src/com/googlecode/android_scripting/facade/wifi/WifiManagerFacade.java
@@ -119,13 +119,16 @@
     private final IntentFilter mScanFilter;
     private final IntentFilter mStateChangeFilter;
     private final IntentFilter mTetherFilter;
+    private final IntentFilter mNetworkSuggestionStateChangeFilter;
     private final WifiScanReceiver mScanResultsAvailableReceiver;
     private final WifiStateChangeReceiver mStateChangeReceiver;
+    private final WifiNetworkSuggestionStateChangeReceiver mNetworkSuggestionStateChangeReceiver;
     private final HandlerThread mCallbackHandlerThread;
     private final Object mCallbackLock = new Object();
     private final Map<NetworkSpecifier, NetworkCallback> mNetworkCallbacks = new HashMap<>();
     private boolean mTrackingWifiStateChange;
     private boolean mTrackingTetherStateChange;
+    private boolean mTrackingNetworkSuggestionStateChange;
     @GuardedBy("mCallbackLock")
     private NetworkRequestUserSelectionCallback mNetworkRequestUserSelectionCallback;
 
@@ -230,16 +233,20 @@
         mStateChangeFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
         mStateChangeFilter.addAction(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION);
         mStateChangeFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
-        mStateChangeFilter.addAction(WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION);
         mStateChangeFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY - 1);
 
         mTetherFilter = new IntentFilter(WifiManager.WIFI_AP_STATE_CHANGED_ACTION);
         mTetherFilter.addAction(ConnectivityManager.ACTION_TETHER_STATE_CHANGED);
 
+        mNetworkSuggestionStateChangeFilter = new IntentFilter(
+                WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION);
+
         mScanResultsAvailableReceiver = new WifiScanReceiver(mEventFacade);
         mStateChangeReceiver = new WifiStateChangeReceiver();
+        mNetworkSuggestionStateChangeReceiver = new WifiNetworkSuggestionStateChangeReceiver();
         mTrackingWifiStateChange = false;
         mTrackingTetherStateChange = false;
+        mTrackingNetworkSuggestionStateChange = false;
         mCallbackHandlerThread.start();
     }
 
@@ -357,7 +364,15 @@
                 Bundle msg = new Bundle();
                 msg.putBoolean("enabled", enabled);
                 mEventFacade.postEvent("WifiStateChanged", msg);
-            } else if (action.equals(WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION)) {
+            }
+        }
+    }
+
+    public class WifiNetworkSuggestionStateChangeReceiver extends BroadcastReceiver {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            String action = intent.getAction();
+            if (action.equals(WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION)) {
                 WifiNetworkSuggestion networkSuggestion =
                         intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_SUGGESTION);
                 mEventFacade.postEvent(
@@ -1338,6 +1353,21 @@
         }
     }
 
+    @Rpc(description = "Start listening for network suggestion change related broadcasts.")
+    public void wifiStartTrackingNetworkSuggestionStateChange() {
+        mService.registerReceiver(
+                mNetworkSuggestionStateChangeReceiver, mNetworkSuggestionStateChangeFilter);
+        mTrackingNetworkSuggestionStateChange = true;
+    }
+
+    @Rpc(description = "Stop listening for network suggestion change related broadcasts.")
+    public void wifiStopTrackingNetworkSuggestionStateChange() {
+        if (mTrackingNetworkSuggestionStateChange) {
+            mService.unregisterReceiver(mNetworkSuggestionStateChangeReceiver);
+            mTrackingNetworkSuggestionStateChange = false;
+        }
+    }
+
     @Rpc(description = "Toggle Wifi on and off.", returns = "True if Wifi is enabled.")
     public Boolean wifiToggleState(@RpcParameter(name = "enabled") @RpcOptional Boolean enabled) {
         if (enabled == null) {