summaryrefslogtreecommitdiffstats
path: root/service/java/com
diff options
context:
space:
mode:
authorvandwalle <vandwalle@google.com>2014-11-21 18:00:06 -0800
committervandwalle <vandwalle@google.com>2014-11-25 15:51:31 -0800
commit9086afccf6938a49eb9a2cd248917c1cb0943942 (patch)
tree21fbfcaf9ccad6486224e32287ed799b1982d13c /service/java/com
parent833dcce8f6712f7594f06ea33208e3e106c15afc (diff)
downloadandroid_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.java32
-rw-r--r--service/java/com/android/server/wifi/WifiStateMachine.java11
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)