diff options
author | Fyodor Kupolov <fkupolov@google.com> | 2015-10-14 10:19:23 -0700 |
---|---|---|
committer | Fyodor Kupolov <fkupolov@google.com> | 2015-10-15 09:23:43 -0700 |
commit | 65ada07fcc88600d1a8c77269f62590f630f7aab (patch) | |
tree | 709302b7ef3371a374a2cca3d707ec4bb1caf0e9 /service/java | |
parent | e2ba917b13c0271e018457917a6388a2f84e20ab (diff) | |
download | android_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.java | 29 |
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. * |