diff options
-rw-r--r-- | service/java/com/android/server/wifi/WifiConnectivityManager.java | 6 | ||||
-rw-r--r-- | tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java | 25 |
2 files changed, 31 insertions, 0 deletions
diff --git a/service/java/com/android/server/wifi/WifiConnectivityManager.java b/service/java/com/android/server/wifi/WifiConnectivityManager.java index e6d285e96..078d48963 100644 --- a/service/java/com/android/server/wifi/WifiConnectivityManager.java +++ b/service/java/com/android/server/wifi/WifiConnectivityManager.java @@ -761,6 +761,12 @@ public class WifiConnectivityManager { private void startPeriodicScan(boolean scanImmediately) { mPnoScanListener.resetLowRssiNetworkRetryDelay(); + // No connectivity scan if auto roaming is disabled. + if (mWifiState == WIFI_STATE_CONNECTED + && !mConfigManager.getEnableAutoJoinWhenAssociated()) { + return; + } + // Due to b/28020168, timer based single scan will be scheduled // to provide periodic scan in an exponential backoff fashion. if (!ENABLE_BACKGROUND_SCAN) { diff --git a/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java b/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java index 2434c2db7..c0a4a4598 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiConnectivityManagerTest.java @@ -215,6 +215,7 @@ public class WifiConnectivityManagerTest { WifiConfigManager wifiConfigManager = mock(WifiConfigManager.class); when(wifiConfigManager.getWifiConfiguration(anyInt())).thenReturn(null); + when(wifiConfigManager.getEnableAutoJoinWhenAssociated()).thenReturn(true); wifiConfigManager.mThresholdSaturatedRssi24 = new AtomicInteger( WifiQualifiedNetworkSelector.RSSI_SATURATION_2G_BAND); wifiConfigManager.mCurrentNetworkBoost = new AtomicInteger( @@ -321,6 +322,30 @@ public class WifiConnectivityManagerTest { } /** + * Screen turned on while WiFi in connected state but + * auto roaming is disabled. + * + * Expected behavior: WifiConnectivityManager doesn't invoke + * WifiStateMachine.autoConnectToNetwork() because roaming + * is turned off. + */ + @Test + public void turnScreenOnWhenWifiInConnectedStateRoamingDisabled() { + // Set WiFi to connected state + mWifiConnectivityManager.handleConnectionStateChanged( + WifiConnectivityManager.WIFI_STATE_CONNECTED); + + // Turn off auto roaming + when(mWifiConfigManager.getEnableAutoJoinWhenAssociated()).thenReturn(false); + + // Set screen to on + mWifiConnectivityManager.handleScreenStateChanged(true); + + verify(mWifiStateMachine, times(0)).autoConnectToNetwork( + CANDIDATE_NETWORK_ID, CANDIDATE_BSSID); + } + + /** * Multiple back to back connection attempts within the rate interval should be rate limited. * * Expected behavior: WifiConnectivityManager calls WifiStateMachine.autoConnectToNetwork() |