diff options
author | Roshan Pius <rpius@google.com> | 2018-11-26 10:55:01 -0800 |
---|---|---|
committer | Roshan Pius <rpius@google.com> | 2018-11-29 13:01:28 -0800 |
commit | 831804892f0a8d30c5a54536b7d54b6af88dee6e (patch) | |
tree | 86a540f9ed5596573db9ddc14a25cc9d0cc61c6c /service/java/com | |
parent | 03c29bcf4b7edb9f6af9f0c23bc69ba88f687805 (diff) | |
download | android_frameworks_opt_net_wifi-831804892f0a8d30c5a54536b7d54b6af88dee6e.tar.gz android_frameworks_opt_net_wifi-831804892f0a8d30c5a54536b7d54b6af88dee6e.tar.bz2 android_frameworks_opt_net_wifi-831804892f0a8d30c5a54536b7d54b6af88dee6e.zip |
WifiNetworkFactory: Handle screen state changes
Screen state changes are only processed while we're scanning for
matching networks (for an active request).
a) when the screen is off, pause periodic scanning.
b) when the screen is on, resume periodic scanning.
Bug: 117980480
Test: ./frameworks/opt/net/wifi/tests/wifitests/runtests.sh
Change-Id: I4c759380e3b5af24e3f6b2cdb2336aed71c03bd5
Diffstat (limited to 'service/java/com')
-rw-r--r-- | service/java/com/android/server/wifi/ClientModeImpl.java | 1 | ||||
-rw-r--r-- | service/java/com/android/server/wifi/WifiNetworkFactory.java | 26 |
2 files changed, 27 insertions, 0 deletions
diff --git a/service/java/com/android/server/wifi/ClientModeImpl.java b/service/java/com/android/server/wifi/ClientModeImpl.java index 20db7fdfd..29c14d272 100644 --- a/service/java/com/android/server/wifi/ClientModeImpl.java +++ b/service/java/com/android/server/wifi/ClientModeImpl.java @@ -2480,6 +2480,7 @@ public class ClientModeImpl extends StateMachine { mWifiMetrics.setScreenState(screenOn); mWifiConnectivityManager.handleScreenStateChanged(screenOn); + mNetworkFactory.handleScreenStateChanged(screenOn); if (mVerboseLoggingEnabled) log("handleScreenStateChanged Exit: " + screenOn); } diff --git a/service/java/com/android/server/wifi/WifiNetworkFactory.java b/service/java/com/android/server/wifi/WifiNetworkFactory.java index 369e36cb5..46a640aeb 100644 --- a/service/java/com/android/server/wifi/WifiNetworkFactory.java +++ b/service/java/com/android/server/wifi/WifiNetworkFactory.java @@ -98,6 +98,7 @@ public class WifiNetworkFactory extends NetworkFactory { private boolean mPeriodicScanTimerSet = false; private boolean mConnectionTimeoutSet = false; private boolean mIsConnectedToUserSelectedNetwork = false; + private boolean mIsPeriodicScanPaused = false; // Scan listener for scan requests. private class NetworkFactoryScanListener implements WifiScanner.ScanListener { @@ -564,6 +565,26 @@ public class WifiNetworkFactory extends NetworkFactory { resetStateForActiveRequestEnd(); } + /** + * Invoked by {@link ClientModeImpl} to indicate screen state changes. + */ + public void handleScreenStateChanged(boolean screenOn) { + // If there is no active request or if the user has already selected a network, + // ignore screen state changes. + if (mActiveSpecificNetworkRequest == null || mUserSelectedNetwork != null) return; + + // Pause periodic scans when the screen is off & resume when the screen is on. + if (screenOn) { + if (mVerboseLoggingEnabled) Log.v(TAG, "Resuming scans on screen on"); + startScan(); + mIsPeriodicScanPaused = false; + } else { + if (mVerboseLoggingEnabled) Log.v(TAG, "Pausing scans on screen off"); + cancelPeriodicScans(); + mIsPeriodicScanPaused = true; + } + } + private void resetState() { if (mIsConnectedToUserSelectedNetwork) { Log.i(TAG, "Disconnecting from network on reset"); @@ -583,6 +604,7 @@ public class WifiNetworkFactory extends NetworkFactory { mUserSelectedNetwork = null; mUserSelectedNetworkConnectRetryCount = 0; mIsConnectedToUserSelectedNetwork = false; + mIsPeriodicScanPaused = false; cancelPeriodicScans(); cancelConnectionTimeout(); // Remove any callbacks registered for the request. @@ -668,6 +690,10 @@ public class WifiNetworkFactory extends NetworkFactory { } private void scheduleNextPeriodicScan() { + if (mIsPeriodicScanPaused) { + Log.e(TAG, "Scan triggered when periodic scanning paused. Ignoring..."); + return; + } mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, mClock.getElapsedSinceBootMillis() + PERIODIC_SCAN_INTERVAL_MS, TAG, mPeriodicScanTimerListener, mHandler); |