Allow active network scorer access to scan results.
BTW, AS corrected the import order of a lot of imports. Let me
know if you want it restored.
Bug: 22777873
Change-Id: Ia6ad069b83ecf9c0f07a620dbc98c85161a8e396
diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java
index 1b52a45..0bfda17 100644
--- a/service/java/com/android/server/wifi/WifiServiceImpl.java
+++ b/service/java/com/android/server/wifi/WifiServiceImpl.java
@@ -30,14 +30,23 @@
import android.net.ConnectivityManager;
import android.net.DhcpInfo;
import android.net.DhcpResults;
-import android.net.IpConfiguration.ProxySettings;
-import android.net.LinkAddress;
import android.net.Network;
+import android.net.NetworkScorerAppManager;
import android.net.NetworkUtils;
-import android.net.RouteInfo;
import android.net.Uri;
-import android.net.wifi.*;
+import android.net.wifi.BatchedScanResult;
+import android.net.wifi.BatchedScanSettings;
import android.net.wifi.IWifiManager;
+import android.net.wifi.ScanResult;
+import android.net.wifi.ScanSettings;
+import android.net.wifi.WifiActivityEnergyInfo;
+import android.net.wifi.WifiChannel;
+import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiConnectionStatistics;
+import android.net.wifi.WifiEnterpriseConfig;
+import android.net.wifi.WifiInfo;
+import android.net.wifi.WifiLinkLayerStats;
+import android.net.wifi.WifiManager;
import android.os.AsyncTask;
import android.os.Binder;
import android.os.Build;
@@ -58,16 +67,23 @@
import android.util.Log;
import android.util.Slog;
-import java.io.FileNotFoundException;
+import com.android.internal.R;
+import com.android.internal.app.IBatteryStats;
+import com.android.internal.telephony.TelephonyIntents;
+import com.android.internal.util.AsyncChannel;
+import com.android.server.am.BatteryStatsService;
+import com.android.server.wifi.configparse.ConfigBuilder;
+
+import org.xml.sax.SAXException;
+
import java.io.BufferedReader;
import java.io.FileDescriptor;
+import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
-import java.lang.Override;
-import java.net.InetAddress;
import java.net.Inet4Address;
-import java.net.URISyntaxException;
+import java.net.InetAddress;
import java.security.GeneralSecurityException;
import java.security.KeyStore;
import java.security.cert.CertPath;
@@ -80,15 +96,6 @@
import java.util.Arrays;
import java.util.List;
-import com.android.internal.R;
-import com.android.internal.app.IBatteryStats;
-import com.android.internal.telephony.TelephonyIntents;
-import com.android.internal.util.AsyncChannel;
-import com.android.server.am.BatteryStatsService;
-import com.android.server.wifi.configparse.ConfigBuilder;
-
-import org.xml.sax.SAXException;
-
import static com.android.server.wifi.WifiController.CMD_AIRPLANE_TOGGLED;
import static com.android.server.wifi.WifiController.CMD_BATTERY_CHANGED;
import static com.android.server.wifi.WifiController.CMD_EMERGENCY_MODE_CHANGED;
@@ -813,7 +820,7 @@
public int addOrUpdateNetwork(WifiConfiguration config) {
enforceChangePermission();
if (isValid(config) && isValidPasspoint(config)) {
-
+
WifiEnterpriseConfig enterpriseConfig = config.enterpriseConfig;
if (config.isPasspoint() &&
@@ -948,13 +955,16 @@
int userId = UserHandle.getCallingUserId();
int uid = Binder.getCallingUid();
boolean canReadPeerMacAddresses = checkPeersMacAddress();
+ boolean isActiveNetworkScorer =
+ NetworkScorerAppManager.isCallerActiveScorer(mContext, uid);
boolean hasInteractUsersFull = checkInteractAcrossUsersFull();
long ident = Binder.clearCallingIdentity();
try {
- if (!canReadPeerMacAddresses && !isLocationEnabled()) {
+ if (!canReadPeerMacAddresses && !isActiveNetworkScorer
+ && !isLocationEnabled()) {
return new ArrayList<ScanResult>();
}
- if (!canReadPeerMacAddresses
+ if (!canReadPeerMacAddresses && !isActiveNetworkScorer
&& !checkCallerHasLocationPermission(callingPackage, uid)) {
return new ArrayList<ScanResult>();
}
@@ -1940,7 +1950,7 @@
}
}
}
-
+
/* private methods */
static boolean logAndReturnFalse(String s) {
Log.d(TAG, s);