diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2019-06-04 03:08:45 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2019-06-04 03:08:45 +0000 |
commit | fdb64e7d1a16115ff3fca776c746a6299e3393c5 (patch) | |
tree | b9938ec92b800f52de124079c3b842e07b597952 | |
parent | 02e9987ed656c4907a96c743e465a74d2c340111 (diff) | |
parent | 782f16649ce3e8f95fea3c701b046842bca35c18 (diff) | |
download | android_frameworks_opt_net_wifi-fdb64e7d1a16115ff3fca776c746a6299e3393c5.tar.gz android_frameworks_opt_net_wifi-fdb64e7d1a16115ff3fca776c746a6299e3393c5.tar.bz2 android_frameworks_opt_net_wifi-fdb64e7d1a16115ff3fca776c746a6299e3393c5.zip |
Snap for 5631427 from 782f16649ce3e8f95fea3c701b046842bca35c18 to qt-release
Change-Id: Ic6f1da97854542a1be18a09fb4a28705f2f7eda4
-rw-r--r-- | service/java/com/android/server/wifi/WifiNetworkSelector.java | 18 | ||||
-rw-r--r-- | tests/wifitests/src/com/android/server/wifi/WifiNetworkSelectorTest.java | 33 |
2 files changed, 51 insertions, 0 deletions
diff --git a/service/java/com/android/server/wifi/WifiNetworkSelector.java b/service/java/com/android/server/wifi/WifiNetworkSelector.java index 4b7e3f02b..85bd9174a 100644 --- a/service/java/com/android/server/wifi/WifiNetworkSelector.java +++ b/service/java/com/android/server/wifi/WifiNetworkSelector.java @@ -56,6 +56,7 @@ public class WifiNetworkSelector { private static final String TAG = "WifiNetworkSelector"; private static final long INVALID_TIME_STAMP = Long.MIN_VALUE; + /** * Minimum time gap between last successful network selection and a * new selection attempt. @@ -64,6 +65,15 @@ public class WifiNetworkSelector { public static final int MINIMUM_NETWORK_SELECTION_INTERVAL_MS = 10 * 1000; /** + * For this duration after user selected it, consider the current network as sufficient. + * + * This delays network selection during the time that connectivity service may be posting + * a dialog about a no-internet network. + */ + @VisibleForTesting + public static final int LAST_USER_SELECTION_SUFFICIENT_MS = 30_000; + + /** * Time that it takes for the boost given to the most recently user-selected * network to decay to zero. * @@ -235,6 +245,14 @@ public class WifiNetworkSelector { return false; } + if (mWifiConfigManager.getLastSelectedNetwork() == network.networkId + && (mClock.getElapsedSinceBootMillis() + - mWifiConfigManager.getLastSelectedTimeStamp()) + <= LAST_USER_SELECTION_SUFFICIENT_MS) { + localLog("Current network is recently user-selected."); + return true; + } + // OSU (Online Sign Up) network for Passpoint Release 2 is sufficient network. if (network.osu) { return true; diff --git a/tests/wifitests/src/com/android/server/wifi/WifiNetworkSelectorTest.java b/tests/wifitests/src/com/android/server/wifi/WifiNetworkSelectorTest.java index 53dae5229..bd7256a76 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiNetworkSelectorTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiNetworkSelectorTest.java @@ -960,6 +960,39 @@ public class WifiNetworkSelectorTest { } /** + * New network selection is not performed if the currently connected network + * was recently selected. + */ + @Test + public void networkIsSufficientWhenRecentlyUserSelected() { + // Approximate mClock.getElapsedSinceBootMillis value mocked by testStayOrTryToSwitch + long millisSinceBoot = SystemClock.elapsedRealtime() + + WifiNetworkSelector.MINIMUM_NETWORK_SELECTION_INTERVAL_MS + 2000; + when(mWifiConfigManager.getLastSelectedTimeStamp()) + .thenReturn(millisSinceBoot + - WifiNetworkSelector.LAST_USER_SELECTION_SUFFICIENT_MS + + 1000); + setupWifiConfigManager(0); // testStayOrTryToSwitch first connects to network 0 + // Rssi after connected. + when(mWifiInfo.getRssi()).thenReturn(mThresholdQualifiedRssi2G + 1); + // No streaming traffic. + mWifiInfo.txSuccessRate = 0.0; + mWifiInfo.rxSuccessRate = 0.0; + + testStayOrTryToSwitch( + // Parameters for network1: + mThresholdQualifiedRssi2G + 1 /* rssi before connected */, + false /* not a 5G network */, + false /* not open network */, + // Parameters for network2: + mThresholdQualifiedRssi5G + 1 /* rssi */, + true /* a 5G network */, + false /* not open network */, + // Should not try to switch. + false); + } + + /** * New network selection is performed if the currently connected network * band is 2G with bad rssi. * |