diff options
author | Roshan Pius <rpius@google.com> | 2016-03-09 09:15:46 -0800 |
---|---|---|
committer | Roshan Pius <rpius@google.com> | 2016-03-09 20:05:08 -0800 |
commit | 1fa40005d82db21b2cc1c7e06d249b09c674ab8b (patch) | |
tree | 5d9941e2dcd885cbec80d87ea87754d0c6ca27af /service | |
parent | d0310c7cb097dcb88a042b9308306091b4b8d568 (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.java | 51 |
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 { |