Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b83b5fa6 authored by Fyodor Kupolov's avatar Fyodor Kupolov Committed by Android (Google) Code Review
Browse files

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

parents 4604c1dc ce09a024
Loading
Loading
Loading
Loading
+22 −4
Original line number Original line Diff line number Diff line
@@ -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,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;
    }
    }