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

Commit 26bb9c95 authored by Nick Kralevich's avatar Nick Kralevich Committed by Android Git Automerger
Browse files

am 0d17aaa5: Merge "Grant optional permissions by default for system apps." into jb-mr2-dev

* commit '0d17aaa5':
  Grant optional permissions by default for system apps.
parents aaa46cfa 0d17aaa5
Loading
Loading
Loading
Loading
+16 −7
Original line number Diff line number Diff line
@@ -5135,9 +5135,16 @@ public class PackageManagerService extends IPackageManager.Stub {
            final int level = bp.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE;
            if (level == PermissionInfo.PROTECTION_NORMAL
                    || level == PermissionInfo.PROTECTION_DANGEROUS) {
                // If the permission is required, or it's optional and was previously
                // granted to the application, then allow it. Otherwise deny.
                allowed = (required || origPermissions.contains(perm));
                // We grant a normal or dangerous permission if any of the following
                // are true:
                // 1) The permission is required
                // 2) The permission is optional, but was granted in the past
                // 3) The permission is optional, but was requested by an
                //    app in /system (not /data)
                //
                // Otherwise, reject the permission.
                allowed = (required || origPermissions.contains(perm)
                        || (isSystemApp(ps) && !isUpdatedSystemApp(ps)));
            } else if (bp.packageSetting == null) {
                // This permission is invalid; skip it.
                allowed = false;
@@ -5155,8 +5162,7 @@ public class PackageManagerService extends IPackageManager.Stub {
                }
            }
            if (allowed) {
                if ((ps.pkgFlags&ApplicationInfo.FLAG_SYSTEM) == 0
                        && ps.permissionsFixed) {
                if (!isSystemApp(ps) && ps.permissionsFixed) {
                    // If this is an existing, non-system package, then
                    // we can't add any new permissions to it.
                    if (!allowedSig && !gp.grantedPermissions.contains(perm)) {
@@ -5199,8 +5205,7 @@ public class PackageManagerService extends IPackageManager.Stub {
        }

        if ((changedPermission || replace) && !ps.permissionsFixed &&
                ((ps.pkgFlags&ApplicationInfo.FLAG_SYSTEM) == 0) ||
                ((ps.pkgFlags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0)){
                !isSystemApp(ps) || isUpdatedSystemApp(ps)){
            // This is the first that we have heard about this package, so the
            // permissions we have now selected are fixed until explicitly
            // changed.
@@ -8381,6 +8386,10 @@ public class PackageManagerService extends IPackageManager.Stub {
        return (ps.pkgFlags & ApplicationInfo.FLAG_SYSTEM) != 0;
    }

    private static boolean isUpdatedSystemApp(PackageSetting ps) {
        return (ps.pkgFlags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0;
    }

    private static boolean isUpdatedSystemApp(PackageParser.Package pkg) {
        return (pkg.applicationInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0;
    }