Merge "Check for ACCESS_COARSE_LOCATION/ACCESS_FINE_LOCATION" into mnc-dev

This commit is contained in:
Fyodor Kupolov
2015-07-27 17:27:02 +00:00
committed by Android (Google) Code Review

View File

@@ -3119,7 +3119,13 @@ public class PackageManagerService extends IPackageManager.Stub {
final PackageParser.Package p = mPackages.get(pkgName); final PackageParser.Package p = mPackages.get(pkgName);
if (p != null && p.mExtras != null) { if (p != null && p.mExtras != null) {
final PackageSetting ps = (PackageSetting) p.mExtras; final PackageSetting ps = (PackageSetting) p.mExtras;
if (ps.getPermissionsState().hasPermission(permName, userId)) { final PermissionsState permissionsState = ps.getPermissionsState();
if (permissionsState.hasPermission(permName, userId)) {
return PackageManager.PERMISSION_GRANTED;
}
// Special case: ACCESS_FINE_LOCATION permission includes ACCESS_COARSE_LOCATION
if (Manifest.permission.ACCESS_COARSE_LOCATION.equals(permName) && permissionsState
.hasPermission(Manifest.permission.ACCESS_FINE_LOCATION, userId)) {
return PackageManager.PERMISSION_GRANTED; return PackageManager.PERMISSION_GRANTED;
} }
} }
@@ -3140,14 +3146,26 @@ public class PackageManagerService extends IPackageManager.Stub {
Object obj = mSettings.getUserIdLPr(UserHandle.getAppId(uid)); Object obj = mSettings.getUserIdLPr(UserHandle.getAppId(uid));
if (obj != null) { if (obj != null) {
final SettingBase ps = (SettingBase) obj; final SettingBase ps = (SettingBase) obj;
if (ps.getPermissionsState().hasPermission(permName, userId)) { final PermissionsState permissionsState = ps.getPermissionsState();
if (permissionsState.hasPermission(permName, userId)) {
return PackageManager.PERMISSION_GRANTED;
}
// Special case: ACCESS_FINE_LOCATION permission includes ACCESS_COARSE_LOCATION
if (Manifest.permission.ACCESS_COARSE_LOCATION.equals(permName) && permissionsState
.hasPermission(Manifest.permission.ACCESS_FINE_LOCATION, userId)) {
return PackageManager.PERMISSION_GRANTED; return PackageManager.PERMISSION_GRANTED;
} }
} else { } else {
ArraySet<String> perms = mSystemPermissions.get(uid); ArraySet<String> perms = mSystemPermissions.get(uid);
if (perms != null && perms.contains(permName)) { if (perms != null) {
if (perms.contains(permName)) {
return PackageManager.PERMISSION_GRANTED; return PackageManager.PERMISSION_GRANTED;
} }
if (Manifest.permission.ACCESS_COARSE_LOCATION.equals(permName) && perms
.contains(Manifest.permission.ACCESS_FINE_LOCATION)) {
return PackageManager.PERMISSION_GRANTED;
}
}
} }
} }