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) {