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

Commit 901516cb authored by Philip P. Moltmann's avatar Philip P. Moltmann Committed by Android (Google) Code Review
Browse files

Merge "Revert "Reset system fixed to clean storage perm model 2"" into qt-dev

parents c28d4714 723afb72
Loading
Loading
Loading
Loading
+0 −41
Original line number Diff line number Diff line
@@ -305,7 +305,6 @@ public final class DefaultPermissionGrantPolicy {
    }

    public void grantDefaultPermissions(int userId) {
        removeSystemFixedStorage(userId);
        grantPermissionsToSysComponentsAndPrivApps(userId);
        grantDefaultSystemHandlerPermissions(userId);
        grantDefaultPermissionExceptions(userId);
@@ -314,46 +313,6 @@ public final class DefaultPermissionGrantPolicy {
        }
    }

    // STOPSHIP: This is meant to fix the devices messed up by storage permission model 2 and
    //           should be removed once all devices were updated
    private void removeSystemFixedStorage(int userId) {
        List<PackageInfo> packages = mContext.getPackageManager().getInstalledPackagesAsUser(
                DEFAULT_PACKAGE_INFO_QUERY_FLAGS, userId);

        for (PackageInfo pkg : packages) {
            if (pkg == null || pkg.requestedPermissions == null) {
                continue;
            }

            for (String permission : pkg.requestedPermissions) {
                if (!(Manifest.permission.READ_EXTERNAL_STORAGE.equals(permission)
                        || Manifest.permission.WRITE_EXTERNAL_STORAGE.equals(permission))) {
                    continue;
                }

                int flags = mContext.getPackageManager().getPermissionFlags(permission,
                        pkg.packageName, UserHandle.of(userId));
                if ((flags & PackageManager.FLAG_PERMISSION_SYSTEM_FIXED) == 0) {
                    continue;
                }

                Log.v(TAG, "Removing system fixed " + pkg.packageName + "/" + permission);
                mContext.getPackageManager().updatePermissionFlags(permission, pkg.packageName,
                        PackageManager.FLAG_PERMISSION_SYSTEM_FIXED, 0, UserHandle.of(userId));

                if (!doesPackageSupportRuntimePermissions(pkg)
                        || (flags & (PackageManager.FLAG_PERMISSION_USER_SET
                        | PackageManager.FLAG_PERMISSION_POLICY_FIXED)) != 0) {
                    continue;
                }

                Log.v(TAG, "Revoking " + pkg.packageName + "/" + permission);
                mContext.getPackageManager().revokeRuntimePermission(pkg.packageName, permission,
                        UserHandle.of(userId));
            }
        }
    }

    private void grantRuntimePermissionsForSystemPackage(int userId, PackageInfo pkg) {
        Set<String> permissions = new ArraySet<>();
        for (String permission : pkg.requestedPermissions) {