summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--service/java/com/android/server/wifi/WakeupController.java42
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WakeupControllerTest.java80
2 files changed, 78 insertions, 44 deletions
diff --git a/service/java/com/android/server/wifi/WakeupController.java b/service/java/com/android/server/wifi/WakeupController.java
index 2af8ec924..47dba8ed3 100644
--- a/service/java/com/android/server/wifi/WakeupController.java
+++ b/service/java/com/android/server/wifi/WakeupController.java
@@ -72,7 +72,7 @@ public class WakeupController {
@Override
public void onResults(WifiScanner.ScanData[] results) {
if (results.length == 1 && results[0].isAllChannelsScanned()) {
- handleScanResults(Arrays.asList(results[0].getResults()));
+ handleScanResults(filterDfsScanResults(Arrays.asList(results[0].getResults())));
}
}
@@ -181,13 +181,17 @@ public class WakeupController {
if (isEnabled()) {
mWakeupOnboarding.maybeShowNotification();
- Set<ScanResultMatchInfo> savedNetworksFromLatestScan = getSavedNetworksFromLatestScan();
+ List<ScanResult> scanResults =
+ filterDfsScanResults(mWifiInjector.getWifiScanner().getSingleScanResults());
+ Set<ScanResultMatchInfo> matchInfos = toMatchInfos(scanResults);
+ matchInfos.retainAll(getGoodSavedNetworks());
+
if (mVerboseLoggingEnabled) {
- Log.d(TAG, "Saved networks in most recent scan:" + savedNetworksFromLatestScan);
+ Log.d(TAG, "Saved networks in most recent scan:" + matchInfos);
}
- mWifiWakeMetrics.recordStartEvent(savedNetworksFromLatestScan.size());
- mWakeupLock.setLock(savedNetworksFromLatestScan);
+ mWifiWakeMetrics.recordStartEvent(matchInfos.size());
+ mWakeupLock.setLock(matchInfos);
// TODO(b/77291248): request low latency scan here
}
}
@@ -218,18 +222,8 @@ public class WakeupController {
mWakeupLock.enableVerboseLogging(mVerboseLoggingEnabled);
}
- /** Returns a filtered list of saved networks from the last full scan. */
- private Set<ScanResultMatchInfo> getSavedNetworksFromLatestScan() {
- Set<ScanResult> filteredScanResults =
- filterScanResults(mWifiInjector.getWifiScanner().getSingleScanResults());
- Set<ScanResultMatchInfo> goodMatchInfos = toMatchInfos(filteredScanResults);
- goodMatchInfos.retainAll(getGoodSavedNetworks());
-
- return goodMatchInfos;
- }
-
- /** Returns a set of ScanResults with all DFS channels removed. */
- private Set<ScanResult> filterScanResults(Collection<ScanResult> scanResults) {
+ /** Returns a list of ScanResults with DFS channels removed. */
+ private List<ScanResult> filterDfsScanResults(Collection<ScanResult> scanResults) {
int[] dfsChannels = mWifiInjector.getWifiNative()
.getChannelsForBand(WifiScanner.WIFI_BAND_5_GHZ_DFS_ONLY);
if (dfsChannels == null) {
@@ -241,10 +235,10 @@ public class WakeupController {
return scanResults.stream()
.filter(scanResult -> !dfsChannelSet.contains(scanResult.frequency))
- .collect(Collectors.toSet());
+ .collect(Collectors.toList());
}
- /** Returns a filtered list of saved networks from WifiConfigManager. */
+ /** Returns a filtered set of saved networks from WifiConfigManager. */
private Set<ScanResultMatchInfo> getGoodSavedNetworks() {
List<WifiConfiguration> savedNetworks = mWifiConfigManager.getSavedNetworks();
@@ -296,15 +290,17 @@ public class WakeupController {
// need to show notification here in case user turns phone on while wifi is off
mWakeupOnboarding.maybeShowNotification();
- Set<ScanResult> filteredScanResults = filterScanResults(scanResults);
+ // filter out unsaved networks
+ Set<ScanResultMatchInfo> goodSavedNetworks = getGoodSavedNetworks();
+ Set<ScanResultMatchInfo> matchInfos = toMatchInfos(scanResults);
+ matchInfos.retainAll(goodSavedNetworks);
- mWakeupLock.update(toMatchInfos(filteredScanResults));
+ mWakeupLock.update(matchInfos);
if (!mWakeupLock.isUnlocked()) {
return;
}
- ScanResult network =
- mWakeupEvaluator.findViableNetwork(filteredScanResults, getGoodSavedNetworks());
+ ScanResult network = mWakeupEvaluator.findViableNetwork(scanResults, goodSavedNetworks);
if (network != null) {
Log.d(TAG, "Enabling wifi for network: " + network.SSID);
diff --git a/tests/wifitests/src/com/android/server/wifi/WakeupControllerTest.java b/tests/wifitests/src/com/android/server/wifi/WakeupControllerTest.java
index 1af2d65e2..a1b8b3ba7 100644
--- a/tests/wifitests/src/com/android/server/wifi/WakeupControllerTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WakeupControllerTest.java
@@ -57,7 +57,8 @@ import java.util.Set;
*/
public class WakeupControllerTest {
- private static final int DFS_CHANNEL = 5540;
+ private static final String SAVED_SSID = "test scan ssid";
+ private static final int DFS_CHANNEL_FREQ = 5540;
@Mock private Context mContext;
@Mock private WakeupLock mWakeupLock;
@@ -89,7 +90,7 @@ public class WakeupControllerTest {
when(mWifiInjector.getWifiController()).thenReturn(mWifiController);
when(mWifiInjector.getWifiNative()).thenReturn(mWifiNative);
when(mWifiNative.getChannelsForBand(WifiScanner.WIFI_BAND_5_GHZ_DFS_ONLY))
- .thenReturn(new int[]{DFS_CHANNEL});
+ .thenReturn(new int[]{DFS_CHANNEL_FREQ});
when(mWifiSettingsStore.handleWifiToggled(anyBoolean())).thenReturn(true);
@@ -97,7 +98,7 @@ public class WakeupControllerTest {
// scanlistener input
mTestScanResult = new ScanResult();
- mTestScanResult.SSID = "open ssid 1";
+ mTestScanResult.SSID = SAVED_SSID;
mTestScanResult.capabilities = "";
mTestScanResult.frequency = 2412;
ScanResult[] scanResults = new ScanResult[1];
@@ -145,10 +146,11 @@ public class WakeupControllerTest {
}
}
- private ScanResult createOpenScanResult(String ssid) {
+ private ScanResult createOpenScanResult(String ssid, int frequency) {
ScanResult scanResult = new ScanResult();
scanResult.SSID = ssid;
scanResult.capabilities = "";
+ scanResult.frequency = frequency;
return scanResult;
}
@@ -315,10 +317,8 @@ public class WakeupControllerTest {
.thenReturn(Arrays.asList(openNetwork, wepNetwork));
// scan results from most recent scan
- ScanResult savedScanResult = createOpenScanResult(ssid1);
- savedScanResult.frequency = 2412;
- ScanResult unsavedScanResult = createOpenScanResult(ssid2);
- savedScanResult.frequency = 2412;
+ ScanResult savedScanResult = createOpenScanResult(ssid1, 2412 /* frequency */);
+ ScanResult unsavedScanResult = createOpenScanResult(ssid2, 2412 /* frequency */);
when(mWifiScanner.getSingleScanResults())
.thenReturn(Arrays.asList(savedScanResult, unsavedScanResult));
@@ -338,23 +338,30 @@ public class WakeupControllerTest {
*/
@Test
public void startFiltersOutDfsScanResults() {
- String ssid = "test_ssid";
- String quotedSsid = ScanResultUtil.createQuotedSSID(ssid);
+ String ssidDfs = "DFS scan";
+ String ssid24 = "2.4 scan";
+
+ // saved configs
+ WifiConfiguration openNetworkDfs = WifiConfigurationTestUtil
+ .createOpenNetwork(ScanResultUtil.createQuotedSSID(ssidDfs));
+ openNetworkDfs.getNetworkSelectionStatus().setHasEverConnected(true);
+ WifiConfiguration openNetwork24 = WifiConfigurationTestUtil
+ .createOpenNetwork(ScanResultUtil.createQuotedSSID(ssid24));
+ openNetwork24.getNetworkSelectionStatus().setHasEverConnected(true);
- // saved config
- WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(quotedSsid);
- openNetwork.getNetworkSelectionStatus().setHasEverConnected(true);
when(mWifiConfigManager.getSavedNetworks())
- .thenReturn(Collections.singletonList(openNetwork));
+ .thenReturn(Arrays.asList(openNetworkDfs, openNetwork24));
- // scan result from most recent scan
- ScanResult scanResult = createOpenScanResult(ssid);
- scanResult.frequency = DFS_CHANNEL;
+ // scan results from most recent scan
+ ScanResult scanResultDfs = createOpenScanResult(ssidDfs, DFS_CHANNEL_FREQ);
+ ScanResult scanResult24 = createOpenScanResult(ssid24, 2412 /* frequency */);
- when(mWifiScanner.getSingleScanResults()).thenReturn(Collections.singletonList(scanResult));
+ when(mWifiScanner.getSingleScanResults())
+ .thenReturn(Arrays.asList(scanResultDfs, scanResult24));
- // intersection of most recent scan + saved configs
- Set<ScanResultMatchInfo> expectedMatchInfos = Collections.emptySet();
+ // should filter out scanResultDfs
+ Set<ScanResultMatchInfo> expectedMatchInfos =
+ Collections.singleton(ScanResultMatchInfo.fromScanResult(scanResult24));
initializeWakeupController(true /* enabled */);
mWakeupController.start();
@@ -367,6 +374,13 @@ public class WakeupControllerTest {
*/
@Test
public void onResultsUpdatesWakeupLock() {
+ // saved config
+ WifiConfiguration openNetwork = WifiConfigurationTestUtil
+ .createOpenNetwork(ScanResultUtil.createQuotedSSID(SAVED_SSID));
+ openNetwork.getNetworkSelectionStatus().setHasEverConnected(true);
+ when(mWifiConfigManager.getSavedNetworks())
+ .thenReturn(Collections.singletonList(openNetwork));
+
initializeWakeupController(true /* enabled */);
mWakeupController.start();
@@ -383,6 +397,30 @@ public class WakeupControllerTest {
verify(mWakeupLock).update(eq(Collections.singleton(expectedMatchInfo)));
}
+
+ /**
+ * Verify that onResults filters out unsaved networks when updating the WakeupLock.
+ */
+ @Test
+ public void onResultsUpdatesWakeupLockWithOnlySavedNetworks() {
+ // no saved configs
+ when(mWifiConfigManager.getSavedNetworks()).thenReturn(Collections.emptyList());
+
+ initializeWakeupController(true /* enabled */);
+ mWakeupController.start();
+
+ ArgumentCaptor<WifiScanner.ScanListener> scanListenerArgumentCaptor =
+ ArgumentCaptor.forClass(WifiScanner.ScanListener.class);
+
+ verify(mWifiScanner).registerScanListener(scanListenerArgumentCaptor.capture());
+ WifiScanner.ScanListener scanListener = scanListenerArgumentCaptor.getValue();
+
+ // incoming scan results
+ scanListener.onResults(mTestScanDatas);
+
+ verify(mWakeupLock).update(eq(Collections.emptySet()));
+ }
+
/**
* Verify that onResults filters out DFS channels.
*/
@@ -398,7 +436,7 @@ public class WakeupControllerTest {
WifiScanner.ScanListener scanListener = scanListenerArgumentCaptor.getValue();
// incoming scan results
- mTestScanResult.frequency = DFS_CHANNEL;
+ mTestScanResult.frequency = DFS_CHANNEL_FREQ;
scanListener.onResults(mTestScanDatas);
verify(mWakeupLock).update(eq(Collections.emptySet()));