diff options
author | Fyodor Kupolov <fkupolov@google.com> | 2015-10-16 22:23:24 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-10-16 22:23:24 +0000 |
commit | 35f3b9ce41b43de59487b3231aedc64d735593a8 (patch) | |
tree | d7fe641302d808512fdd8ec499acf95b9704b991 /service | |
parent | f2e7f4fa1ac1481cdbc7bf3296321ac0fa159cc6 (diff) | |
parent | 65ada07fcc88600d1a8c77269f62590f630f7aab (diff) | |
download | frameworks_opt_net_wifi-35f3b9ce41b43de59487b3231aedc64d735593a8.tar.gz frameworks_opt_net_wifi-35f3b9ce41b43de59487b3231aedc64d735593a8.tar.bz2 frameworks_opt_net_wifi-35f3b9ce41b43de59487b3231aedc64d735593a8.zip |
Merge "Fix foreground scans for pre-M apps when location is disabled" into mnc-dr-dev
Diffstat (limited to 'service')
-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 1a790ef..33ce852 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. * |