summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorRoshan Pius <rpius@google.com>2016-03-09 09:15:46 -0800
committerRoshan Pius <rpius@google.com>2016-03-09 20:05:08 -0800
commit1fa40005d82db21b2cc1c7e06d249b09c674ab8b (patch)
tree5d9941e2dcd885cbec80d87ea87754d0c6ca27af /service
parentd0310c7cb097dcb88a042b9308306091b4b8d568 (diff)
WifiScanningServiceImpl: Add PNO active scans map
Add a separate map for storing all PNO request to their corresponding listeners. BUG: 27167559 Change-Id: Ib8c98c06478687d3fde50f33f0843ae0f13f2431
Diffstat (limited to 'service')
-rw-r--r--service/java/com/android/server/wifi/WifiScanningServiceImpl.java51
1 files changed, 33 insertions, 18 deletions
diff --git a/service/java/com/android/server/wifi/WifiScanningServiceImpl.java b/service/java/com/android/server/wifi/WifiScanningServiceImpl.java
index 9c8895440..4c552026e 100644
--- a/service/java/com/android/server/wifi/WifiScanningServiceImpl.java
+++ b/service/java/com/android/server/wifi/WifiScanningServiceImpl.java
@@ -645,6 +645,8 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub {
private final StartedState mStartedState = new StartedState();
private final PausedState mPausedState = new PausedState();
+ private final ClientHandlerMap<PnoSettings> mActivePnoScans = new ClientHandlerMap<>();
+
WifiBackgroundScanStateMachine(Looper looper) {
super(TAG, looper);
@@ -724,6 +726,7 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub {
@Override
public void enter() {
if (DBG) localLog("DefaultState");
+ mActivePnoScans.clear();
}
@Override
public boolean processMessage(Message msg) {
@@ -795,6 +798,12 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub {
}
@Override
+ public void exit() {
+ sendPnoScanFailedToAllAndClear(
+ WifiScanner.REASON_UNSPECIFIED, "Scan was interrupted");
+ }
+
+ @Override
public boolean processMessage(Message msg) {
ClientInfo ci = mClients.get(msg.replyTo);
@@ -820,6 +829,7 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub {
ScanSettings scanSettings =
pnoParams.getParcelable(WifiScanner.PNO_PARAMS_SCAN_SETTINGS_KEY);
if (addScanRequestForPno(ci, msg.arg2, scanSettings, pnoSettings)) {
+ mActivePnoScans.put(ci, msg.arg2, pnoSettings);
replySucceeded(msg);
} else {
replyFailed(msg, WifiScanner.REASON_INVALID_REQUEST, "bad request");
@@ -827,6 +837,7 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub {
break;
case WifiScanner.CMD_STOP_PNO_SCAN:
removeScanRequestForPno(ci, msg.arg2, (PnoSettings) msg.obj);
+ mActivePnoScans.remove(ci, msg.arg2);
break;
case WifiScanner.CMD_GET_SCAN_RESULTS:
reportScanResults(mScannerImpl.getLatestBatchedScanResults(true));
@@ -926,6 +937,28 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub {
}
}
+
+ void sendPnoScanFailedToAllAndClear(int reason, String description) {
+ for (Pair<ClientInfo, Integer> key : mActivePnoScans.keySet()) {
+ ClientInfo ci = key.first;
+ int handler = key.second;
+ ci.sendMessage(WifiScanner.CMD_OP_FAILED, 0, handler,
+ new WifiScanner.OperationResult(reason, description));
+ }
+ mActivePnoScans.clear();
+ }
+
+ void reportPnoNetworkFound(ScanResult[] results) {
+ WifiScanner.ParcelableScanResults parcelableScanResults =
+ new WifiScanner.ParcelableScanResults(results);
+ for (Map.Entry<Pair<ClientInfo, Integer>, PnoSettings> entry
+ : mActivePnoScans.entrySet()) {
+ ClientInfo ci = entry.getKey().first;
+ int handler = entry.getKey().second;
+ ci.sendMessage(WifiScanner.CMD_PNO_NETWORK_FOUND, 0, handler,
+ parcelableScanResults);
+ }
+ }
}
private class ClientInfo {
@@ -1194,17 +1227,6 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub {
}
}
- void reportPnoNetworkFound(ScanResult[] results) {
- WifiScanner.ParcelableScanResults parcelableScanResults =
- new WifiScanner.ParcelableScanResults(results);
- Iterator<Integer> it = mSignificantWifiHandlers.iterator();
- while (it.hasNext()) {
- int handler = it.next();
- mChannel.sendMessage(WifiScanner.CMD_PNO_NETWORK_FOUND, 0, handler,
- parcelableScanResults);
- }
- }
-
void cleanup() {
mDisconnected = true;
mBackgroundScanSettings.clear();
@@ -1540,13 +1562,6 @@ public class WifiScanningServiceImpl extends IWifiScanner.Stub {
}
}
- void reportPnoNetworkFound(ScanResult[] results) {
- Collection<ClientInfo> clients = mClients.values();
- for (ClientInfo ci : clients) {
- ci.reportPnoNetworkFound(results);
- }
- }
-
class WifiChangeStateMachine extends StateMachine
implements WifiNative.SignificantWifiChangeEventHandler {