From 2643b8eef2007c18d2e0e7d722e0372858bc66ed Mon Sep 17 00:00:00 2001 From: Roshan Pius Date: Wed, 27 May 2020 10:49:20 -0700 Subject: 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 --- .../com/android/server/wifi/WakeupController.java | 4 ++++ .../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); -- cgit v1.2.3