summaryrefslogtreecommitdiffstats
path: root/service/java/com/android/server/wifi/WifiNetworkFactory.java
diff options
context:
space:
mode:
authorRoshan Pius <rpius@google.com>2018-11-26 10:55:01 -0800
committerRoshan Pius <rpius@google.com>2018-11-29 13:01:28 -0800
commit831804892f0a8d30c5a54536b7d54b6af88dee6e (patch)
tree86a540f9ed5596573db9ddc14a25cc9d0cc61c6c /service/java/com/android/server/wifi/WifiNetworkFactory.java
parent03c29bcf4b7edb9f6af9f0c23bc69ba88f687805 (diff)
downloadandroid_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/android/server/wifi/WifiNetworkFactory.java')
-rw-r--r--service/java/com/android/server/wifi/WifiNetworkFactory.java26
1 files changed, 26 insertions, 0 deletions
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);