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

Commit 8d3a8040 authored by Ralph Nathan's avatar Ralph Nathan Committed by Alex Deymo
Browse files

iot: Grant all runtime permissions for installed apks.

Iot devices don't have user-installable apps. In addition, not all iot
devices have a screen. As such, it doesn't make sense to have runtime
permissions nor can users grant them in all cases.

Cherry-picked and adapted to depend on the FEATURE_EMBEDDED flag.

Bug: 31220981
Bug: 35804180
Test: manual test w/app

(cherry-picked from 1e577da550c523edea9bd23ef5a0baf221c936f8)

Change-Id: Ib3ca73660bc511ab68982b82327463801b583d0b
parent 870c26af
Loading
Loading
Loading
Loading
+30 −15
Original line number Diff line number Diff line
@@ -207,10 +207,36 @@ final class DefaultPermissionGrantPolicy {
    }

    public void grantDefaultPermissions(int userId) {
        if (mService.hasSystemFeature(PackageManager.FEATURE_EMBEDDED, 0)) {
            grantAllRuntimePermissions(userId);
        } else {
            grantPermissionsToSysComponentsAndPrivApps(userId);
            grantDefaultSystemHandlerPermissions(userId);
            grantDefaultPermissionExceptions(userId);
        }
    }

    private void grantRuntimePermissionsForPackageLocked(int userId, PackageParser.Package pkg) {
        Set<String> permissions = new ArraySet<>();
        for (String permission :  pkg.requestedPermissions) {
            BasePermission bp = mService.mSettings.mPermissions.get(permission);
            if (bp != null && bp.isRuntime()) {
                permissions.add(permission);
            }
        }
        if (!permissions.isEmpty()) {
            grantRuntimePermissionsLPw(pkg, permissions, true, userId);
        }
    }

    private void grantAllRuntimePermissions(int userId) {
        Log.i(TAG, "Granting all runtime permissions for user " + userId);
        synchronized (mService.mPackages) {
            for (PackageParser.Package pkg : mService.mPackages.values()) {
                grantRuntimePermissionsForPackageLocked(userId, pkg);
            }
        }
    }

    public void scheduleReadDefaultPermissionExceptions() {
        mHandler.sendEmptyMessage(MSG_READ_DEFAULT_PERMISSION_EXCEPTIONS);
@@ -226,18 +252,7 @@ final class DefaultPermissionGrantPolicy {
                        || pkg.requestedPermissions.isEmpty()) {
                    continue;
                }
                Set<String> permissions = new ArraySet<>();
                final int permissionCount = pkg.requestedPermissions.size();
                for (int i = 0; i < permissionCount; i++) {
                    String permission = pkg.requestedPermissions.get(i);
                    BasePermission bp = mService.mSettings.mPermissions.get(permission);
                    if (bp != null && bp.isRuntime()) {
                        permissions.add(permission);
                    }
                }
                if (!permissions.isEmpty()) {
                    grantRuntimePermissionsLPw(pkg, permissions, true, userId);
                }
                grantRuntimePermissionsForPackageLocked(userId, pkg);
            }
        }
    }