diff options
author | Roshan Pius <rpius@google.com> | 2020-05-27 10:49:20 -0700 |
---|---|---|
committer | Roshan Pius <rpius@google.com> | 2020-05-27 11:10:17 -0700 |
commit | 2643b8eef2007c18d2e0e7d722e0372858bc66ed (patch) | |
tree | 33d8c1504d3516646903e431c89cc29819fc261e | |
parent | c11cd31f25516662ea9a8d6b774d9e591a3fda91 (diff) |
WifiWakeup: Ignore wakeup start if no saved networks or suggestions
If there are no saved networks or suggestions, there is no use of
starting wifi wake feature. So, gate the feature start based on whether
any saved networks are present on the device or not. This also works
around a race in the wake initialization/deinitialization sequence on
a freshly wiped device. This quick initialization/deinitialization
causes the device to not show the notification on enabling the feature
for a day.
Bug: 155795687
Test: atest com.android.server.wifi
Test: Manual tests
- Flash wipe the device.
- Connect to saved networks.
- Turn off wifi.
- Check that wake feature is enabled and the notification shown.
Change-Id: I6bc6315c9c1852e7cdb17ad73c4ed34d3895a951
-rw-r--r-- | service/java/com/android/server/wifi/WakeupController.java | 4 | ||||
-rw-r--r-- | tests/wifitests/src/com/android/server/wifi/WakeupControllerTest.java | 22 |
2 files changed, 22 insertions, 4 deletions
diff --git a/service/java/com/android/server/wifi/WakeupController.java b/service/java/com/android/server/wifi/WakeupController.java index b003b74b9..d9882dbf3 100644 --- a/service/java/com/android/server/wifi/WakeupController.java +++ b/service/java/com/android/server/wifi/WakeupController.java @@ -240,6 +240,10 @@ public class WakeupController { */ public void start() { Log.d(TAG, "start()"); + if (getGoodSavedNetworksAndSuggestions().isEmpty()) { + Log.i(TAG, "Ignore wakeup start since there are no good networks."); + return; + } mWifiInjector.getWifiScanner().registerScanListener( new HandlerExecutor(mHandler), mScanListener); diff --git a/tests/wifitests/src/com/android/server/wifi/WakeupControllerTest.java b/tests/wifitests/src/com/android/server/wifi/WakeupControllerTest.java index ed2ccce5e..9824c5b23 100644 --- a/tests/wifitests/src/com/android/server/wifi/WakeupControllerTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WakeupControllerTest.java @@ -103,6 +103,10 @@ public class WakeupControllerTest extends WifiBaseTest { .thenReturn(new int[]{DFS_CHANNEL_FREQ}); when(mWifiSettingsStore.handleWifiToggled(anyBoolean())).thenReturn(true); + // Saved network needed to start wake. + WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork(); + openNetwork.getNetworkSelectionStatus().setHasEverConnected(true); + when(mWifiConfigManager.getSavedNetworks(anyInt())).thenReturn(Arrays.asList(openNetwork)); mLooper = new TestLooper(); @@ -255,6 +259,19 @@ public class WakeupControllerTest extends WifiBaseTest { verify(mWifiWakeMetrics, never()).recordStartEvent(anyInt()); } + + /** + * Verify that start does not set the wakeup lock when feature is disabled. + */ + @Test + public void startDoesNotSetWakeupLockWhenNoSavedNetworksOrSuggestions() { + when(mWifiConfigManager.getSavedNetworks(anyInt())).thenReturn(Collections.emptyList()); + initializeWakeupController(false /* enabled */); + mWakeupController.start(); + verify(mWakeupLock, never()).setLock(any()); + verify(mWifiWakeMetrics, never()).recordStartEvent(anyInt()); + } + /** * If the controller is already active, verify that start() is ignored and no setup is done. */ @@ -537,8 +554,7 @@ public class WakeupControllerTest extends WifiBaseTest { */ @Test public void onResultsUpdatesWakeupLockWithOnlySavedNetworks() { - // no saved configs - when(mWifiConfigManager.getSavedNetworks(anyInt())).thenReturn(Collections.emptyList()); + // no matching saved configs initializeWakeupController(true /* enabled */); mWakeupController.start(); @@ -713,7 +729,6 @@ public class WakeupControllerTest extends WifiBaseTest { when(mClock.getElapsedSinceBootMillis()).thenReturn(0L, (long) (0.8 * WakeupController.LAST_DISCONNECT_TIMEOUT_MILLIS)); ScanResultMatchInfo matchInfo = ScanResultMatchInfo.fromScanResult(mTestScanResult); - when(mWifiConfigManager.getSavedNetworks(anyInt())).thenReturn(Collections.emptyList()); when(mWifiScanner.getSingleScanResults()).thenReturn(Collections.emptyList()); initializeWakeupController(true); @@ -739,7 +754,6 @@ public class WakeupControllerTest extends WifiBaseTest { when(mClock.getElapsedSinceBootMillis()).thenReturn(0L, (long) (1.2 * WakeupController.LAST_DISCONNECT_TIMEOUT_MILLIS)); ScanResultMatchInfo matchInfo = ScanResultMatchInfo.fromScanResult(mTestScanResult); - when(mWifiConfigManager.getSavedNetworks(anyInt())).thenReturn(Collections.emptyList()); when(mWifiScanner.getSingleScanResults()).thenReturn(Collections.emptyList()); initializeWakeupController(true); |