diff options
author | vandwalle <vandwalle@google.com> | 2014-11-21 18:00:06 -0800 |
---|---|---|
committer | vandwalle <vandwalle@google.com> | 2014-11-25 15:51:31 -0800 |
commit | 9086afccf6938a49eb9a2cd248917c1cb0943942 (patch) | |
tree | 21fbfcaf9ccad6486224e32287ed799b1982d13c /service/java/com | |
parent | 833dcce8f6712f7594f06ea33208e3e106c15afc (diff) | |
download | android_frameworks_opt_net_wifi-9086afccf6938a49eb9a2cd248917c1cb0943942.tar.gz android_frameworks_opt_net_wifi-9086afccf6938a49eb9a2cd248917c1cb0943942.tar.bz2 android_frameworks_opt_net_wifi-9086afccf6938a49eb9a2cd248917c1cb0943942.zip |
remove dfs channel from location restricted scans
Change-Id: I387816c8682e9f595229ecbb20c35711ea1f069b
Diffstat (limited to 'service/java/com')
-rw-r--r-- | service/java/com/android/server/wifi/WifiServiceImpl.java | 32 | ||||
-rw-r--r-- | service/java/com/android/server/wifi/WifiStateMachine.java | 11 |
2 files changed, 39 insertions, 4 deletions
diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java index 327d04361..bcaab925a 100644 --- a/service/java/com/android/server/wifi/WifiServiceImpl.java +++ b/service/java/com/android/server/wifi/WifiServiceImpl.java @@ -16,6 +16,7 @@ package com.android.server.wifi; +import android.Manifest; import android.app.ActivityManager; import android.app.AppOpsManager; import android.bluetooth.BluetoothAdapter; @@ -387,6 +388,30 @@ public final class WifiServiceImpl extends IWifiManager.Stub { } } + // Start a location scan. + // L release: A location scan is implemented as a normal scan and avoids scanning DFS channels + public void startLocationRestrictedScan(WorkSource workSource) { + enforceChangePermission(); + enforceLocationHardwarePermission(); + List<WifiChannel> channels = getChannelList(); + if (channels == null) { + Slog.e(TAG, "startLocationRestrictedScan cant get channels"); + return; + } + ScanSettings settings = new ScanSettings(); + for (WifiChannel channel : channels) { + if (!channel.isDFS) { + settings.channelSet.add(channel); + } + } + if (workSource == null) { + // Make sure we always have a workSource indicating the origin of the scan + // hence if there is none, pick an internal WifiStateMachine one + workSource = new WorkSource(WifiStateMachine.DFS_RESTRICTED_SCAN_REQUEST); + } + startScan(settings, workSource); + } + /** * see {@link android.net.wifi.WifiManager#startScan} * and {@link android.net.wifi.WifiManager#startCustomizedScan} @@ -397,9 +422,6 @@ public final class WifiServiceImpl extends IWifiManager.Stub { public void startScan(ScanSettings settings, WorkSource workSource) { enforceChangePermission(); if (settings != null) { - // TODO: should be removed once the startCustomizedScan API is opened up - mContext.enforceCallingOrSelfPermission(android.Manifest.permission.LOCATION_HARDWARE, - "LocationHardware"); settings = new ScanSettings(settings); if (!settings.isValid()) { Slog.e(TAG, "invalid scan setting"); @@ -611,7 +633,11 @@ public final class WifiServiceImpl extends IWifiManager.Stub { private void enforceChangePermission() { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.CHANGE_WIFI_STATE, "WifiService"); + } + private void enforceLocationHardwarePermission() { + mContext.enforceCallingOrSelfPermission(Manifest.permission.LOCATION_HARDWARE, + "LocationHardware"); } private void enforceReadCredentialPermission() { diff --git a/service/java/com/android/server/wifi/WifiStateMachine.java b/service/java/com/android/server/wifi/WifiStateMachine.java index d0f47c5d7..c824dd59d 100644 --- a/service/java/com/android/server/wifi/WifiStateMachine.java +++ b/service/java/com/android/server/wifi/WifiStateMachine.java @@ -224,6 +224,8 @@ public class WifiStateMachine extends StateMachine { private int mOperationalMode = CONNECT_MODE; private boolean mIsScanOngoing = false; private boolean mIsFullScanOngoing = false; + private boolean mSendScanResultsBroadcast = false; + private final Queue<Message> mBufferedScanMsg = new LinkedList<Message>(); private WorkSource mScanWorkSource = null; private static final int UNKNOWN_SCAN_SOURCE = -1; @@ -231,6 +233,7 @@ public class WifiStateMachine extends StateMachine { private static final int ADD_OR_UPDATE_SOURCE = -3; private static final int SET_ALLOW_UNTRUSTED_SOURCE = -4; private static final int ENABLE_WIFI = -5; + public static final int DFS_RESTRICTED_SCAN_REQUEST = -6; private static final int SCAN_REQUEST_BUFFER_MAX_SIZE = 10; private static final String CUSTOMIZED_SCAN_SETTING = "customized_scan_settings"; @@ -1826,6 +1829,11 @@ public class WifiStateMachine extends StateMachine { if (freqs == null) mBufferedScanMsg.clear(); messageHandlingStatus = MESSAGE_HANDLING_STATUS_OK; + if (workSource != null) { + // External worksource was passed along the scan request, + // hence always send a broadcast + mSendScanResultsBroadcast = true; + } return; } @@ -5014,10 +5022,11 @@ public class WifiStateMachine extends StateMachine { closeRadioScanStats(); noteScanEnd(); setScanResults(); - if (mIsFullScanOngoing) { + if (mIsFullScanOngoing || mSendScanResultsBroadcast) { /* Just updated results from full scan, let apps know about this */ sendScanResultsAvailableBroadcast(); } + mSendScanResultsBroadcast = false; mIsScanOngoing = false; mIsFullScanOngoing = false; if (mBufferedScanMsg.size() > 0) |