diff options
author | Fyodor Kupolov <fkupolov@google.com> | 2015-10-16 22:29:28 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2015-10-16 22:29:28 +0000 |
commit | be964f00e71597f880c051772e8acd1a44b08e17 (patch) | |
tree | e6e956236af1360aacaa404af5b087e4f956c44c | |
parent | c9bea298d4b6d4c9920914d3dc8df23e3c595700 (diff) | |
parent | 35f3b9ce41b43de59487b3231aedc64d735593a8 (diff) | |
download | android_frameworks_opt_net_wifi-be964f00e71597f880c051772e8acd1a44b08e17.tar.gz android_frameworks_opt_net_wifi-be964f00e71597f880c051772e8acd1a44b08e17.tar.bz2 android_frameworks_opt_net_wifi-be964f00e71597f880c051772e8acd1a44b08e17.zip |
am 35f3b9ce: Merge "Fix foreground scans for pre-M apps when location is disabled" into mnc-dr-dev
* commit '35f3b9ce41b43de59487b3231aedc64d735593a8':
Fix foreground scans for pre-M apps when location is disabled
-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 1a790ef36..33ce852e2 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. * |