Loading services/core/java/com/android/server/pm/PackageManagerService.java +23 −11 Original line number Diff line number Diff line Loading @@ -3902,14 +3902,10 @@ public class PackageManagerService extends IPackageManager.Stub Iterator<ResolveInfo> iter = matches.iterator(); while (iter.hasNext()) { final ResolveInfo rInfo = iter.next(); final PackageSetting ps = mSettings.mPackages.get(rInfo.activityInfo.packageName); if (ps != null) { final PermissionsState permissionsState = ps.getPermissionsState(); if (permissionsState.hasPermission(Manifest.permission.INSTALL_PACKAGES, 0) || Build.IS_ENG) { if (checkPermission(Manifest.permission.INSTALL_PACKAGES, rInfo.activityInfo.packageName, 0) == PERMISSION_GRANTED || Build.IS_ENG) { continue; } } iter.remove(); } if (matches.size() == 0) { Loading Loading @@ -4084,8 +4080,24 @@ public class PackageManagerService extends IPackageManager.Stub final int[] gids = (flags & PackageManager.GET_GIDS) == 0 ? EMPTY_INT_ARRAY : permissionsState.computeGids(userId); // Compute granted permissions only if package has requested permissions final Set<String> permissions = ArrayUtils.isEmpty(p.requestedPermissions) Set<String> permissions = ArrayUtils.isEmpty(p.requestedPermissions) ? Collections.emptySet() : permissionsState.getPermissions(userId); if (state.instantApp) { permissions = new ArraySet<>(permissions); permissions.removeIf(permissionName -> { BasePermission permission = mPermissionManager.getPermissionTEMP( permissionName); if (permission == null) { return true; } if (!permission.isInstant()) { EventLog.writeEvent(0x534e4554, "140256621", UserHandle.getUid(userId, ps.appId), permissionName); return true; } return false; }); } PackageInfo packageInfo = PackageParser.generatePackageInfo(p, gids, flags, ps.firstInstallTime, ps.lastUpdateTime, permissions, state, userId); Loading Loading @@ -8569,10 +8581,9 @@ public class PackageManagerService extends IPackageManager.Stub private void addPackageHoldingPermissions(ArrayList<PackageInfo> list, PackageSetting ps, String[] permissions, boolean[] tmp, int flags, int userId) { int numMatch = 0; final PermissionsState permissionsState = ps.getPermissionsState(); for (int i=0; i<permissions.length; i++) { final String permission = permissions[i]; if (permissionsState.hasPermission(permission, userId)) { if (checkPermission(permission, ps.name, userId) == PERMISSION_GRANTED) { tmp[i] = true; numMatch++; } else { Loading Loading @@ -19509,7 +19520,8 @@ public class PackageManagerService extends IPackageManager.Stub } final int userId = user == null ? UserHandle.USER_ALL : user.getIdentifier(); if (ps.getPermissionsState().hasPermission(Manifest.permission.SUSPEND_APPS, userId)) { if (checkPermission(Manifest.permission.SUSPEND_APPS, packageName, userId) == PERMISSION_GRANTED) { unsuspendForSuspendingPackage(packageName, userId); } if ((!systemApp || (flags & PackageManager.DELETE_SYSTEM_APP) != 0) Loading
services/core/java/com/android/server/pm/PackageManagerService.java +23 −11 Original line number Diff line number Diff line Loading @@ -3902,14 +3902,10 @@ public class PackageManagerService extends IPackageManager.Stub Iterator<ResolveInfo> iter = matches.iterator(); while (iter.hasNext()) { final ResolveInfo rInfo = iter.next(); final PackageSetting ps = mSettings.mPackages.get(rInfo.activityInfo.packageName); if (ps != null) { final PermissionsState permissionsState = ps.getPermissionsState(); if (permissionsState.hasPermission(Manifest.permission.INSTALL_PACKAGES, 0) || Build.IS_ENG) { if (checkPermission(Manifest.permission.INSTALL_PACKAGES, rInfo.activityInfo.packageName, 0) == PERMISSION_GRANTED || Build.IS_ENG) { continue; } } iter.remove(); } if (matches.size() == 0) { Loading Loading @@ -4084,8 +4080,24 @@ public class PackageManagerService extends IPackageManager.Stub final int[] gids = (flags & PackageManager.GET_GIDS) == 0 ? EMPTY_INT_ARRAY : permissionsState.computeGids(userId); // Compute granted permissions only if package has requested permissions final Set<String> permissions = ArrayUtils.isEmpty(p.requestedPermissions) Set<String> permissions = ArrayUtils.isEmpty(p.requestedPermissions) ? Collections.emptySet() : permissionsState.getPermissions(userId); if (state.instantApp) { permissions = new ArraySet<>(permissions); permissions.removeIf(permissionName -> { BasePermission permission = mPermissionManager.getPermissionTEMP( permissionName); if (permission == null) { return true; } if (!permission.isInstant()) { EventLog.writeEvent(0x534e4554, "140256621", UserHandle.getUid(userId, ps.appId), permissionName); return true; } return false; }); } PackageInfo packageInfo = PackageParser.generatePackageInfo(p, gids, flags, ps.firstInstallTime, ps.lastUpdateTime, permissions, state, userId); Loading Loading @@ -8569,10 +8581,9 @@ public class PackageManagerService extends IPackageManager.Stub private void addPackageHoldingPermissions(ArrayList<PackageInfo> list, PackageSetting ps, String[] permissions, boolean[] tmp, int flags, int userId) { int numMatch = 0; final PermissionsState permissionsState = ps.getPermissionsState(); for (int i=0; i<permissions.length; i++) { final String permission = permissions[i]; if (permissionsState.hasPermission(permission, userId)) { if (checkPermission(permission, ps.name, userId) == PERMISSION_GRANTED) { tmp[i] = true; numMatch++; } else { Loading Loading @@ -19509,7 +19520,8 @@ public class PackageManagerService extends IPackageManager.Stub } final int userId = user == null ? UserHandle.USER_ALL : user.getIdentifier(); if (ps.getPermissionsState().hasPermission(Manifest.permission.SUSPEND_APPS, userId)) { if (checkPermission(Manifest.permission.SUSPEND_APPS, packageName, userId) == PERMISSION_GRANTED) { unsuspendForSuspendingPackage(packageName, userId); } if ((!systemApp || (flags & PackageManager.DELETE_SYSTEM_APP) != 0)