Loading services/core/java/com/android/server/pm/PackageManagerService.java +22 −4 Original line number Original line Diff line number Diff line Loading @@ -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; } } } } Loading @@ -3140,16 +3146,28 @@ 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; } if (Manifest.permission.ACCESS_COARSE_LOCATION.equals(permName) && perms .contains(Manifest.permission.ACCESS_FINE_LOCATION)) { return PackageManager.PERMISSION_GRANTED; return PackageManager.PERMISSION_GRANTED; } } } } } } } return PackageManager.PERMISSION_DENIED; return PackageManager.PERMISSION_DENIED; } } Loading Loading
services/core/java/com/android/server/pm/PackageManagerService.java +22 −4 Original line number Original line Diff line number Diff line Loading @@ -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; } } } } Loading @@ -3140,16 +3146,28 @@ 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; } if (Manifest.permission.ACCESS_COARSE_LOCATION.equals(permName) && perms .contains(Manifest.permission.ACCESS_FINE_LOCATION)) { return PackageManager.PERMISSION_GRANTED; return PackageManager.PERMISSION_GRANTED; } } } } } } } return PackageManager.PERMISSION_DENIED; return PackageManager.PERMISSION_DENIED; } } Loading