summaryrefslogtreecommitdiffstats
path: root/service/java
diff options
context:
space:
mode:
authorFyodor Kupolov <fkupolov@google.com>2015-10-14 10:19:23 -0700
committerFyodor Kupolov <fkupolov@google.com>2015-10-15 09:23:43 -0700
commit65ada07fcc88600d1a8c77269f62590f630f7aab (patch)
tree709302b7ef3371a374a2cca3d707ec4bb1caf0e9 /service/java
parente2ba917b13c0271e018457917a6388a2f84e20ab (diff)
downloadandroid_frameworks_opt_net_wifi-65ada07fcc88600d1a8c77269f62590f630f7aab.tar.gz
android_frameworks_opt_net_wifi-65ada07fcc88600d1a8c77269f62590f630f7aab.tar.bz2
android_frameworks_opt_net_wifi-65ada07fcc88600d1a8c77269f62590f630f7aab.zip
Fix foreground scans for pre-M apps when location is disabled
Wi-Fi scans should be enabled for legacy foreground apps when location is disabled. Bug: 23081999 Change-Id: I09ff32ab9845e989ed292824b7aee84d10d260cf
Diffstat (limited to 'service/java')
-rw-r--r--service/java/com/android/server/wifi/WifiServiceImpl.java29
1 files changed, 18 insertions, 11 deletions
diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java
index b02556614..b675cd66d 100644
--- a/service/java/com/android/server/wifi/WifiServiceImpl.java
+++ b/service/java/com/android/server/wifi/WifiServiceImpl.java
@@ -988,7 +988,7 @@ public final class WifiServiceImpl extends IWifiManager.Stub {
long ident = Binder.clearCallingIdentity();
try {
if (!canReadPeerMacAddresses && !isActiveNetworkScorer
- && !isLocationEnabled()) {
+ && !isLocationEnabled(callingPackage)) {
return new ArrayList<ScanResult>();
}
if (!canReadPeerMacAddresses && !isActiveNetworkScorer
@@ -1008,9 +1008,12 @@ public final class WifiServiceImpl extends IWifiManager.Stub {
}
}
- private boolean isLocationEnabled() {
- return Settings.Secure.getInt(mContext.getContentResolver(), Settings.Secure.LOCATION_MODE,
- Settings.Secure.LOCATION_MODE_OFF) != Settings.Secure.LOCATION_MODE_OFF;
+ private boolean isLocationEnabled(String callingPackage) {
+ boolean legacyForegroundApp = !isMApp(mContext, callingPackage)
+ && isForegroundApp(callingPackage);
+ return legacyForegroundApp || Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF)
+ != Settings.Secure.LOCATION_MODE_OFF;
}
/**
@@ -2073,13 +2076,7 @@ public final class WifiServiceImpl extends IWifiManager.Stub {
&& checkAppOppAllowed(AppOpsManager.OP_COARSE_LOCATION, callingPackage, uid)) {
return true;
}
- boolean apiLevel23App = true;
- try {
- apiLevel23App = mContext.getPackageManager().getApplicationInfo(
- callingPackage, 0).targetSdkVersion >= Build.VERSION_CODES.M;
- } catch (PackageManager.NameNotFoundException e) {
- // In case of exception, assume app's API level is 23+
- }
+ boolean apiLevel23App = isMApp(mContext, callingPackage);
// Pre-M apps running in the foreground should continue getting scan results
if (!apiLevel23App && isForegroundApp(callingPackage)) {
return true;
@@ -2093,6 +2090,16 @@ public final class WifiServiceImpl extends IWifiManager.Stub {
return mAppOps.noteOp(op, uid, callingPackage) == AppOpsManager.MODE_ALLOWED;
}
+ private static boolean isMApp(Context context, String pkgName) {
+ try {
+ return context.getPackageManager().getApplicationInfo(pkgName, 0)
+ .targetSdkVersion >= Build.VERSION_CODES.M;
+ } catch (PackageManager.NameNotFoundException e) {
+ // In case of exception, assume M app (more strict checking)
+ }
+ return true;
+ }
+
/**
* Return true if the specified package name is a foreground app.
*