summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--service/java/com/android/server/wifi/WifiScanningServiceImpl.java32
-rw-r--r--service/java/com/android/server/wifi/WifiStateMachine.java9
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiScanningServiceTest.java66
3 files changed, 58 insertions, 49 deletions
diff --git a/service/java/com/android/server/wifi/WifiScanningServiceImpl.java b/service/java/com/android/server/wifi/WifiScanningServiceImpl.java
index 6f488886c..015730569 100644
--- a/service/java/com/android/server/wifi/WifiScanningServiceImpl.java
+++ b/service/java/com/android/server/wifi/WifiScanningServiceImpl.java
@@ -465,7 +465,13 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub {
// Determine the system state (Wifi enabled/disabled/associated...etc) and
// screenOn/Off, use it to increment the Metrics SystemScanState count
// mWifiMetrics.incrementWifiSystemScanStateCount(???, ???);
- if (validateAndAddToScanQueue(ci, msg.arg2, (ScanSettings) msg.obj)) {
+
+ Bundle scanParams = (Bundle) msg.obj;
+ ScanSettings scanSettings =
+ scanParams.getParcelable(WifiScanner.SCAN_PARAMS_SCAN_SETTINGS_KEY);
+ WorkSource workSource =
+ scanParams.getParcelable(WifiScanner.SCAN_PARAMS_WORK_SOURCE_KEY);
+ if (validateAndAddToScanQueue(ci, msg.arg2, scanSettings, workSource)) {
replySucceeded(msg);
// If were not currently scanning then try to start a scan. Otherwise
// this scan will be scheduled when transitioning back to IdleState
@@ -539,7 +545,8 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub {
}
}
- boolean validateAndAddToScanQueue(ClientInfo ci, int handler, ScanSettings settings) {
+ boolean validateAndAddToScanQueue(ClientInfo ci, int handler, ScanSettings settings,
+ WorkSource workSource) {
if (ci == null) {
Log.d(TAG, "Failing single scan request ClientInfo not found " + handler);
return false;
@@ -551,6 +558,7 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub {
}
}
logScanRequest("addSingleScanRequest", ci, handler, settings, null);
+ // TODO(b/27903217): Blame scan on provided work source
mPendingScans.put(ci, handler, settings);
return true;
}
@@ -893,18 +901,24 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub {
return NOT_HANDLED;
case CMD_DRIVER_UNLOADED:
return NOT_HANDLED;
- case WifiScanner.CMD_START_BACKGROUND_SCAN:
+ case WifiScanner.CMD_START_BACKGROUND_SCAN: {
mWifiMetrics.incrementBackgroundScanCount();
- if (addBackgroundScanRequest(ci, msg.arg2, (ScanSettings) msg.obj)) {
+ Bundle scanParams = (Bundle) msg.obj;
+ ScanSettings scanSettings =
+ scanParams.getParcelable(WifiScanner.SCAN_PARAMS_SCAN_SETTINGS_KEY);
+ WorkSource workSource =
+ scanParams.getParcelable(WifiScanner.SCAN_PARAMS_WORK_SOURCE_KEY);
+ if (addBackgroundScanRequest(ci, msg.arg2, scanSettings, workSource)) {
replySucceeded(msg);
} else {
replyFailed(msg, WifiScanner.REASON_INVALID_REQUEST, "bad request");
}
break;
+ }
case WifiScanner.CMD_STOP_BACKGROUND_SCAN:
removeBackgroundScanRequest(ci, msg.arg2);
break;
- case WifiScanner.CMD_START_PNO_SCAN:
+ case WifiScanner.CMD_START_PNO_SCAN: {
mWifiMetrics.incrementBackgroundScanCount();
Bundle pnoParams = (Bundle) msg.obj;
PnoSettings pnoSettings =
@@ -917,6 +931,7 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub {
replyFailed(msg, WifiScanner.REASON_INVALID_REQUEST, "bad request");
}
break;
+ }
case WifiScanner.CMD_STOP_PNO_SCAN:
removeScanRequestForPno(ci, msg.arg2);
break;
@@ -1022,7 +1037,7 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub {
}
private boolean addBackgroundScanRequest(ClientInfo ci, int handler,
- ScanSettings settings) {
+ ScanSettings settings, WorkSource workSource) {
// sanity check the input
if (ci == null) {
Log.d(TAG, "Failing scan request ClientInfo not found " + handler);
@@ -1073,6 +1088,7 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub {
}
logScanRequest("addBackgroundScanRequest", ci, handler, settings, null);
+ // TODO(b/27903217): Blame scan on provided work source
mActiveBackgroundScans.put(ci, handler, settings);
if (updateSchedule()) {
@@ -1203,7 +1219,7 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub {
// We need to schedule a background scan either because HW PNO requires background
// scan or if there is no HW PNO scan support.
if (shouldScheduleBackgroundScan) {
- if(!addBackgroundScanRequest(ci, handler, scanSettings)) {
+ if (!addBackgroundScanRequest(ci, handler, scanSettings, null)) {
loge("Background scan request for PNO failed.");
return false;
}
@@ -2010,7 +2026,7 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub {
Message msg = Message.obtain();
msg.what = WifiScanner.CMD_START_BACKGROUND_SCAN;
msg.arg2 = SCAN_COMMAND_ID;
- msg.obj = settings;
+ msg.getData().putParcelable(WifiScanner.SCAN_PARAMS_SCAN_SETTINGS_KEY, settings);
mClientHandler.sendMessage(msg);
}
diff --git a/service/java/com/android/server/wifi/WifiStateMachine.java b/service/java/com/android/server/wifi/WifiStateMachine.java
index 6a1217e7d..5b579d5ae 100644
--- a/service/java/com/android/server/wifi/WifiStateMachine.java
+++ b/service/java/com/android/server/wifi/WifiStateMachine.java
@@ -2003,7 +2003,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.PnoEven
Set<Integer> hiddenNetworkIds = mWifiConfigManager.getHiddenConfiguredNetworkIds();
// call wifi native to start the scan
- if (startScanNative(freqs, hiddenNetworkIds)) {
+ if (startScanNative(freqs, hiddenNetworkIds, workSource)) {
// only count battery consumption if scan request is accepted
noteScanStart(message.arg1, workSource);
// a full scan covers everything, clearing scan request buffer
@@ -2059,7 +2059,8 @@ public class WifiStateMachine extends StateMachine implements WifiNative.PnoEven
/**
* return true iff scan request is accepted
*/
- private boolean startScanNative(final Set<Integer> freqs, Set<Integer> hiddenNetworkIds) {
+ private boolean startScanNative(final Set<Integer> freqs, Set<Integer> hiddenNetworkIds,
+ WorkSource workSource) {
WifiScanner.ScanSettings settings = new WifiScanner.ScanSettings();
if (freqs == null) {
settings.band = WifiScanner.WIFI_BAND_BOTH_WITH_DFS;
@@ -2095,7 +2096,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.PnoEven
public void onPeriodChanged(int periodInMs) {
}
};
- mWifiScanner.startScan(settings, nativeScanListener);
+ mWifiScanner.startScan(settings, nativeScanListener, workSource);
mIsScanOngoing = true;
mIsFullScanOngoing = (freqs == null);
lastScanFreqs = freqs;
@@ -7236,7 +7237,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.PnoEven
hiddenNetworkIds.add(config.networkId);
}
// Call wifi native to start the scan
- if (startScanNative(freqs, hiddenNetworkIds)) {
+ if (startScanNative(freqs, hiddenNetworkIds, null)) {
// Only count battery consumption if scan request is accepted
noteScanStart(SCAN_ALARM_SOURCE, null);
messageHandlingStatus = MESSAGE_HANDLING_STATUS_OK;
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiScanningServiceTest.java b/tests/wifitests/src/com/android/server/wifi/WifiScanningServiceTest.java
index 88733d0c5..27c17b0c0 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiScanningServiceTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiScanningServiceTest.java
@@ -16,35 +16,21 @@
package com.android.server.wifi;
-import static com.android.server.wifi.ScanTestUtil.NativeScanSettingsBuilder;
-import static com.android.server.wifi.ScanTestUtil.assertNativeScanSettingsEquals;
-import static com.android.server.wifi.ScanTestUtil.assertScanDatasEquals;
-import static com.android.server.wifi.ScanTestUtil.channelsToSpec;
-import static com.android.server.wifi.ScanTestUtil.computeSingleScanNativeSettings;
-import static com.android.server.wifi.ScanTestUtil.createRequest;
-import static com.android.server.wifi.ScanTestUtil.createSingleScanNativeSettingsForChannels;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import static org.mockito.Mockito.any;
-import static org.mockito.Mockito.argThat;
-import static org.mockito.Mockito.inOrder;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.validateMockitoUsage;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
-import static org.mockito.Mockito.when;
+import static com.android.server.wifi.ScanTestUtil.*;
+
+import static org.junit.Assert.*;
+import static org.mockito.Mockito.*;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.IntentFilter;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiScanner;
+import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
+import android.os.WorkSource;
import android.test.suitebuilder.annotation.SmallTest;
import com.android.internal.app.IBatteryStats;
@@ -174,15 +160,21 @@ public class WifiScanningServiceTest {
}
private void sendBackgroundScanRequest(BidirectionalAsyncChannel controlChannel,
- int scanRequestId, WifiScanner.ScanSettings settings) {
+ int scanRequestId, WifiScanner.ScanSettings settings, WorkSource workSource) {
+ Bundle scanParams = new Bundle();
+ scanParams.putParcelable(WifiScanner.SCAN_PARAMS_SCAN_SETTINGS_KEY, settings);
+ scanParams.putParcelable(WifiScanner.SCAN_PARAMS_WORK_SOURCE_KEY, workSource);
controlChannel.sendMessage(Message.obtain(null, WifiScanner.CMD_START_BACKGROUND_SCAN, 0,
- scanRequestId, settings));
+ scanRequestId, scanParams));
}
private void sendSingleScanRequest(BidirectionalAsyncChannel controlChannel,
- int scanRequestId, WifiScanner.ScanSettings settings) {
+ int scanRequestId, WifiScanner.ScanSettings settings, WorkSource workSource) {
+ Bundle scanParams = new Bundle();
+ scanParams.putParcelable(WifiScanner.SCAN_PARAMS_SCAN_SETTINGS_KEY, settings);
+ scanParams.putParcelable(WifiScanner.SCAN_PARAMS_WORK_SOURCE_KEY, workSource);
controlChannel.sendMessage(Message.obtain(null, WifiScanner.CMD_START_SINGLE_SCAN, 0,
- scanRequestId, settings));
+ scanRequestId, scanParams));
}
private void verifySuccessfulResponse(InOrder order, Handler handler, int arg2) {
@@ -282,7 +274,7 @@ public class WifiScanningServiceTest {
Handler handler = mock(Handler.class);
BidirectionalAsyncChannel controlChannel = connectChannel(handler);
InOrder order = inOrder(handler);
- sendBackgroundScanRequest(controlChannel, 122, generateValidScanSettings());
+ sendBackgroundScanRequest(controlChannel, 122, generateValidScanSettings(), null);
mLooper.dispatchAll();
verifyFailedResponse(order, handler, 122, WifiScanner.REASON_UNSPECIFIED, "not available");
}
@@ -297,7 +289,7 @@ public class WifiScanningServiceTest {
InOrder order = inOrder(handler);
when(mWifiScannerImpl.startBatchedScan(any(WifiNative.ScanSettings.class),
any(WifiNative.ScanEventHandler.class))).thenReturn(true);
- sendBackgroundScanRequest(controlChannel, 192, generateValidScanSettings());
+ sendBackgroundScanRequest(controlChannel, 192, generateValidScanSettings(), null);
mLooper.dispatchAll();
verifySuccessfulResponse(order, handler, 192);
}
@@ -327,7 +319,7 @@ public class WifiScanningServiceTest {
when(mWifiScannerImpl.startSingleScan(any(WifiNative.ScanSettings.class),
any(WifiNative.ScanEventHandler.class))).thenReturn(true);
- sendSingleScanRequest(controlChannel, requestId, requestSettings);
+ sendSingleScanRequest(controlChannel, requestId, requestSettings, null);
mLooper.dispatchAll();
WifiNative.ScanEventHandler eventHandler = verifyStartSingleScan(order, nativeSettings);
@@ -385,7 +377,7 @@ public class WifiScanningServiceTest {
when(mWifiScannerImpl.startSingleScan(any(WifiNative.ScanSettings.class),
any(WifiNative.ScanEventHandler.class))).thenReturn(false);
- sendSingleScanRequest(controlChannel, requestId, requestSettings);
+ sendSingleScanRequest(controlChannel, requestId, requestSettings, null);
mLooper.dispatchAll();
// Scan is successfully queue, but then fails to execute
@@ -419,7 +411,7 @@ public class WifiScanningServiceTest {
when(mWifiScannerImpl.startSingleScan(any(WifiNative.ScanSettings.class),
any(WifiNative.ScanEventHandler.class))).thenReturn(true);
- sendSingleScanRequest(controlChannel, requestId, requestSettings);
+ sendSingleScanRequest(controlChannel, requestId, requestSettings, null);
// Scan is successfully queue
mLooper.dispatchAll();
@@ -467,7 +459,7 @@ public class WifiScanningServiceTest {
InOrder order = inOrder(handler, mWifiScannerImpl);
// Run scan 1
- sendSingleScanRequest(controlChannel, requestId1, requestSettings1);
+ sendSingleScanRequest(controlChannel, requestId1, requestSettings1, null);
mLooper.dispatchAll();
WifiNative.ScanEventHandler eventHandler1 = verifyStartSingleScan(order,
@@ -484,7 +476,7 @@ public class WifiScanningServiceTest {
verifySingleScanCompletedRecieved(order, handler, requestId1);
// Run scan 2
- sendSingleScanRequest(controlChannel, requestId2, requestSettings2);
+ sendSingleScanRequest(controlChannel, requestId2, requestSettings2, null);
mLooper.dispatchAll();
WifiNative.ScanEventHandler eventHandler2 = verifyStartSingleScan(order,
@@ -529,7 +521,7 @@ public class WifiScanningServiceTest {
InOrder nativeOrder = inOrder(mWifiScannerImpl);
// Run scan 1
- sendSingleScanRequest(controlChannel, requestId1, requestSettings1);
+ sendSingleScanRequest(controlChannel, requestId1, requestSettings1, null);
mLooper.dispatchAll();
WifiNative.ScanEventHandler eventHandler1 = verifyStartSingleScan(nativeOrder,
@@ -537,7 +529,7 @@ public class WifiScanningServiceTest {
verifySuccessfulResponse(handlerOrder, handler, requestId1);
// Queue scan 2 (will not run because previous is in progress)
- sendSingleScanRequest(controlChannel, requestId2, requestSettings2);
+ sendSingleScanRequest(controlChannel, requestId2, requestSettings2, null);
mLooper.dispatchAll();
verifySuccessfulResponse(handlerOrder, handler, requestId2);
@@ -604,7 +596,7 @@ public class WifiScanningServiceTest {
InOrder nativeOrder = inOrder(mWifiScannerImpl);
// Run scan 1
- sendSingleScanRequest(controlChannel, requestId1, requestSettings1);
+ sendSingleScanRequest(controlChannel, requestId1, requestSettings1, null);
mLooper.dispatchAll();
WifiNative.ScanEventHandler eventHandler1 = verifyStartSingleScan(nativeOrder,
@@ -612,12 +604,12 @@ public class WifiScanningServiceTest {
verifySuccessfulResponse(handlerOrder, handler, requestId1);
// Queue scan 2 (will not run because previous is in progress)
- sendSingleScanRequest(controlChannel, requestId2, requestSettings2);
+ sendSingleScanRequest(controlChannel, requestId2, requestSettings2, null);
mLooper.dispatchAll();
verifySuccessfulResponse(handlerOrder, handler, requestId2);
// Queue scan 3 (will not run because previous is in progress)
- sendSingleScanRequest(controlChannel, requestId3, requestSettings3);
+ sendSingleScanRequest(controlChannel, requestId3, requestSettings3, null);
mLooper.dispatchAll();
verifySuccessfulResponse(handlerOrder, handler, requestId3);
@@ -682,7 +674,7 @@ public class WifiScanningServiceTest {
when(mWifiScannerImpl.startBatchedScan(any(WifiNative.ScanSettings.class),
any(WifiNative.ScanEventHandler.class))).thenReturn(true);
- sendBackgroundScanRequest(controlChannel, 12, requestSettings);
+ sendBackgroundScanRequest(controlChannel, 12, requestSettings, null);
mLooper.dispatchAll();
verifyStartBackgroundScan(order, nativeSettings);
verifySuccessfulResponse(order, handler, 12);